Настройка NUMA на esxi

Большинство современных серверов под виртуализацию обладают как минимум двумя центральными процессорами. В связи с этим, возникает проблема с доступом к оперативной памяти. Для взаимодействия процессора с памятью используются различные технологии,

SMP:


MPP:


И интересующая нас NUMA:

В общих словах, NUMA позволяет получить процессорам быстрый доступ к “своей” оперативной памяти, то есть к определенным слотам, и более медленный доступ к чужой памяти через шину QPI:

Давайте представим что у нас сервер INTEL с двумя процессорами и 128 ГБ оперативной памяти. В качестве гипервизора на нём установлена ESXi 6.5.
Создадим виртуальную машину, и выделим ей 82 гигабайта оперативной памяти. Это больше, чем может использовать один процессор, мы увидим это если зайдём в esxtop, и выведем статистику оперативной памяти нажав M:

как видим, один узел NUMA использует 64 гигабайта оперативной памяти, в скобках свободное количество на данный момент.
Если мы просто добавим хосту 82 гигабайта, мы рискуем увидеть такую картину:

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

numa3

В этом случае система распределит нагрузку по двух процессорам, и задействует по 40 ГБ оперативной памяти от каждого из процессоров.
Статистку NUMA можно посмотреть через esxotop, нажав M,F,G:

NUMA4

В итоге мы увидим статистку, в которой нас будут интересовать поля:

NUMA5
NRMEM - удаленная память
NLMEM - локальная память
N%L - соотношение локальной памяти к удаленной
GST_NDx - количество памяти выделяемое на различных нодах
OVD_NDx - служебная память для ВМ на различных нодах

Как видим, для виртуальный машины которая использует 82 ГБ RAM соотношение 100%, то есть максимально идеальный вариант.
Остальные виртуальные машины используют меньшее количество оперативной памяти, и мы видимо что соотношение, особенно в варианте 3, не самое лучшее, ВМ использует 100% гостевой оперативной памяти. Это связано с её общим количеством, если мы мы посмотрим скриншот на котором показано состояние оперативной памяти по нодам, и количество свободной в скобкой, мы увидим что память распределена более менее ровно.