Получи случайную криптовалюту за регистрацию!

Сервер - это не 'большой макбук'. Часть 1. Топология памяти 1/ | BeerPanda. Органично недоразвитый DevOps

Сервер - это не "большой макбук". Часть 1. Топология памяти 1/2

Очень часто вижу подход к серверам и вычислительной инфраструктуре на кухонном уровне даже от вроде бы профессиональных людей с высочайшими ЗП в полмиллиона и выше.
Сервер - это просто большой макбук, а СХД просто большой диск.

Итак, давайте разбираться. И начнем со страшной темы - топология памяти.

Объяснять буду реально на желудях и шишках, поэтому сразу просьба к крутым суперпрофи - не надо пытаться меня уличить, это не для вас написано.

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

1. Задержка. UMA / NUMA

UMA - Uniform Memory Access, архитектура с равномерным доступом к памяти. В многопроцессорной (многоядерной) системе расстояние (задержка) от любого процессора (ядра) до любого блока памяти постоянна и одинакова.

NUMA - NonUniform Memory Access, архитектура с НЕравномерным доступом к памяти. В многопроцессорной (многоядерной) системе расстояние (задержка) от процессора (ядра) блока памяти различна.

В чем разница для программиста / архитектора-проектировщика? В случае с NUMA системой нужно продумывать особенности развертывания системы (модулей) и конфигурации, чтобы работать на полной скорости, избегая (минимизируя) дальние обращения. Если вы не понимаете как с этим работать, то легко получите до минус 30% производительности.

Напомню любителям AMD, что недавние поколения серверных AMD имели NUMA архитектуру даже внутри сокета. Т.е. по сути это был хак - два кристалла упаковали в один корпус.

2. Топология процессоров (при >2)

В случае с 2 процессорами все понятно, есть CPU1 <-> CPU2. А вот уже при 4 процессорах становится интереснее. Есть варианты с полносвязной системой и с промежуточными узлами.
Полносвязная система - когда есть прямой канал от каждого процессора к каждому, и соответственно задержка при обращении к чужой памяти одинаковая.
Система с промежуточными узлами имеет меньшее количество линков. Т.е. всего по два линка на каждый процессор.
- CPU1 <-> CPU2 <-> CPU4
- CPU1 <-> CPU3 <-> CPU4
И в этом случае CPU3 при обращении к памяти CPU2 получает двойную задержку, что еще сильнее роняет производительность.