Информация о NUMA в / proc / vmstat - PullRequest
2 голосов
/ 26 апреля 2020

Мне нужно получить информацию о моем приложении, связанную с NUMA (например, я не могу использовать инструмент numatop, но могу использовать numastat). Поэтому у меня есть несколько вопросов, касающихся полей, связанных с NUMA, в /proc/vmstat, и я не уверен, что правильно понимаю их значение.

Эти два явно связаны с выделением (новых) страниц.

  • numa_hit Количество страниц, которые были успешно выделены этому узлу.

  • numa_miss Количество страниц, выделенных на этом узле из-за нехватки памяти на предполагаемом узле.

Как насчет доступа к уже выделенные страницы? Меня особенно интересуют страницы, размещенные на одном узле и доступные с другого. Это те, кого я ищу?

  • numa_hint_faults
  • numa_hint_faults_local

И, наконец,

  • numa_pages_migrated Записывает, сколько страницы были перенесены из-за их неправильного размещения.

Это полезно для меня, если я использую пользовательские вызовы из libnuma, например numa_bind, для принудительного связывания процесса с узлом? Без автоматической балансировки существуют ли какие-либо страницы, перенесенные для увеличения этого счетчика?

1 Ответ

1 голос
/ 26 апреля 2020

Эти метрики используются для профилирования Automati c NUMA Balancing .

Балансировщик работает следующим образом:

  1. Когда проверяемый процесс не запланирован, сканируется часть его адресного пространства и каждая страница помечена как отсутствующая.
    Это приведет к ошибке в следующий раз, когда процесс получит доступ к адресу на этих страницах.
    Эти прерывания предназначены и называются NUMA Hinting Hault (NHF).
  2. Когда происходит NHF, ядро ​​переносит страницу в локальную память для сбоя thread .

Теперь процесс может иметь несколько потоков, и когда балансировщик забирает часть адресного пространства, он не может знать, какой поток будет обращаться к какой странице, и поэтому он не может исключить страницы, которые уже являются локальными для узла, где выполняется один из потоков.

Например, если процесс имеет два потока, A e B, в узлах N1 и N2, балансировщик не может пропустить страницу X, даже если он уже находится в локальной памяти узла N1 (или N2).
Так что иногда балансировщик оказывается в ситуации, когда страница NHF уже в памяти, ближайшей к потоку, это называется локальный NHF .

Процент локального NHF по отношению к общему NHF является оценкой того, насколько оптимальной является топология выделенной памяти.

...