реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Передача по UDP., Почему так медленно?
b-volkov
сообщение Jan 26 2014, 08:51
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Сразу оговариваюсь: только начинаю разбираться с IP, и посему извиняюсь за возможные некорректные формулировки и вопросы.
Изначально стоит задача обмена по UDP между железкой и PC но для "отработки технологии" я попробовал организовать связь между двумя РС. Программировал в Builder XE5 (если это играет какую-то роль) + Winsock. Схема максимально примитивная: на сервере зациклен receivefrom() а клиент выполнят 10 раз подряд sendto() пакета размером 1400 байт.

Прикрепленное изображение


На картинке снифера видно, что на все это уходит целых 7мс, т.е. получаем всего 2 мегабайта/с sad.gif. Не маловато для сети 100 Мбит? Предположил, что лишнее время уходит на вызов sendto() и какие-то действия внутри нее и решил передавать данные более крупными кусками - не вышло, передается только один пакет максимального размера. Все-таки UDP должен уметь нарезать передаваемые данные на несколько ethernet-пакетов или за этим только к TCP?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 26 2014, 20:27
Сообщение #2


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(b-volkov @ Jan 26 2014, 12:51) *
...Все-таки UDP должен уметь нарезать передаваемые данные на несколько ethernet-пакетов или за этим только к TCP?


UDP распологается над IP. IP может имееть фрагментацию. на приёмной стороне стэк должен уметь так называемо ре-ассемблировать = собирать
по идентификатору IP пакета полный пакет. По приходу конца - проверять наличие собранных кусков и отдавать уровню выше. Либо хранить
некоторое время, перед тем как выкинуть. IP пакеты могут приходить в произвольном порядке.

По умолчанию размер пакета 1500 + изернет фрэйм + CRC его. IP пакет может нести необязательные поля после своего хедера в первом фрагменте.
Для ускорения передачи, можно подкорректировать временные задержки. я сейчас на вскидку не помню названия, но на уровне сокетов есть такие
настройки.

попробуйте сравнить скорость со стандартным пингом. пошлите те-же 14000 раз 100 и посмотрите картину по скорости. у меня с ноута задержки
при стандартном пинге составляют порядка <=10 мкс между уходами пакетов.
АРМ на порядок где то побольше = около 120 мкс. по памяти: всего пинг 7770 писюк-арм около <=2мс в среднем.

Go to the top of the page
 
+Quote Post
b-volkov
сообщение Jan 31 2014, 07:17
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



С фрагментацией разобрался,пакет передавался полностью, просто у меня фильтр снифера был настроен так, что не показывал остальные фрагменты.

Цитата(kolobok0 @ Jan 27 2014, 00:27) *
Для ускорения передачи, можно подкорректировать временные задержки. я сейчас на вскидку не помню названия, но на уровне сокетов есть такие
настройки.

Увы, ничего похожего в сокете не нашел sad.gif

Цитата(kolobok0 @ Jan 27 2014, 00:27) *
попробуйте сравнить скорость со стандартным пингом. пошлите те-же 14000 раз 100 и посмотрите картину по скорости. у меня с ноута задержки
при стандартном пинге составляют порядка <=10 мкс между уходами пакетов.
АРМ на порядок где то побольше = около 120 мкс. по памяти: всего пинг 7770 писюк-арм около <=2мс в среднем.

Под "стандартным пингом" подразумевается команда "ping" командной строки? Так она отсылает пакеты примерно раз в секунду. Или имелось ввиду, что пинг реализовывать в своей пррограмме?
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jan 31 2014, 20:05
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(b-volkov @ Jan 31 2014, 11:17) *
... она отсылает пакеты примерно раз в секунду...


Вы каким нить ваиришаком или изереалом смотрите на времена запроса-ответа. с лева второй столбец - так и называется Time sm.gif то что раз в секунду - это понятно...
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Feb 2 2014, 14:03
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Цитата(kolobok0 @ Feb 1 2014, 00:05) *
Вы каким нить ваиришаком или изереалом смотрите на времена запроса-ответа. с лева второй столбец - так и называется Time sm.gif то что раз в секунду - это понятно...

