2010-05-31 2 views
1

Есть ли учебное пособие по переходу из простых сокетов udp (linux, C99/C++, recv) syscall используется) для сырых сокетов?Как перенести существующее приложение udp в сырые сокеты

Согласно http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html сырой сокет намного быстрее, чем udp.

Приложение является клиент-сервером. клиент является проприетарным и должен использовать точно такой же procotol, как и с udp-сервером. Но сервер может быть немного быстрее с сырыми сокетами. Какие части udp я должен реализовать на сервере? Существуют ли библиотеки «быстрой миграции»?

+0

Кроме того, какая часть работы udp выиграет от rawsockets - отправки или получения? – osgx

+0

Производительность скорости достигается за счет снижения уровня IP, т. Е. Маршрутизации, фильтрации, управления портами и т. Д. Хорошим направлением для просмотра будет RDMAoE, то есть RDMA через Ethernet, поговорить с Mellanox. –

+0

Steve-o, это программное обеспечение (RDMAoE) или аппаратное обеспечение? Нужно ли, чтобы обе машины находились в одной подсети (между ними только переключатели)? – osgx

ответ

1

Необработанный сокет позволяет вам связываться с протоколами нижнего уровня, такими как Ethernet, IP и т. Д. Да, снижение может дать вам некоторые преимущества, однако вам нужно сбалансировать это с тем, что вы теряете.

В этом случае вы указываете, что сервер написан для использования протокола Udp, поэтому на проводнике связь должна быть Udp. Теперь, если вы идете использовать сырой сокет, вам нужно будет обязательно отправить данные приложения, инкапсулированные в Udp-пакет. Вам также нужно будет написать код, чтобы убедиться, что вы подчиняетесь протоколу Udp и конечному автомату, чтобы на сервере ваш клиент отображался как просто еще один клиент Udp. Выполнение всего этого требует написания большого количества кода и имеет некоторые недостатки в увеличенном обслуживании, увеличении стоимости, чтобы заставить его работать правильно и т. Д.

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

На мой взгляд, вы должны сначала попытаться выяснить, почему ваш клиент так медленно. Каковы ваши требования? Есть ли у вас какие-либо показатели относительно того, что представляет собой хороший, быстрый клиент? Если бы я был вами, я бы сначала измерил текущую реализацию, имея в виду некоторые метрики, которые полезны для сценария, например, переданные Bytes/sec и т. Д. Затем я хотел бы профилировать клиента, чтобы увидеть, где он тратит слишком много времени, и попытайтесь выяснить, могу ли я уменьшить накладные расходы и сделать это намного быстрее.

Чтобы подвести итоги, найдите сбережения в верхней части стека (например, в своем приложении), прежде чем спускаться в стек. Если ваше приложение не написано хорошо, то независимо от того, насколько вы низко стоите, вы не увидите ожиданий, которые вы ожидаете.

+0

Мое приложение - это эталонный код на данный момент, он делает recvfrom/sendto в то время. , так что нет ничего, чтобы ontimize в client/server. Степень ОС udp/ip является предельной. Да, это тест для пинг-понга, а реальные приложения работают в одном стиле. Клиент и сервер могут быть переписаны как в сырых сокетах. – osgx

 Смежные вопросы

  • Нет связанных вопросов^_^