Процесс может быть назначен только одному узлу NUMA. Это короткий ответ. Вы не можете заставить один экземпляр работать более чем на одном узле NUMA. И это имеет смысл, учитывая цель NUMA, а также вторичную цель - разрешить> 64 ядра ЦП в ОС, которая использует 64-битные битовые маски привязки ЦП.
Запуск приложения на двух узлах с Windows Server с NUMA
У меня был интересный звонок с клиентом сегодня. У нас есть приложение, которое планирует другие приложения, и обычно у нас нет никаких проблем с серверами с конфигурацией NUMA с количеством узлов от 2 до 4.
Во время разговора мы запустили два приложения, сильно загружающих ЦП, и оба были распределены по узлу 0, поэтому на всей машине было только 50% использования. Как только мы изменили второй экземпляр приложения на другой узел, мы использовали все ядра (половина в одном приложении, половина в другом). Казалось невозможным выделить приложение для всех ядер.
Теперь единственное различие между этой машиной и той, которую я привык использовать, состоит в том, что диспетчер задач Windows перечислял узлы в выпадающем списке вместо длинного списка отдельных ядер, поэтому Microsoft знает, что это за ограничение, но это сложная проблема для исследования в Интернете.
Ясно, что нам нужно развивать сходство узлов NUMA, но сейчас я пытаюсь понять проблему. Что может привести к тому, что один стиль машины NUMA позволит приложениям прозрачно использовать оба узла, и что сейчас вызывает такое поведение?
Я вижу, что эта архитектура отлично работает для многих небольших приложений, но мы обычно запускаем монолитные со многими потоками.
Сервер, с которым я борюсь, - это HP Proliant DL388Gen9 с двумя процессорами Intel Xeon E5-2690V3.
Мысли о том, что вызывает это?
2 ответа на вопрос
Я не эксперт в этом вопросе, но я согласен с моим мнением.
Ясно, что нам нужно развивать сходство узлов NUMA, но сейчас я пытаюсь понять проблему. Что может привести к тому, что один стиль машины NUMA позволит приложениям прозрачно использовать оба узла, и что сейчас вызывает такое поведение?
Я знаю, что Windows вычисляет «расстояние до узла», оценивая количество времени, которое требуется различным узлам NUMA для взаимодействия друг с другом. Я не знаю, основаны ли его задержки или пропускная способность (или, возможно, оба), но это важно знать.
Современные машины, такие как Skylake-Server, могут иметь «кластеризацию SubNuma», где разные части одного и того же чипа сообщаются как разные узлы NUMA. Однако разница между узлами в одном чипе составляет ~ 10 наносекунд. В то время как другой сокет может иметь ~ 200 наносекунд.
Пример: два Xeon Gold (20 ядер на процессор) с кластеризацией не-NUMA будут выглядеть как 4-кратные узлы NUMA для Windows. 2 узла NUMA на чип, представляющие «левые» 10 ядер и «правые» 10 ядер на каждой половине чипа. 3 контроллера памяти слева, 3 контроллера памяти справа. Но все 20-ядерные могут общаться с контроллером памяти в ~ 80 наносекунд или около того. Они могут просто общаться с «более близким» контроллером памяти за 70 наносекунд. Разница почти незаметная, поэтому Windows, вероятно, предпочитает перемещать потоки между этими двумя узлами NUMA.
Я предполагаю, что в соответствии с настройками по умолчанию вашей установки Windows решила, что одно «расстояние до узла» было достаточно коротким, чтобы перемещать потоки, в то время как при другой настройке расстояния памяти были достаточно большими, чтобы настройки Windows по умолчанию предпочитали сохранять потоки в узле NUMA.
Это не единственная моя теория. Моя вторая теория - что-то странное происходит с «Процессорными группами». Группы процессоров - это грязный хак совместимости Win32 API, потому что маски Affinity CPU были ограничены 64-битными из соображений производительности. Следовательно, 64-логическое ядро является максимальным значением по умолчанию для Windows.
Вы можете получить доступ к более чем 64 логическим ядрам через API группы процессоров. https://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx
Вкратце: если ваши процессы находятся в отдельных «группах процессоров», вы будете программистом, чтобы изменить программу для поддержки групп процессоров.
Я лично не проводил много испытаний с этим материалом. Но, надеюсь, это полезная информация для вас.
Похожие вопросы
-
9
Как открыть диспетчер задач Windows во время сеанса удаленного рабочего стола?
-
4
Меню диспетчера задач, заголовок и вкладки исчезли
-
2
Монитор ресурсов для OS X
-
-
3
Диспетчер задач показывает 100% загрузку процессора, но ничего в списке процессов не делает
-
8
Эквивалент 'End Process' в Linux
-
5
Как узнать, когда обновлять оперативную память в Vista?
-
2
Что делает процесс svchost.exe?
-
4
Разница между "a = b" и "export a = b" в bash
-
5
Как мне определить модель моего процессора?
-
2
конечная задача против конечного процесса