Выделение областей памяти NUMA в Windows 7 - PullRequest
2 голосов
/ 17 сентября 2010

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

  1. Аппаратная конфигурация - это двойной сервер Xeon, работающий под управлением Windows 7 / 64bit.Каждый Xeon имеет собственную 12 ГБ ОЗУ в конфигурации [NUMA] [1] с мостом, соединяющим две области памяти вместе.
  2. Все программное обеспечение написано с использованием VS2008 на c ++ и скомпилировано как 64-битные приложения.
  3. Приложение Generation создает большую область совместно используемой памяти (4–6 ГБ), доступ к которой будет осуществляться только процессам, имеющим привязку к процессору, для запуска на первом процессоре Xeon.
  4. A ПолучениеПриложение создает большую область разделяемой памяти (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 процессоров.

1 Ответ

1 голос
/ 20 сентября 2010

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

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

...