EMZETT.
Войти

NUMA (неравномерный доступ к памяти)

Коротко: При NUMA («Non-Uniform Memory Access») у каждого процессора есть своя близкая память, а обращения к памяти другого процессора занимают больше времени.

Подробнее: Серверы с несколькими процессорными сокетами или многими чиплетами делят ОЗУ на области («узлы»). Доступ к собственному узлу быстрый, к чужому — медленнее и с меньшей пропускной способностью.

Подробности

  • Отличие от UMA: Там все обращения к памяти одинаково быстры, типично для настольных ПК с одним процессором.
  • Следствие для ПО: Поток, работающий на узле 0, но читающий данные на узле 1, замедляется.
  • Операционная система: Linux по умолчанию размещает память вблизи запрашивающего ядра («first touch») и старается удерживать процессы на их узле.
  • Инструменты: numactl --hardware показывает узлы, numactl --cpunodebind=0 --membind=0 программа привязывает целенаправленно.
  • Базы данных и ИИ: Плохо распределённая нагрузка на многосокетных серверах может стоить пропускной способности. Помогают закрепление (pinning) и политики памяти.
  • И у настольных CPU: Некоторые модели Ryzen Threadripper ведут себя похоже.

См. также: иерархия памяти и строки кэша