Назад | Перейти на главную страницу

Замедление вычислений на сервере при интенсивном использовании ОЗУ

У меня проблема с замедлением работы сервера в очень специфическом сценарии. Факты таковы:

В сценариях 5a или 5b мой WRF начинает внезапно замедляться, а иногда даже в ~ 5 раз медленнее, чем обычно.

Дайте мне знать, если у вас есть идея попытаться избежать этих замедлений.

Одна идея пришла мне в голову после того, как я перешел по некоторым «связанным» ссылкам по этому вопросу. Могут ли прозрачные огромные страницы быть источником этой проблемы? Некоторые статьи настоятельно предполагают, что THP плохо работает в системах NUMA.

Я предлагаю включить службу numad:

yum install numad
systemctl enable numad
systemctl start numad

Numad должен иметь возможность автоматически заботиться о локализации памяти. Ситуация, когда процесс выполняется на ЦП первого узла NUMA, однако его данные находятся в ОЗУ, локальном для второго узла NUMA, больше не должно происходить (если только объем необходимой памяти не превышает емкость ОЗУ, локального для одного узла NUMA).

Я также предлагаю настроить настроенную службу с профилем, который лучше всего соответствует вашему сценарию использования. Вам нужно будет измерить различия и выбрать лучшее (или вы можете создать несколько вариантов).


Возможно, я нашел причину странного поведения на вашем узле. Я искал mpirun и нашел страницу руководства:

https://www.open-mpi.org/doc/current/man1/mpirun.1.php

Там написано:

Краткое резюме

Если вы просто ищете, как запустить приложение MPI, вы, вероятно, захотите использовать командную строку следующей формы:% mpirun [-np X] [--hostfile] Это запустит X копий в вашей текущей среде выполнения окружение (если он работает под поддерживаемым менеджером ресурсов, mpirun Open MPI обычно автоматически использует соответствующий стартер процесса менеджера ресурсов, в отличие, например, от rsh или ssh, которые требуют использования файла хоста, или по умолчанию будет запускать все X копий на локальном хосте), планирование (по умолчанию) циклически по слотам ЦП. См. Остальную часть этой страницы для получения более подробной информации.

Обратите внимание, что mpirun автоматически связывает процессы с начала серии v1.8. При отсутствии дополнительных директив используются три шаблона привязки:

Привязка к ядру: когда количество процессов <= 2

Привязать к сокету: когда количество процессов> 2

Нет привязки: при превышении лимита подписки

Если ваше приложение использует потоки, вы, вероятно, захотите убедиться, что вы либо вообще не привязаны (указав --bind-to none), либо привязаны к нескольким ядрам, используя соответствующий уровень привязки или определенное количество обрабатывающих элементов для каждого процесса приложения. .

В вашем случае с n = 22 привязка не применяется, и потоки могут быть перемещены. Вы можете попробовать привязку к внешнему процессору (например, с набором задач). Придется поэкспериментировать.