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

Можно ли обрабатывать миллионы датаграмм в секунду с помощью Windows, используя API, не зависящий от поставщика?

Я изучаю, могу ли я реализовать приложение HPC в Windows, которое принимает небольшие дейтаграммы многоадресной рассылки UDP (в основном 100-400 байт) с высокой скоростью, используя дюжину или до 200 групп многоадресной рассылки (то есть с помощью MSI-X и RSS я могу масштабироваться до нескольких ядер), выполняет некоторую обработку каждого пакета, а затем отправляет его. Отправка через TCP Мне удалось подняться настолько далеко, насколько мне нужно (6,4 Гбит / с), не задевая стену, но получение дейтаграмм с высокой скоростью пакетов в секунду оказалось проблемой.

В недавний тест на высокопроизводительной машине NUMA с 2-портовой сетевой картой 10 Гбит / с в Windows 2012 R2 я смог только получать сотни тысяч дейтаграмм UDP в секунду (раннее отбрасывание, то есть без фактической обработки данных, чтобы удалить накладные расходы на обработку моего приложения из уравнения, чтобы увидеть, насколько быстро оно работает) с использованием ядер 2x12, и часть ядра из 12 протестированных групп многоадресной рассылки, казалось, была распределена по 8 или 10 ядер одного узла NUMA (Максимальное количество очередей RSS было установлено значение 16), хотя и с приложением .net, поэтому собственные приложения должны работать быстрее.

Но даже Лен Холгейт удалось получить только UDP-пакеты со скоростью 500kpps в его высокопроизводительные тесты Windows RIO, используя полезную нагрузку UDP размером 1024 байта.

В Технический документ QLogic (Тестируемая ОС не упоминается) пределы для «многопоточной маршрутизации сверхмалых пакетов» (чтобы она включала как прием, так и последующую отправку?) Установлены на 5,7 млн ​​пакетов в секунду. В статьи на Сеть Linux, лимиты установлены на От 1 до 2 млн пакетов в секунду на ядро ​​(как сообщается, масштабирование более или менее линейно), или даже 15 млн пакетов в секунду со специальными решениями, обходящими ядро.

Например. netmap

может генерировать трафик со скоростью линии (14,88 млн пакетов в секунду) по каналу 10GigE только с одним ядром, работающим на частоте 900 МГц. Это составляет примерно 60-65 тактовых циклов на пакет и хорошо масштабируется в зависимости от ядер и тактовой частоты (с 4 ядрами скорость линии достигается на уровне менее 450 МГц). Аналогичные ставки достигаются на принимающей стороне.

Итак, как далеко я могу зайти в Windows 2012 R2 с хорошими стандартными сетевыми адаптерами Ethernet, использующими стандартный Ethernet (а не, например, Конвергентный Ethernet), используя API-интерфейсы, не зависящие от поставщика?

Можно обойти ядро ​​и использовать netdirect с установленным hpc. видеть https://msdn.microsoft.com/en-us/library/cc904344(v=vs.85).aspx Я не могу найти какие-либо данные perf (я подозреваю, что это будет зависеть от поставщика, поскольку он использует оборудование NIC более напрямую, чем другие API), но он должен быть на одном уровне с другими решениями обхода ядра в Linux (обход ядра - это обход ядра) РЕДАКТИРОВАТЬ: Итак, если вы откажетесь от фактического использования предоставленного оборудования, не ожидайте производительности, которую вы можете получить от стандартной сетевой карты с использованием необходимых драйверов. Конвергентный Ethernet не требуется (я не уверен, как это произошло), но именно так продавцы предоставляют аппаратные функции драйверам ОС, я не уверен, почему вы даже ссылаетесь на документ qlogic (который конкретно относится к используя их оборудование Nic - то, что вы говорите, что не хотите делать) то же самое с бумагой netmap (использует модифицированные драйверы).