Создать именованную общую память на определенном узле NUMA?

Как и в этом посте, я хотел бы создать именованный сегмент общей памяти (созданный с помощью shm_open() + mmap() в CentOS 7) на конкретном узле NUMA (не обязательно локальном). Пост предложил, чтобы это было достигнуто с помощью numa_move_pages(),

У меня есть еще несколько вопросов:

  1. если позже запускается другой процесс (работающий на ядре, локальном для другого NUMA), и mmap()Будет ли ОС перемещать именованный сегмент совместно используемой памяти в NUMA, локальный для этого процесса? Если да, как я могу предотвратить это?

  2. Есть ли какая-либо другая ситуация, когда именованный сегмент совместно используемой памяти будет перемещен в другую NUMA после того, как я укажу через numa_move_pages()?

  3. Учитывая именованный сегмент общей памяти в /shm/devКак я могу проверить, к какому узлу NUMA он принадлежит?

Я смотрел в numactl, И его --membind опция закрыта для того, что я хочу, но я не уверен, что эффект, если два разных процесса используют --membind до 2 разных узлов. Кто выигрывает? Я думаю, что я могу проверить это, если № 3 получен ответ.

Спасибо!

1 ответ

Я хочу только ответить на пункт 1 и 3.

Точка 1:

Насколько я помню от своих учителей и что эта ссылка говорит: страница на машине NUMA может быть перемещена ближе всего к наиболее вызывающему ЦП. Другими словами: если ваша страница размещена в банке 0, но центральный процессор, который напрямую связан с банком 1, использует его гораздо чаще, то ваша страница перемещается в банк 1.

Пункт 3:

Учитывая именованную общую память, я не знаю, как вы получаете вызывающий узел numa, но учитывая указатель, который находится в этой общей памяти, вы можете получить его политику памяти, вызвав: get_mempolicy()

если flags указывает MPOL_F_ADDR, то возвращается информация о политике, управляющей адресом памяти, указанной в addr. Эта политика может отличаться от политики процесса по умолчанию, если mbind(2) или одна из вспомогательных функций, описанных в numa(3), использовались для установки политики для диапазона памяти, содержащего addr.

со страницы руководства get_mempolicy() Вот

Другие вопросы по тегам