EMZETT.
Увійти

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

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

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

Подробиці

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

Див. також: ієрархія пам’яті та рядки кешу