1

我正在尝试使用巨大的 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 可以避免错误,但是,它也会破坏在特定节点上分配内存的目的。

我想知道是否有任何解决这个问题的方法,

谢谢,

4

0 回答 0