巨大な TLB ページ (1GB) を使用して 2GB のバッファーを割り当て、メモリ領域を特定の numa ノードにバインドしようとしています。
巨大な TLB ページを使用してバッファーを割り当てるために、次のコードを使用しています。
shmid = shmget (IPC_PRIVATE, buf_size,
SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
buf = (uint64_t *) shmat (shmid, 0, 0);
それから、私は電話しました:
numa_tonode_memory (buf, buf_size, 3);
バッファを特定のノードに移動します。
プログラムを実行すると、1GB を超えるバッファー オフセットにアクセスするとすぐに、「バス エラー (コア ダンプ)」でプログラムが停止します。
numa_tonode_memory を削除するとエラーは回避されますが、特定のノードにメモリを割り当てる目的が失われます。
この問題の回避策があるかどうかは疑問ですが、
ありがとうございました、