LINUX.ORG.RU

Как правильно программировать под NUMA используя DPDK?

 , , ,


1

7

Всем привет,

Возник такой вопрос. Предположим, что есть 2 NUMA ноды NUMA#0 и NUMA#1, соответственно есть 2 сокета с CPU#0 (NUMA#0) и CPU#1 (NUMA#1). На каждом CPU присутствует несколько ядер, пусть для примера их количество будет равно 4 на первом процессоре и 6 на втором (CPU#0{0-3} и CPU#1{0-5}).

К CPU#0 подключяется 2 сетевых контроллера NIC#0 и NIC#1 с поддержкой RSS и количеством очередей от 1 до 16. Для обработки данных в режиме FastPath (обход сетевого стека ядра Linux) используется DPDK. Суть обработки данных сводится к двум задачам: форвардинг и реконструкция TCP-сессий с буферизацией.

Внимание вопрос: как правильно использовать мощности 2-х нод для обработки сетевого трафика? Удастся ли использовать CPU#2 со второй ноды для эффективной обработки пакетов, ведь у ядер этого CPU должны быть проблемы с тем, что приём и отправка пакетов осуществляются адаптером, физически расположенном на другой ноде.

Кто курил DPDK, какую модель использвать для обработки данных - pipeline, run-to-completion, io/worker?

Как быть, делитесь опытом/соображениями?

★★

Переходи уже к 5ой стадии:)

ПринятиеНаписание тестов и замеры.

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

Было ещё некое юзерспейсное api для работы с numa на низком уровне, я сам с ним не работал, краем глаза видел что оно есть, чего с ним делать можно не знаю. Но раз его использовали там где я видел - либо народу было просто по фану, но скорее всего - был профит.

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

Вот только и остаётся принять :-)

А если по делу - нет времени особо проверять и эксперименты ставить. Есть общие соображения по поводу того, что доступ к памяти другой ноды дороже, чем доступ к собственной. С этим всё понятно и более того, DPDK даёт возможность учитывать номер сокета при создании пулов и пр.

Однако, я не могу понять как в таком случае можно эффективно использовать вторую ноду, если сетевухи будут работать только с первой.

Про API, что ты говоришь, это наверное huge-страницы и что-то типа libnuma?

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

libnuma - точно. Насчёт huge pages - х3, надо бы посмотреть, возможно на самом деле и мне оно пригодится.

Если нужно лейтенси соизмеримое с миграцией страницы... Имхо, очень маловероятно, что такое делается в юзерспейсе если кто приведёт контрпример будет интересно посмотреть. Тогда и вывод напрашивается сам собой. Во втором случае всё зависит от задачи. Лично я - очень смутно представляю какие требования к продуктам твоего класса продуктов и какие телодвижения надо предпринимать в единицу времени для реализации.

нет времени особо проверять и эксперименты ставить.

Ты всё равно будешь сдавать решение, раз есть вопросы про производительность имеют место быть нефункциональные требования, соответсвенно - тебе всё равно нужны будут бенчмарки. Либо, тебе на самом деле пофик и ты решил попробовать прост просветиться...

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