Распределение областей памяти NUMA в Windows 7

Наше приложение:

  1. Конфигурация оборудования представляет собой двойной сервер Xeon под управлением Windows 7/64bit. Каждый Xeon имеет собственную 12-гигабайтную оперативную память в конфигурации [NUMA][1] с мостом, соединяющим две области памяти вместе.
  2. Все программное обеспечение написано с использованием VS2008 на С++ и скомпилировано как 64-битные приложения.
  3. Приложение Generation создает большую область общей памяти (4–6 ГБ), к которой будут обращаться только процессы, настроенные с привязкой к процессору для запуска на первом процессоре Xeon.
  4. Приложение-получатель создает большую область общей памяти (2-4 ГБ), которая в основном используется процессами, установленными с привязкой к процессору для запуска на втором процессоре Xeon. Однако, когда приложение Generation завершает создание одного набора данных (от 32 МБ до 128 МБ), оно передает эту информацию в область общей памяти, работающую на этом Xeon.
  5. Мы используем библиотеку Boost Interprocess для управления нашими разделяемыми областями памяти.

Мой вопрос: когда каждый из процессов, создающих свою область общей памяти, выделяет ли Windows эту память на том же чипе Xeon, который ее создал? Или я должен явно назначить память конкретному чипу Xeon, используя одну из функций памяти Numa?


РЕДАКТИРОВАТЬ - чтобы прояснить, что такое NUMA, из Википедии -

Неоднородный доступ к памяти или архитектура неоднородной памяти (NUMA) — это конструкция компьютерной памяти, используемая в многопроцессорных системах, где время доступа к памяти зависит от расположения памяти относительно процессора. В NUMA процессор может обращаться к своей собственной локальной памяти быстрее, чем к нелокальной памяти, то есть к памяти, локальной для другого процессора, или к памяти, совместно используемой процессорами между процессорами.

Ссылка: http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access для подробнее. На мой взгляд, это одна из тех вещей, о которых нам всем придется узнать больше, поскольку многопроцессорность становится все более распространенной.

[1]: http://msdn.microsoft.com/en-us/library/aa363804%28VS.85%29.aspxbetween.


person photo_tom    schedule 17.09.2010    source источник
comment
Я не разбираюсь в этой теме, но я не понимаю, как предоставление ОС дополнительной информации о вашем шаблоне использования памяти может навредить чему-либо.   -  person Billy ONeal    schedule 17.09.2010
comment
Я тоже ничего не знаю об этом, так что +1 от меня. Один вопрос: что вы подразумеваете под размещением этой памяти на том же чипе Xeon, который ее создал?   -  person John Dibling    schedule 17.09.2010


Ответы (1)


Windows будет выделять локальную память запрашивающему потоку; однако локальный не указан корпорацией Майкрософт. Local может быть одним из трех вариантов: идеальный процессор потока, маска привязки процессора потока или текущий процессор потока (я забыл, какова текущая реализация).

По сути, да; однако общая ошибка заключается в выделении всей памяти из «потока контроллера», который не связан, и, таким образом, память находится рядом с контроллером, а не потоками с определенным сходством.

person Brian    schedule 20.09.2010
comment
Исследуя ответ на другой вопрос, я нашел презентацию на WinHEC, в которой говорилось, что Windows теперь использует IdealProcessor. download.microsoft. com/download/a/f/d/ - person Brian; 28.09.2010