Перейти к содержанию
    

Тормоза по TCP

В общем по ряду причин с привычного UDP перешли на TCP (надоело изобретать собственный велосипед с контролем целостности передачи). Многоканальное измерительное устройство на LPC2387, FreeRTOS, lwIP 1.3.1. До этого с TCP в общем-то опыта применения не было вообще (самодельный встроенный Web-сервер не считаю).

 

В итоге при инициализации устройства (около десятка команд переменного размера, суммарно в устройство уходит около 5 КБайт данных) после посылки нескольких команд, в зависимости от их размера, перед очередной командой возникает задержка на несколько секунд. Итог - инициализация занимает слишком долгое время, а т.к. для некоторых технологических работ (оценка метрологических характеристик например) запускать ее приходится часто есть желание проблему победить. Сдается мне, что где-то как всегда не учел что-то элементарное.

 

Вот лог обмена снятый Вайршарком. 192.168.0.5 - ПК-клиент, 192.168.0.210 - устройство-сервер.

Глюк виден например между строками 12-13, 23-24.

      
No.     Time        Source                Destination           Protocol Info
      1 0.000000    AsustekC_07:5f:ba     Broadcast             ARP      Who has 192.168.0.210?  Tell 192.168.0.5
      2 0.000185    HitexHol_00:01:09     AsustekC_07:5f:ba     ARP      192.168.0.210 is at 00:30:6c:00:01:09
      3 0.000193    192.168.0.5           192.168.0.210         TCP      interbase > terabase [SYN] Seq=0 Win=65535 Len=0 MSS=1460
      4 0.000516    192.168.0.210         192.168.0.5           TCP      terabase > interbase [SYN, ACK] Seq=0 Ack=1 Win=1500 Len=0 MSS=1500
      5 0.000531    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=1 Ack=1 Win=65535 Len=0
      6 0.014791    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=1 Ack=1 Win=65535 Len=34
      7 0.015331    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=1 Ack=35 Win=1466 Len=36
      8 0.015780    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=35 Ack=37 Win=65499 Len=36
      9 0.025764    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=37 Ack=71 Win=1430 Len=36
     10 0.026624    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=71 Ack=73 Win=65463 Len=1062
     11 0.027612    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=73 Ack=1133 Win=368 Len=38
     12 0.170707    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=1133 Ack=111 Win=65425 Len=0
     13 4.999088    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=1133 Ack=111 Win=65425 Len=368
     14 4.999604    192.168.0.210         192.168.0.5           TCP      terabase > interbase [ACK] Seq=111 Ack=1501 Win=1500 Len=0
     15 4.999613    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=1501 Ack=111 Win=65425 Len=694
     16 5.000444    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=111 Ack=2195 Win=806 Len=38
     17 5.001312    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=2195 Ack=149 Win=65387 Len=806
     18 5.001996    192.168.0.210         192.168.0.5           TCP      terabase > interbase [ACK] Seq=149 Ack=3001 Win=1500 Len=0
     19 5.002007    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=3001 Ack=149 Win=65387 Len=256
     20 5.002690    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=149 Ack=3257 Win=1244 Len=38
     21 5.003502    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=3257 Ack=187 Win=65349 Len=1062
     22 5.004492    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=187 Ack=4319 Win=182 Len=38
     23 5.203194    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=4319 Ack=225 Win=65311 Len=0
     24 9.934619    192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=4319 Ack=225 Win=65311 Len=182
     25 9.935082    192.168.0.210         192.168.0.5           TCP      terabase > interbase [ACK] Seq=225 Ack=4501 Win=1500 Len=0
     26 9.935090    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=4501 Ack=225 Win=65311 Len=508
     27 9.935826    192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=225 Ack=5009 Win=992 Len=38
     28 9.936495    192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=5009 Ack=263 Win=65273 Len=36
     29 9.983857    192.168.0.210         192.168.0.5           TCP      terabase > interbase [ACK] Seq=263 Ack=5045 Win=956 Len=0
     30 11.662789   192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=263 Ack=5045 Win=956 Len=36
     31 11.663321   192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=5045 Ack=299 Win=65237 Len=36
     32 11.663917   192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=299 Ack=5081 Win=920 Len=36
     33 11.695274   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     34 11.720256   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     35 11.745261   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     36 11.770172   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     37 11.795267   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     38 11.820253   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     39 11.837932   192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=5081 Ack=335 Win=65201 Len=0
     40 11.845236   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     41 11.870154   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     42 11.895245   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     43 11.920236   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     44 11.945242   192.168.0.210         192.168.0.5           UDP      Source port: pxc-spvr-ft  Destination port: pxc-splr-ft
     45 11.946038   192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=5081 Ack=335 Win=65201 Len=36
     46 11.958027   192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=335 Ack=5117 Win=884 Len=36
     47 11.958545   192.168.0.5           192.168.0.210         TCP      interbase > terabase [PSH, ACK] Seq=5117 Ack=371 Win=65165 Len=32
     48 11.959111   192.168.0.210         192.168.0.5           TCP      terabase > interbase [PSH, ACK] Seq=371 Ack=5149 Win=852 Len=36
     49 11.959280   192.168.0.210         192.168.0.5           TCP      terabase > interbase [FIN, ACK] Seq=407 Ack=5149 Win=852 Len=0
     50 11.959289   192.168.0.5           192.168.0.210         TCP      interbase > terabase [ACK] Seq=5149 Ack=408 Win=65129 Len=0
     51 14.187546   192.168.0.5           192.168.0.210         TCP      interbase > terabase [FIN, ACK] Seq=5149 Ack=408 Win=65129 Len=0
     52 14.187838   192.168.0.210         192.168.0.5           TCP      terabase > interbase [ACK] Seq=408 Ack=5150 Win=851 Len=0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прашу пардона, а MSS размером в 1500 байт от устройства не жмет?

 

Размер окна со стороны устройства тоже подозрительный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прашу пардона, а MSS размером в 1500 байт от устройства не жмет?

 

Размер окна со стороны устройства тоже подозрительный.

 

Памяти мало... Все что можно отдано под буферы результатов измерений, которые гоняю по UDP. TCP - чисто командный интерфейс, особой скорости от него не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Памяти мало...

 

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

 

Да и с софтом на компе надо смотреть внимательно, ибо тормоз на 5 секунд у Вас именно со стороны компа (5->210).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем весь глюк действительно был в размере окна... Что в принципе очевидно. Увеличил с 1500 до 3000 - сразу получил выигрыш. В общем теперь стоит 65000 и ничего не тормозит. Но все равно надо бы поизучать вопрос... Эх, плохо я знаю стек TCP/IP.

 

По уменьшению размера окна: алгоритм приема команд допускает прием их пачкой одним пакетом (или притормаживание устройства на такое время, что придет более одной команды сверху). Соответственно из-за некоторой кривости алгоритма приема-сборки-обработки команд (зато очень просто и экономно получилось + ничего копировать не надо) ответ на команду высылается до удаления самой команды из входного буфера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...