我正在尝试使用巨大的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可以避免错误,但是,它也会破坏在特定节点上分配内存的目的。
我想知道这个问题是否有任何解决方法,
谢谢,