我正在开发一个NUMA应用程序,我需要将大数组从一个节点(实际创建它们的节点)迁移到另一个节点。
我无法使用numa_alloc_onnode()
函数,因为我需要在分配内存的进程与其子进程之间共享内存。
情况如下:
我有(BIG)node * array的这个数组(哪个维度等于NUMA节点的数量),其中node *是struct的typedef:
node** overall_trees;
第i个节点*数组必须位于第i个NUMA节点中。
我所做的是:
overall_trees[i] = mmap(NULL,(1+number_of_nodes)*sizeof(node), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
numa_move_pages(0, (int) (1+number_of_nodes)*sizeof(node) / PAGE_SIZE, &overall_trees[i], &i, &status, MPOL_MF_MOVE);
但numa_move_pages()
返回-1。
实际上这是我第一次处理NUMA分配,也许我正在尝试做的是完全错误的。如果可以使用完全不同的解决方案,请随意将其暴露出来。
谢谢