Возможно, я Вас не совсем понял, но меня не интересует время между запросом и ответом, я вообще пока не жду никакого ответа.
У меня беда в том, что КОМПЬЮТЕР МЕДЛЕННО отправляет UDP пакеты.


To All:

Так может мне все-таки кто-нибудь ответить, 700 мкс на передачу пакета функцией sendto()( при его, пакета, длительности порядка 15мкс) является нормальным временем?
Если это нормально и есть особенность Winsock, я пойду каким-то другим путем. Если такого быть не должно, то я начну разбираться с причинами.
Заранее спасибо.

Go to the top of the page
 
+Quote Post
krux
сообщение Feb 2 2014, 14:26
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



если у вас сделан просто цикл, то win его искуственно прерывает (для выполнения других задач)
принудительный context switch производится со скоростью примерно 35 раз в секунду, даже если PC больше делать нечего.

про "700 мкс" вам никто ничего вразумительного не скажет поскольку много неизвестных. начиная от скорости процессора и заканчивая версией драйвера вашей сетевой карты, тем более что PC это не real-time система.

код с event-ами (waitformultipleobjects или подобные аналоги) вместо тупого цикла однозначно будет выполняться оперативнее, но насколько точно вам сможет сказать только профилировщик.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Feb 2 2014, 18:49
Сообщение #7


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(b-volkov @ Feb 2 2014, 18:03) *
Возможно, я Вас не совсем понял......


Вы и не пытались.

Для тех кто в танке и ленится сойти, но продолжает орать от боли...sm.gif

Код
    BOOL val = TRUE;
    setsockopt(soc, IPPROTO_TCP, TCP_NODELAY, (const char*)&val, sizeof(val));


Правда это для TCP слоя. Для юдп - задержек не должно быть априори. что послал - то и убежало...

да прибудут с вами знания...

Сообщение отредактировал kolobok0 - Feb 3 2014, 11:44
Go to the top of the page
 
+Quote Post
b-volkov
сообщение Feb 4 2014, 13:51
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Цитата(krux @ Feb 2 2014, 18:26) *
если у вас сделан просто цикл, то win его искуственно прерывает (для выполнения других задач)
принудительный context switch производится со скоростью примерно 35 раз в секунду, даже если PC больше делать нечего.

про "700 мкс" вам никто ничего вразумительного не скажет поскольку много неизвестных. начиная от скорости процессора и заканчивая версией драйвера вашей сетевой карты, тем более что PC это не real-time система.

PC то она мож и ралтайм... вот Винь...
Но моя проблема не имеет отношения к "задумчивости" винды, поскольку задержки равномерно распределяются между всеми посылками, а быстродействия процессора хватает с запасом на несколко порядков.

Как выяснилось, проблема имеет место на моем рабочем компе и еще одном очень похожем по конфигурации (на обоих Винь 7), но отсутствует на на трех ноутах (два ХР и 8-ка). На ноутах задержки на порядок меньше. Буду копать дальше, железо или ось.

Go to the top of the page
 
+Quote Post
Alexnm
сообщение Feb 18 2014, 01:57
Сообщение #9





Группа: Новичок
Сообщений: 2
Регистрация: 10-12-05
Пользователь №: 12 041



Уважаемый, b-volkov. Вы затронули весьма актуальную (по крайней мере для меня) тему!!! Дело в том, что я напоролся на те же "грабли". Та же "Вынь 7", прога с winsock, udpclient. Нужно управлять девайсом с большой скоростью, а UDP жутко тормозит.

Если Вы найдёте причину, не могли бы Вы поделиться тут решением этой проблемы?

Заранее благодарен.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01473 секунд с 7
ELECTRONIX ©2004-2016