Назад | Перейти на главную страницу

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

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

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

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

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

Даже маленькие 1000-байтовые пакеты означают, что требуется сетевая карта 100 Гб.

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


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

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

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

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

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


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