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

Я изучаю, могу ли я реализовать приложение 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-пакеты со скоростью 500 тыс. Пакетов в секунду в его высокопроизводительных тестах Windows RIO , используя полезную нагрузку UDP размером 1024 байта.

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

Например. netmap

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

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

6
задан 13 April 2017 в 15:14
1 ответ

Можно е да се заобиколи јадрото и да се користи netdirect со инсталиран hpc. видете во https://msdn.microsoft.com/en-us/library/cc904344 (v = vs.85) .aspx Не можам да лоцирам никакви перфектни податоци (се сомневам дека ќе се разликуваат по продавач бидејќи ги NIC хардвер подиректно од другите API), но треба да биде на исто ниво со другите решенија за бајпас на кернели во Linux (бајпасот на кернелот е бајпас на кернелот) УРЕДУВАЊЕ: Значи, ако сакате да одбиете да го користите хардверот, не очекувајте ги перформансите што можете да ги добиете од стандарден NIC користејќи ги потребните драјвери. Не е потребен конвергиран етернет (не сум сигурен како се појави тоа), но така продавачите ги изложуваат хардверските карактеристики на драјверите за ОС, не сум сигурен зошто дури и се повикувате на хартијата qlogic (што е конкретно користејќи го нивниот убав хардвер - нешто што велите дека не сакате да го направите) исто со нетмап хартијата (користи модифицирани драјвери).

2
ответ дан 3 December 2019 в 00:40

Теги

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