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