HP технический документ об их адаптерах QLogic (fka Broadcom) NetXtreme II, который включает конкретную сетевую карту, которую я тестирую, утверждает (стр. 7), что производительность их малых пакетов для пакетов размером до 256 байт / пакет превышает 5 000 000 пакетов / сек.
В моих тестах с приложением, в котором я отключил всю обработку, за исключением простой части приема UDP, я смог достичь только 120000 пакетов / сек. Пакеты равномерно распределяются по 12 группам многоадресной рассылки.
Я заметил что есть одно ядро (из 12 ядер на 2 сокета), нагрузка которых постепенно увеличивается, когда я увеличиваю скорость отправки UDP и достигает примерно 120 000. Но я не знаю, что делает это ядро и почему. В моем приложении это не узкое место с одним потоком, потому что не имеет значения, запускаю ли я один экземпляр приложения для всех групп многоадресной рассылки или 12 экземпляров, каждый из которых обрабатывает 1 группу многоадресной рассылки. Таким образом, проблема не в моем приложении-приемнике.
MSI включен (проверяется через представление "ресурсы по типу" в диспетчере устройств) и RSS тоже включен в настройках NIC, с 8 очередями. Так что же цепляется за это ядро? Все функции разгрузки сетевых карт в настоящее время включены, но их отключение не помогло.
Так где же может быть узкое место?
Детали системы:
RSS тоже включен в настройках сетевого адаптера с 8 очередями.
К сожалению, это не означало, что RSS используется, поскольку
netsh int tcp show global
показал:
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled
После запуска (кстати без перезагрузки)
netsh int tcp set global rss=enabled
RSS начал работать, и нагрузка, которая раньше была на этом бедном ядре, теперь равномерно распределяется по многим ядрам на одном из двух узлов NUMA.
Я не проверял, позволит ли это мне справиться с объявленной нагрузкой Mpps, но потолок был поднят в достаточной степени, чтобы сравнить то, что мне нужно.