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