Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Наткнулся на странную проблему: виндовс7 медленно шлет UDP локалке. В гигабитной сети не могу 100 мбит перешагнуть, при том что теже 100 мбит получаю по внутрисети провайдера (запускаю прием дома в линуксе). Физически: гигабитный роутер, к нему подключены все компы и инет. TCP дает гигабит (wget c локального HTTP сервера). Алгоритм передачи следующий: отправитель шлет непрерывный набор пакетов (окно), получатель подтверждает прием первого пакета окна, отправитель получив подтверждение шлет следущее окно. Окно от 32 пакетов. По локалке подтверждение приходит после отправки первого пакета, по внутри-инету после 5-10. Т.е. в обоих случаях поток получается непрерывный. При этом проц не загружен даже на 10%. Увеличение окна (с 32 до 128) в локалке вообще никакого эффекта не дает, та же скорость. Оно понятно, т.к. подтверждение приходит после первого. Подозреваю что надо еше какие-то флаги сокета поставить. Знать бы какие. Такое впечатление что есть какая-то синхронность при отправке (иначе как получаю ответ после первого пакета неуспев второй отправить), может она как-то отключается? Сейчас так происходит Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. PS Завтра попробую на одном из компов линукс поднять, чтобы окончательно убедится что проблема именно в винде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:38 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima T, Предположение: TCP применяет congestion control и устанавливает оптимальную скорость отсылки, соответствующую физическому каналу. А ваш протокол основанный на UDP не умеет этого, и вы отправляете пакеты слишком часто и они забивают канал (и возможно буфер отправки). В итоге большинство пакетов теряются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:44 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima TПри этом проц не загружен даже на 10%.Это от 10% ядра или от всего проца? Сколько ядер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:46 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Если слать через localhost, т.е. на одном компе отправитель и приемник, то получаю 800-900 мбит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:48 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
miksoftDima TПри этом проц не загружен даже на 10%.Это от 10% ядра или от всего проца? Сколько ядер? Ядра. всего 4. Проц i7 3.7 ГГц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:49 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА ваш протокол основанный на UDP не умеет этого, и вы отправляете пакеты слишком часто и они забивают канал (и возможно буфер отправки). В итоге большинство пакетов теряются. Ни одного не теряется. Контроль потерь есть, логи и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 20:51 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima T, размер пакета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2015, 21:34 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Изопропилразмер пакета? Максимальный. Содержимое UDP 1472 байта, в т.ч. полезные данные 1456 байт. Тестовые 10240000 байт это 7033 пакетов. Поправил отправку: окно теперь уходит в цикле. До этого была проверка входящих после каждого отправленного пакета. Отключил лишние логи. Получил ускорение на localhost, передача полезной инфы 131 мбайт/с (~1,3 гигабита), а по сетке стабильно 8-8,2 мбайт/с, до линукса 10 через инет (внутрисеть провайдера) :( Пошел ставить линукс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 08:32 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
miksoftDima TПри этом проц не загружен даже на 10%.Это от 10% ядра или от всего проца? Сколько ядер? Гы, а почему проц вообще должен быть загружен? Ну да, что-то он там управляет, но нагрузка-то основаная тупо на сеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 12:15 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Затестил линуксом. Результат: если вместо вин7 на компе запускаем линукс, то скорость отправки с 8,2 понимается до 50-55 мбайт/с. Может и до 100 поднялось бы на тесте линукс-линукс, но у меня возможен только тест линукс-виндовс. Главное что это доказывает что железо ни при чем. Дальше интереснее. По ходу тестов обнаружил интересную багофичу вин7. sendto() может подвиснуть из-за конретного значения IP. тест Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. результат на 2-х компах с Win7send 1472 byte to 192.168.0.1:57691 OK pause 0 msec send 1472 byte to 169.254.160.21:57691 OK pause 2793 msec оба IP не из моей подсети. Есть третий комп, там W7 не совсем исходная, правили что-то в реестре связанное с сетью, чтобы проблем не было из XP к ней цепляться. На этом компе тест прошел по нулям и скорость UDP повыше 12-13 мбайт/с, я с него тестил отправку через инет, поэтому было 10, а не 8,2. Не знаю связано это явление или нет с проблемой медленной скорости, но порешать как-то надо, менять настройки ОС не вариант, в идеале настройкой сокета полечить, в крайнем случае сверять локальные IP со своими на общую подсеть, прежде чем слать туда чего-либо. Вобщем подтверждается что в винде надо настройками играться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:13 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima T, 169.254.* - это link local address. Они могут по-другому рутерами обрабатываться (даже точнее - должны). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:21 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
А еще конкретнее - они не должны маршрутизироваться между подсетями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:22 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyDima T, 169.254.* - это link local address. Они могут по-другому рутерами обрабатываться (даже точнее - должны). это никак не объясняет подвисание sendto() почти на 3 секунды !!! Это ж UDP, сунул в буфер и трудись дальше, а винда пусть разбирается слать роутерам или сразу выкинуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:40 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima T, В доке есть такое примечание: When issuing a blocking Winsock call such as sendto, Winsock may need to wait for a network event before the call can complete. Winsock performs an alertable wait in this situation, which can be interrupted by an asynchronous procedure call (APC) scheduled on the same thread.Возможно, наведет на какие-то мысли. Правда, что это за network event - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:51 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima Tподвисание sendto() почти на 3 секунды !!!Случаем, это не ожидание arp-ответа? Что если этот адрес внести как фиксированную запись в arp-таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 13:52 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
miksoftDima Tподвисание sendto() почти на 3 секунды !!!Случаем, это не ожидание arp-ответа? Что если этот адрес внести как фиксированную запись в arp-таблицу? Проблема в том что я не знаю что вносить, а что нет. Работает так: отправитель и получатель, каждый открывает случайный UDP порт (в примере видно addr_in.sin_port = htons(0);) и каждый через сервер посылает все свои интерфейсы (IP:порт) второму и начинают на них слать тестовые пакеты, пришел правильный ответ - связь есть, шлем инфу. Данный адрес был от интерфейса для связи с виртуалкой на втором компе, понятно что первый комп не достучится по нему, но такой нездоровый глюк с подвисанием я не ожидал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 14:55 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
miksoftDima T, В доке есть такое примечание: When issuing a blocking Winsock call such as sendto, Winsock may need to wait for a network event before the call can complete. Winsock performs an alertable wait in this situation, which can be interrupted by an asynchronous procedure call (APC) scheduled on the same thread.Возможно, наведет на какие-то мысли. Правда, что это за network event - не знаю. Буду читать вечером, может нарою чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 15:02 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Ты по-прежнему веришь в сказочку, что UDP производительнее TCP. Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 15:10 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли слать через localhost, т.е. на одном компе отправитель и приемник, то получаю 800-900 мбит. Глубина и полезность этого эксперимента поражают своим размахом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:17 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТы по-прежнему веришь в сказочку, что UDP производительнее TCP. Ню-ню... Слабенький наброс )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:17 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТы по-прежнему веришь в сказочку, что UDP производительнее TCP. Ню-ню... Мои тесты показывают что не медленнее, хотя можно оценивать результаты по разному. На коротких дистанциях одинаково. Выжал ведь все 100 мбит из 100 мбитной внутренней сетке провайдера. ТСР не дает мне возможности соединить двух клиентов, которые в одном городе, в одном провайдере или вообще в локалке. Каждый сидит за брэндмауэром виндовса и НАТом роутера. Может в виндовсе еще дадут порт открыть, а в роутере точно никто мапить порты не будет. Остается поднять свой сервер где-нибудь и гонять через него. А где поднять? На хостинге, на виртуалке. Только хостинги ближайшие нормальные в Москве, для клиентов это 2000-4000 км по проводам, по среднему 6000 км (клиентА-сервер-клиентБ), это 20 мс со скоростью света только в один конец. Это в идеале, реально еще больше, т.к. задержки на оборудовании, т.е. 30-40 мс. Реально они максимум в сотне км друг от друга. Думаю дальше сам посчитаешь что быстрее: по TCP 6000 км или по UDP 100 км? И сообщения у меня небольшие (10-100 кб), за 20 мс даже с потерями долетят несколько раз. С TCP все-равно придется связаться, т.к. через GSM-свистки потери гигантсткие, наверно чтобы скайп не пользовали и торрентами каналы не забивали. В целом пока все идет нормально, осталось с засадой от виндовса разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:26 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima Tчерез GSM-свистки потери гигантсткиеПопробуйте номера портов поварьировать. По идее, например, с 53 портом такого не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:29 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
miksoftDima Tчерез GSM-свистки потери гигантсткиеПопробуйте номера портов поварьировать. По идее, например, с 53 портом такого не должно быть. Уже написал что второй абонент за роутером, там НАТ точно не даст 53 порт, выдаст какой-нибудь на свое усмотрение. Это направление вообще тупиковое, у меня нет доступа к оборудованию соединяющихся, и желания нет админить там что-то, т.к. платить за это никто не будет. Таких немного, для них проще сделать TCP до сервера, а дальше UDP. Большинство по UDP без потерь шлют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:45 |
|
||
|
Как выжать весь гигабит по UDP?
|
|||
|---|---|---|---|
|
#18+
Dima Tтам НАТ точно не даст 53 портDNS-же как-то работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2015, 17:50 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=18&tid=2017824]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
99ms |
get tp. blocked users: |
2ms |
| others: | 16ms |
| total: | 192ms |

| 0 / 0 |
