В C перенести память на узел NUMA
Я занимаюсь разработкой приложения NUMA, и мне нужно перенести большие массивы с узла (узла, где они фактически созданы) на другой узел.
Я не могу использовать numa_alloc_onnode()
функция, потому что мне нужно иметь общую память между процессом, который выделяет память и его дочерний элемент.
Ситуация следующая:
У меня есть этот массив (размер которого равен количеству узлов NUMA) массива (* BIG) узла *, где узел * - это определение типа структуры:
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, и, возможно, то, что я пытаюсь сделать, совершенно неправильно. Если возможно совершенно другое решение, не стесняйтесь выставлять его.
Спасибо