Максимальное увеличение сетевой производительности Linux на сетевом адаптере с несколькими очередями

Согласно https://lwn.net/Articles/629155/ ядро ​​Linux, «может пересылать только что-то от 1M до 2M пакетов на ядро ​​ каждую секунду» - но насколько хорош Linux? масштабирование между десятками ядер?

Скажем, у меня есть сетевая карта с несколькими очередями (128 пар rx + tx) 100 Гбит / с на многоядерном ЦП - сможет ли Linux насыщать сетевую карту 100 Гбит / с, т.е. масштабировать «от 1 до 2 млн пакетов на ядро ​​каждую секунду» по несколько десятков ядер без особой регрессии для достижения общей пропускной способности порядка 10..20 млн пакетов / сек?

Я также где-то читал, что у Linux есть g трудно масштабировать производительность сети выше 4 ядер - верно ли это и для последних версий ядра?

2
задан 5 June 2020 в 11:21
1 ответ

Осознайте, что скорость 10 млн пакетов в секунду на хосте повышает масштабируемость и требует настройки для обеспечения хорошей производительности. Руководство по настройке производительности сети RHEL подробно описывает некоторые из них, от разгрузки сетевой карты до эффектов NUMA.

Даже для небольших 1000-байтовых пакетов требуется сетевая карта на 100 Гбит/с.

10 млн пакетов в секунду — это примерно 90 нс на пакет. Немного, всего пара сотен тактов процессора.


Чтобы просто сбросить 10 млн пакетов в секунду, Cloudflare экспериментировала с полным обходом сетевого фильтра и использовала XDP. Это немного экзотично, если ваша стандартная модель безопасности хоста предполагает сетевой фильтр с conntrack.Также немного обманывает пропускная способность: сетевые карты 10 Гб предполагают отказ в обслуживании через крошечные пакеты.

ESnet достигла скорости одиночных потоков 78 Гбит/с с помощью всеми любимых тестов iperf и nuttcp. Примечательно, что они использовали пакеты по 9000 байт, так что это «всего» 1 миллион PPS. Тем не менее, требовалась некоторая настройка, аналогичная той, которую вы делаете для высокопроизводительных баз данных:

  • Используйте правильный слот PCI-E, по крайней мере версии 3 x16.
  • Настройте ЦП на производительность, а не на энергосбережение.
  • ЦП привязывается к тому же узлу NUMA, что и сетевая карта. Скорость межсокетного соединения имеет значение
  • Максимальные буферы Linux TCP.
  • Обновление драйвера и прошивки сетевой карты.

Не так уж плохо, учитывая, что на старых ядрах требовалась дополнительная настройка.

Ни Cloudflare, ни ESnet не проводят значительных вычислений в рамках этих эталонных тестов потока пакетов. Выполнение полезной работы было бы еще одной переменной в масштабируемости. Возможно масштабирование: haproxy для дюжины серверных хостов, каждый из которых делает более легким достижение 1 Mpps. Может быть, это все еще упирается в некоторые из ограничений масштабируемости пересылки, упомянутых LWN, трудно сказать.


Что касается последнего ядра, эта статья LWN была написана 5 лет назад и не будет обновляться. Получите более новые ядра на последних сетевых адаптерах, чтобы настроить свои собственные тесты. Особенно, если вы хотите написать собственную статью «Как сбросить 20 Mpps».

2
ответ дан 6 June 2020 в 14:10

Теги

Похожие вопросы