Запуск приложения на двух узлах с Windows Server с NUMA

У меня был интересный разговор с клиентом. У нас есть приложение, которое планирует другие приложения, и обычно у нас нет никаких проблем с серверами с конфигурацией NUMA С где угодно от 2 до 4 узлов.

при вызове мы запустили два очень ресурсоемких приложения, и оба были выделены узлу 0, так что по всей машине было только 50% использования. После того, как мы изменили второй экземпляр приложения на другой узел, мы использовали все ядра (половина на одно приложение, половина с другой.) Казалось невозможным выделить приложение для всех ядер.

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

довольно ясно, что нам придется развивать сродство узлов NUMA, но пока я пытаюсь понять проблему. Что может привести к одному стилю машины NUMA, чтобы позволить приложениям использовать оба узла прозрачно, и что вызывает это поведение сейчас?

Я вижу, что эта архитектура отлично работает для многих небольших приложений, но мы обычно запускаем монолитные со многими потоками.

сервер я борюсь с НР ProLiant DL388Gen9 с двумя Xeon от Intel Е5-2690V3 процессоров.

мысли о том, что вызывает это?

28
задан RandomInsano
22.02.2023 18:10 Количество просмотров материала 2967
Распечатать страницу

2 ответа

процесс может быть назначен только одному узлу NUMA. Это очень короткий ответ. Нельзя принудительно запустить один экземпляр на нескольких узлах NUMA. И это имеет смысл, учитывая назначение NUMA, а также вторичную цель разрешения >64 ядер ЦП в ОС, использующей 64-разрядные битовые маски сходства ЦП.

1
отвечен dyasta 2023-02-24 01:58

Я не эксперт по этому вопросу, но я перезвоню с моим мнением.

довольно ясно, что нам придется развивать сродство узлов NUMA, но пока я пытаюсь понять проблему. Что может привести к тому, что один стиль машины NUMA позволит приложениям прозрачно использовать оба узла, и что вызывает такое поведение сейчас?

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

современные машины, такие как Skylake-Server, могут иметь "кластеризацию SubNuma", где разные части одного и того же чипа регистрируются как разные узлы NUMA. Однако, разница между узлами в пределах одного чипа составляет ~10 наносекунд. В то время как другой сокет может иметь ~200 наносекунд.

Ex: два Xeon Gold (20 ядер на процессор) с кластеризацией под NUMA on будет выглядеть как 4X NUMA узлы для Windows. 2-NUMA узлов на чипе, представляющие собой "левые" 10 ядер и" правые " 10 ядер на каждой половине чипа. 3х контроллеров памяти на левом, 3х контроллеров памяти на правом. Но все 20 ядер могут взаимодействовать с контроллером памяти за ~80 наносекунд или около того. Они могут просто поговорить с" более близким " контроллером памяти за 70 наносекунд. Почти незаметная разница, поэтому Windows, вероятно, предпочитает плавающие потоки через эти два NUMA узлы.

мое предположение состоит в том, что при настройках по умолчанию вашей установки Windows решила, что одно "расстояние узла" было достаточно коротким, чтобы плавать потоки, в то время как другая настройка расстояния памяти была достаточно длинной, чтобы настройки по умолчанию Windows предпочитали держать потоки в узле NUMA.


Это не моя теория. Моя 2-я теория заключается в том, что что-то странное происходит с "группами процессоров". Группы процессоров имеют грязную совместимость взлом Win32 API, потому что маски сходства процессора были ограничены 64-бит по соображениям производительности. Таким образом 64-логических ядер является максимальное значение по умолчанию Windows.

вы можете получить доступ к более чем 64-логических ядер через API группы процессоров. https://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs. 85).aspx

вкратце: если ваши процессы на отдельных "группах процессора" ,то вы программист для изменения программы поддержать Группы Процессоров.

Я не сделал много испытаний с этим лично. Но, надеюсь, это полезная информация для вас.

1
отвечен Dragontamer5788 2023-02-24 04:15

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх