Получить расположение памяти в NUMA
В настоящее время я работаю над системой NUMA с 2 узлами. У меня есть указатель, указывающий на некоторую память, но я не знаю, в каком узле он находится. Можно ли как-нибудь получить номер узла памяти?
(Причина, по которой получение маски узла текущего потока не работает, заключается в том, что память узла заполнена, поэтому, даже если поток связан с текущим узлом, он все равно может выделить память на соседнем узле. Следовательно, Я ищу прямой способ получить место в памяти.)
2 ответа
Это выполнимо в Linux с помощью numa_move_pages
, Это просто сахар для перемещения страниц. Если вы не передаете ему какие-либо узлы, он возвращает идентификатор узла NUMA указателя в состоянии. Помните, что указатель должен указывать на страницу, которая находится в физической памяти (то есть уже имеет страницу с ошибкой), в противном случае вы получите ENOENT.
Вы можете проверить NUMA API: http://linux.die.net/man/3/numa. Из поверхностного взгляда, numa_alloc_onnode()
а также numa_get_run_node_mask()
выделиться как полезный.
Может быть некоторая комбинация функций в API может помочь вам решить причину, по которой вы хотите узнать номер узла.