В официальном документе поставщика говорится: 5Mpps нет проблем. Я уже бью стену на 120kpps. Где узкое место?

17

В официальном документе HP об их адаптерах QLogic (fka Broadcom) NetXtreme II , который включает в себя конкретный сетевой адаптер , который я тестирую, говорится (стр. 7), что производительность их небольших пакетов для пакетов до 256 байт / пакет превышает 5 000 000 пакетов / с.

В моих тестах с приложением, в котором я отключил всю обработку, кроме простой части приема UDP, я могу обрабатывать только до 120000 пакетов / сек. Пакеты равномерно распределены по 12 группам многоадресной рассылки.

Я заметил, что есть одно ядро (из 12 ядер на каждом из двух разъемов), нагрузка которого постепенно увеличивается, когда я увеличиваю скорость передачи UDP, и достигает максимума около 120 000 . Но я не знаю, что делает это ядро ​​и почему. В моем приложении это не является узкополосным узким местом, поскольку не имеет значения, запускаю ли я один экземпляр приложения для всех групп многоадресной рассылки или 12 экземпляров, каждый из которых обрабатывает одну группу многоадресной рассылки. Таким образом, узкое место не мое приложение приемника.

MSI включен (проверяется с помощью представления «ресурсы по типу» в диспетчере устройств ), а RSS также включен в настройках сетевого адаптера с 8 очередями. Так что же цепляется за это ядро? Все функции разгрузки NIC в настоящее время включены, но отключение их не помогло.

Так где же может быть узкое место?

Детали системы:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 х 12 ядер)
  • Сетевая карта HP FlexFabric 10Gb, 2 порта, 536FLB
  • Windows 2012 R2
Евгений Бересовский
источник
2
Вероятно, все прерывания rx и tx обрабатываются одним и тем же ядром. Я не очень разбираюсь в окнах, но для настройки равномерно релевантных IRQ должно быть настроено сходство SMP.
Ксавье Лукас

Ответы:

13

RSS тоже включен в настройках NIC, с 8 очередями.

К сожалению, это не означало, что RSS использовался, так как

netsh int tcp show global

показал:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled

После запуска (кстати без перезагрузки)

netsh int tcp set global rss=enabled

RSS начал работать, и нагрузка, которая раньше наваливалась на это плохое ядро, теперь равномерно распределяется по многим ядрам на одном из 2 узлов NUMA.

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

Евгений Бересовский
источник