Именованная разделяемая память для Linux с поддержкой NUMA

Windows API предлагает функцию CreateFileMappingNuma ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx) для создания именованного пространства общей памяти в конкретной NUMA узел.

Пока что я не нашел эквивалентной функции для Linux.

Мой текущий подход выглядит так:

  1. Выделить именованную разделяемую память (используя shm_open(...))
  2. Определить текущий узел NUMA (используя numa_move_pages(...))
  3. Переместить страницы на целевой узел (снова используя numa_move_pages(...))

Кто-нибудь знает лучший подход?

РЕДАКТИРОВАТЬ: Для записи: моя предлагаемая реализация работает как ожидалось!

1 ответ

Это звучит правильно. Обратите внимание, что в той точке, где вы вызываете shm_open()/fruncate(), нет страниц, выделенных (не забудьте ftruncate (), чтобы установить размер!). Ядро просто создает vma и ожидает будущих обращений к коду, чтобы сбить страницы в физической памяти. Поэтому вызов numa_move_pages() в этом состоянии, вероятно, будет иметь эффект создания и заполнения новых страниц в соответствующих узлах NUMA.

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