Получить местоположение памяти в NUMA

#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. Спасибо вам за ваш ответ. Я думал об этом, но, похоже, это не работает, так как мой текущий узел может быть заполнен, а память может быть выделена на другом узле. Поэтому я ищу прямой способ получить ячейку памяти…