LINUX.ORG.RU
решено ФорумAdmin

с numa кто-нить работал?


0

2

Привет! Сабж. На сколько и когда оно реально нужно?

По моим теоретическим рассуждениям оно должно пригодится когда процессы рандомно дёргают куски из памяти, это создаёт задержки т.к. контроллер общий для всех ядер. Я не думаю что что-то упрётся в голую пропускную способность памяти(не в нашем случае). Это я теоретизирую, реального опыта в с NUMA нет.

Спрашиваю потому что понадобилась железка с кучей ядер(от 16 ядер), но не упрётся ли всё в память?

Заодно порекомендуйте вендора(hp, dell там, ibm). Мой экспириенс говорит что они все говно клепают, но может за последние пару лет что-то изменилось...

Личный опыт и ссылки на нормальные(не синтетические) бенчмарки приветствуются :)

★★★★★

Памяти будет 64гига, если это имеет значение.

true_admin ★★★★★
() автор топика

ЕМНИП, любой современный многопроцессорный сервер построен по NUMA архитектуре. Хоть Xeon, хоть Opteron.

У меня под ESX'ами куча dl360, dl380, лезвий bl685, на каждом 15-20 ВМ. На производительность не жалуюсь :)

HP существенно дороже за счёт отличной поддержки. ibm дешевле, но ничего плохого не скажу :) С dell дела не имел.

router ★★★★★
()

Да, сейчас любой сервер с 2 и более процессорами - NUMA система, т.к. контроллеры памяти интегрированы в проц. И естественно для эффективной работы с ними нужна ОСь, знающая про нуму и умеющая выделять память в нужных местах, чтобы избежать случаев, что процессор обращается в память соседа вместо своей локальной.

Бенчмарки ИМХО смысла не имеют, ибо нума и так везде, а ОСь про нее знающая будет всегда быстрее.

blind_oracle ★★★★★
()

Вот к примеру статистика NUMA с сервера 2 x X5650 / 48Gb:

# cat /sys/devices/system/node/node0/numastat
numa_hit 5153647681
numa_miss 604477221
numa_foreign 350325426
interleave_hit 14601
local_node 5153643071
other_node 604481831
# cat /sys/devices/system/node/node1/numastat
numa_hit 3033473209
numa_miss 350325426
numa_foreign 604496154
interleave_hit 14743
local_node 3033459355
other_node 350339280

Как видно по numa_miss / numa_foreign процы всё равно довольно часто ходят друг к другу в гости :)

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

насколько я знаю, в классической NUMA-архитектуре нету синхронизации кэша между нодами. А в x86-системах она имеет место, т.е это не настоящая NUMA. Хотя на самом деле ХЗ :)

Harald ★★★★★
()
Ответ на: комментарий от router

Эээ, я не спец в этом, но мне казалось что NUMA-режим надо принудительно включать. По-дефолту оно не работает. Т.е. если ты не включал то NUMA у тебя нет :).

true_admin ★★★★★
() автор топика
Ответ на: комментарий от blind_oracle

Что-то я немного запутался. Разве не надо указывать режим в биосе или каком-нить numactl какая конфигурация нужна? Включить нуму, отключить нуму, память распределить между процами(нодами). Получалось что-то типа хардварных доменов. И таски из разных доменов были сильно изолированы друг от друга.

Может я с чем-то путаю?

true_admin ★★★★★
() автор топика
Ответ на: комментарий от Harald

Ммм, понял. Да, ccNUMA. Это многое объясняет для меня в этом топике. Видимо я где-то видел настоящую нуму :)

true_admin ★★★★★
() автор топика
Ответ на: комментарий от router

Всё, понял. Стараниями интеля оно может работать прозрачно для приложений. Только я не понял зачем оно тогда нужно(я имею в виду режим bank interleave итп).

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

с чем-то путаю?

Не не путаю, так и есть: http://www.mjmwired.net/kernel/Documentation/vm/numa

В общем, я понял, страшного в NUMA ничего нет, возьмём железку а дальше поиграемся с параметрами и посмотрим как быстрее будет.

Всем спасибо за помощь.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Собсно в той нуме, которая на Intel/AMD серверах настраивать то особо даже нечего. В БИОСе вообще никаких опций касаемо нумы нет, по крайней мере в матерях Супермикро.

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

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

Сетевухам Intel кстати можно указать ноду, на которой она будет выделять ресурсы. Соответственно имеет смысл все прерывания этой сетевухи привязать к ядрам на этой ноде.

blind_oracle ★★★★★
()
Ответ на: комментарий от blind_oracle

Да я вот где-то видел скриншот биоса где память распределялась. Вот и повис на этом.

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

Так вроде как при NUMA программы не могут обращаться к памяти другой ноды. В этом вроде как и фишка. Но, похоже, это на x86-серверах не так и аллоцирование памяти на уровне ОС разруливается. Типа если у этой ноды есть свободная физическая память то выделяется из неё. Если нет то из соседних нод. По крайней мере я себе это так представляю.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Да, всё так. Приоритет отдается локальной памяти по понятным причинам. Если там ее тютю, то берём у соседа. Всё довольно просто и прозрачно. Наверное это какая-то не такая нума, как на суперкомпутерах, где тысячи нод, но другой я не видел :)

blind_oracle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.