|
|
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Тестил на своей виртуальной машине компоненты ICS, Indy и стандартные WinSock (Win7-64, rio.1, win64) ICS и Indy плюс минус 2480 пакетов успевают поймать, через стандартный WinSock 4700 пакетов, а отправляю я 9000 пакетов WireShark ловит все 9000. Причем при получении пакета я ничего не делаю, кроме как увеличиваю кол-во принятых пакетов. Какими средствами вы пользуетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 15:57 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
в Indy использую idUDPServer событие OnRead, в WinSock recv, в ICS взял демку с TWSocket ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 16:02 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngr, какой размер пакета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 16:40 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
s62, 1500 байт +- летят ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 16:41 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
defecator на чем-то писал видеосервис, не жаловался. :) может отметится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 16:50 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
wadman, у него вроде на IOCP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:04 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrbWireShark ловит все 9000. А на какой стороне этот WireShark? И ты бы это... код показал хотя бы для WinSock. А то окажется внезапно, что у тебя там ProcessMessages() в цикле... PS: И да, я никогда не использую UDP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:07 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Код: pascal 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:19 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Вангую переменную длину пакета, без указания/считывания этой длины в протоколе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:19 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb ICS и Indy плюс минус 2480 пакетов успевают поймать Indy наверняка доп. поток на каждый пакет заводят, а затем удаляют. А на это время требуется. Потоки создаются со скоростью примерно 10 тыс. в сек. С какой скоростью удаляются - не мерил. Там вроде можно пул потоков использовать. Не пробовали? Еще тормоза добавляет дельфёвый менеджер памяти - он не умеет паспараллеливаться по ядрам. Попробуйте потестировать на Лазарусе, тот умеет. Правда память будет ждать как паровоз. Но можно собрать из транка, там вроде проблему с пожиранием памяти устранили. Собирать нужно как 64-битное приложение, иначе упрётесь в нехватку виртуальной памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:22 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Вангую переменную длину пакета, без указания/считывания этой длины в протоколе cptngrb Код: pascal 1. 2. 3. 4. 5. 6. 7. ТС, вы не пакеты тогда считайте, а прочитанные байты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:25 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
DmSer, это все 64 бит. пул потоков использовать не пробовал. Что хоть это?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:26 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, поподробнее, пожалуйста. чем это я не пакеты считаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:26 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrbDefBufferSize Чему равно? И на вопрос о расположении WireShark ты не ответил. Вполне возможно, что пакеты теряются уже при отправке из-за заполненности буферов системы, умолчательный размер которых как раз в районе суммы того, что приняло ICS. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:27 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Вангую переменную длину пакета, без указания/считывания этой длины в протоколе я знаю, что пакеты не более 2кб, поэтому Recv(FSocket, Buffer, DefBufferSize , 0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:28 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, DefBufferSize = 2000 WireShark там же где и моя бабалайка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:29 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_вы не пакеты тогда считайте, а прочитанные байты. UDP пакеты не склеиваются и не дробятся. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:30 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb _Vasilisk_, поподробнее, пожалуйста. чем это я не пакеты считаю? Вам нужно считать число принятых байт и сравнивать с числом отправленных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:30 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb Причем при получении пакета я ничего не делаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:30 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, еще проверял прекрасной утилитой Startrinity.NetWorkTester пакеты не теряются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:30 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov UDP пакеты не склеиваются и не дробятся. И ты утверждаешь, что если в буфер сокета пришло два пакета по 1000 байт, то я не смогу их прочитать одним recv(... 2000...)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:31 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
vavan, а как в потоке без try..except? а как тогда быть "использования управляемых типов что в плотных циклах"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:32 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, у меня сеть без маршрутизатора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:33 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
с локалки на виртуалку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:33 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrbWireShark там же где и моя бабалайка Которая из двух твоих блябляек: передающая или принимающая? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:33 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
и сниферы тогда другую картину бы показывали, если бы передача ненадежна была ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:34 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, в документации сказано, что более одного пакета не примешь, хоть 65000 ставь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:35 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, только прием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:35 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb _Vasilisk_, у меня сеть без маршрутизатора cptngrb с локалки на виртуалку Третий раз вам говорю - посчитайте байты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:36 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, ща посчитаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:37 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
байты посчитаны, картина та же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:41 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb как в потоке без try..except? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:43 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
vavan, в этом конкретном случае согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:44 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_А если по дороге злостный маршрутизатор с MTU = 512? Пакет в топку? Да. И это - главная фишка UDP. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:45 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
vavan, мне не понятно про управляемые типы в цикле. как по другому в этом случае ловить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 17:56 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb, не ловить в цикле, тем более в этом конкретном примере, где ловить нечего. ну и вообще избегать использования управляемых в циклах, заодно узнав сколько и каких неявных там генерится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 18:01 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Не создавайте буфер на стэке. Создайте один раз и передавайте в функцию. Стеку не нужно расширяться и сжиматься в цикле, и компилятор должен будет in-line вашу функцию тем самым сэкономив на вызове ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:00 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
bluestreak Не создавайте буфер на стэке. Создайте один раз и передавайте в функцию. Стеку не нужно расширяться и сжиматься в цикле, и компилятор должен будет in-line вашу функцию тем самым сэкономив на вызове Cтек "расширяется" одной машинной инструкцией. Тут не может быть "бутылочного горлышка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:03 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
bluestreak, это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:07 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb bluestreak, это как? Создайте: Код: plaintext 1. 2. 3. В вызывающем методе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:44 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
bluestreakВ вызывающем методе По сравнению с обработкой исключений локальные переменные - сущая мелочь. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:49 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Квейд bluestreak Не создавайте буфер на стэке. Создайте один раз и передавайте в функцию. Стеку не нужно расширяться и сжиматься в цикле, и компилятор должен будет in-line вашу функцию тем самым сэкономив на вызове Cтек "расширяется" одной машинной инструкцией. Тут не может быть "бутылочного горлышка". Дело не в количестве инструкций а в CPU cache consistency. Да и не сложно попробовать. Непоймать 9000 сообщений в непрерывном цикле это либо компилятор нагенерил что-то не то либо recv() под крышкой что-то делает. Вообще на unix recv() это для TCP, для UDP это recvmsg(). Но я в Делфи не спец, может там своя терминология ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:50 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov bluestreakВ вызывающем методе По сравнению с обработкой исключений локальные переменные - сущая мелочь. Возможно. Хотя странно если туда код не заходит. В Java стоимость try catch будет стремиться с нулю. Делфи — не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2019, 19:54 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrb,
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 01:01 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)зачем в потоке "перевожу сокет в неблокирующий режим"? А у него ещё и это есть? "Слона-то я и не приметил." Тогда да, тут уже точно удивляться нечему. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 01:45 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), в самом первом посте при чуточке внимания вы увидите, что поток запускается с приоритетом tpHighest Dimitry Sibiryakov, если сокет в неблокирующем режиме кол-во пакетов не меняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:05 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
cptngrbесли сокет в неблокирующем режиме кол-во пакетов не меняется Убери установку буфера, неблокирующий режим и обработку исключения. Тогда можно будет говорить глубже. PS: tpHighest тоже убери, оно вполне может вредить в данном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:22 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, facepalm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:26 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
@cptngrb, выстави размер приёмного буфера >= 16МБ через SetSockOpt. Через гигабитную сеть мы прокачивали до 700 МБ/с без потерь, причём через свич. Для этого мы везде разрешали Jumbo frame (8196 байт) и выравнивали объём передаваемых данных на соответствующий размер. Данные инкапсулировали в свой протокол содержащий в т.ч. контроль на потери - счётчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:40 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, в Indy tpHighest по умолчанию стоит. Уберу, попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:44 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
@cptngrb, Ещё надёжнее реализовать приём через снифер - библиотеку WinPCap. Делал обёртку на C++. Четырьмя 10GE портами удавалось вводить 10 Gb/s. Дальше встаёт проблема всё это объединить без потерь, но это уже другая история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 13:53 |
|
||
|
Очень быстрый прием UDP пакетов
|
|||
|---|---|---|---|
|
#18+
pvv.pas, в дальнейшем так и будет скорее всего. выделение памяти нужно убирать из приема и выставлять буфер сокета побольше. на небольших скоростях ловит нормально, но при 100МБ/с уже не справляется. уже нужно что-то уровнем ниже, возможно WinPCap. спасибо всем за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2019, 14:20 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038770]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 463ms |

| 0 / 0 |
