한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L10 Память

Удалённая память NUMA Remote NUMA access

ID причины mem-numa · Основной ответственный Команда инфраструктуры · Серверная инфраструктура

Открыть карточку в основной версии с иллюстрациями и экспериментами →

На сервере с двумя процессорами обращение к памяти, подключённой к другому процессору, идёт медленнее.

Почему Потоки и их память оказываются на разных процессорных сокетах → Следствие Обращения к памяти замедляются (в 1,5–2 раза в зависимости от оборудования) → На экране На одинаковом железе процессы работают с разной скоростью

Симптомы
Слоумо
Факторы
Остановка
У кого
Весь сервер
Когда
Всегда
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура
Команда инфраструктуры: задачи
Привязать процесс и его память к одному сокету (numactl), а на двухсокетном сервере распределить процессы игрового сервера по сокетам.
На графике
Высоко только у некоторых · время тика по процессам, память по узлам NUMA
Где смотреть
Смотреть через numastat -p PID, на каком узле NUMA лежит память процесса игрового сервера, растут ли numa_miss и other_node в numastat, и сравнивать с узлом CPU, на котором работает процесс
Подтверждает
Только у медленных процессов большая часть памяти лежит на другом узле, чем их CPU, а после перезапуска с привязкой CPU и памяти к одному узлу через numactl разница исчезает
Опровергает
Если размещение по узлам такое же, как у быстрых процессов, а процесс всё равно медленный, причина другая: шумный сосед, троттлинг CPU, нагрузка на сам процесс
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)

Источники

  1. What is NUMA? Linux kernel
    Память своей ячейки быстрее и имеет большую пропускную способность, обращение к памяти другой (удалённой) ячейки медленнее
  2. numactl(8) — Linux manual page numactl
    --cpunodebind и --membind привязывают CPU и память процесса к определённому узлу NUMA
  3. numastat(8) — Linux manual page numactl
    Счётчики numa_miss (память выделена не на том узле, где её запрашивали) и other_node (на этом узле выделил память процесс, работающий на другом узле), с -p показывает память процесса по узлам

Смотрите также

Тот же слой: L10 Память

Причины с тем же симптомом (Слоумо) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами