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

 
 
> Вопрос по LwIP, Скорость отправки
Petr_
сообщение Mar 15 2016, 18:12
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Передаю большой файл.
Использую цепочку колбеков, как и задумано в lwIP.
Но заполняю буфер передачи не полностью(узнаю из tcp_sndbuf(pcb); ).
Далее вызываю tcp_write(pcb, Data_Bf, wMaxPut, 0); и завершаю функцию.
Скорость никакущая.
Смотрю что идет по сетке - FTP клиент не посылает ACK добрых 0,3 сек.
Крепко думаю - доходит, что размер окна равен 2, а пакет уходит 1.
Рою сеть.
Нахожу вариант:
Код:
Код
    pcb->flags |= TF_NODELAY;                                   //отключаем  Nagle
    tcp_write(pcb, Data_Bf, wMaxPut >> 2, 1);                   //первый пакет
    tcp_output(pcb);                                            //передать что влезло
    //второй пакет
    tcp_write(pcb, &Data_Bf[wMaxPut >> 2], wMaxPut-(wMaxPut >> 2), 1);
    tcp_output(pcb);                                            //передать что влезло (опционально)

ACK сразу вываливаются на каждую пару пакетов и скорость вырастает в сотни раз. Здорово...
Только решение кривое.
Можно конечно набивать буфер под завязку
(как криво и не полностью сделано в WEB сервере ST).
Но это крайне неудобно.
Бить данные всегда на 2 куска - тоже левизна.

Кто то знает нормальное решение?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AleksBak
сообщение Mar 17 2016, 07:13
Сообщение #2


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

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Вот, вчера это пропустил - еще там есть по этой теме: Maximizing throughput. Для обоих видов протокола TCP и UDP приводят рекомендации.

Цитата(Petr_ @ Mar 17 2016, 10:56) *
...
У меня сейчас версия 1.3.1
...

А в этой версии есть эти функции: tcp_nagle_enable/tcp_nagle_disable ? Если взять сгенерированное от Куба, то там 1.4.1 (и функции эти есть и еще кое-какие дефайны по этой теме), но правда полученный код уже будет привязан к HAL от Куба. Хотя при желании его (этот HAL) не трудно переписать/убрать на свой.
Go to the top of the page
 
+Quote Post
Petr_
сообщение Mar 17 2016, 11:04
Сообщение #3





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Цитата(AleksBak @ Mar 17 2016, 07:13) *
Вот, вчера это пропустил - еще там есть по этой теме: Maximizing throughput. Для обоих видов протокола TCP и UDP приводят рекомендации.


А в этой версии есть эти функции: tcp_nagle_enable/tcp_nagle_disable ? Если взять сгенерированное от Куба, то там 1.4.1 (и функции эти есть и еще кое-какие дефайны по этой теме), но правда полученный код уже будет привязан к HAL от Куба. Хотя при желании его (этот HAL) не трудно переписать/убрать на свой.


Спасибо за ссылку!!!
Там оказался прямой ответ/совет:
"Try to prevent sending small chunks of data waiting for an ACK: delayed ACK on the remote host might destroy performance (often, only every 2nd packet is ACKed)"
Также совет чуть выше:
"If you write small chunks turn off the nagle algorithm (see wikipedia for more info!) to let the stack send data right away instead of waiting for more data to form bigger packets (see tcp_nagle_disable())."

Иными словами найденный мной вариант и есть лучшее решение - нейгл отключается и шлется 2 "неполных" пакета немедленно. И именно пара пакетов подтверждается ACK.

В WEB сервере от ST эта проблема замаскирована и не вылезает:D
Там если файл больше пары пакетов (т.е. целого буфера) - буфер заполняется полностью и LwIP шлет 2 пакета добровольно.
А если остаток файла маленький - он шлется и соединение тут же закрывается. Что естественным образом снимает вопрос ожидания ACK на одиночный пакет.

Кстати у меня исходники не от Куба!
Оригинальный пример от ST и заменен HAL путем замены 2-х файлов.
Переделку делал один мой приятель из Штатов.

Версии LwIP пока пробовать не буду, пока не допилю проект.
И опыта поднаберусь и железо получше выучу.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Mar 17 2016, 11:33
Сообщение #4


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

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Petr_ @ Mar 17 2016, 15:04) *
Спасибо за ссылку!!!
...

Очень рад этому. Реально. beer.gif Но еще вопрос у меня если можно - см. ниже. (Вообще взаимное обсуждение на форуме завсегда полезно я как твердо понял всем - столько мелких моментов всплывает.).
Цитата(Petr_ @ Mar 17 2016, 15:04) *
...
В WEB сервере от ST эта проблема замаскирована и не вылезает:D
Там если файл больше пары пакетов (т.е. целого буфера) - буфер заполняется полностью и LwIP шлет 2 пакета добровольно.
А если остаток файла маленький - он шлется и соединение тут же закрывается. Что естественным образом снимает вопрос ожидания ACK на одиночный пакет.
...

Вы какие исходники WEB сервера от ST смотрели? Даже скажем так - я как понял у ST лучше смотреть там где самое "современное" и иными словами там где самая последняя на данный момент линейка процессоров - M7. Т.е. например от платы DISCOVERY-746 (или EVAL-756). Между прочим там используется ОС т.е. судя по-всему Вы их не смотрели. А вообще Вы хотя и начали со "сложного" пути - без Куба (на самом деле это как обычно и по "старинке"), но все-таки более правильный путь это иногда т.к. вот сейчас например я думаю как бы избавиться полностью от этой cmsis_os.h например (это обертки над "чистыми" функциями FreeRTOS и хоть есть в них некоторые полезности, но лишние они) и еще некоторые вещи. А все потому что стал кушать огромный бесплатный сыр от Куба, объелся/подавился им и самое плохое, что приобрел "наркозависимость" от него (не избавиться от него вот так вот просто). sm.gif
Go to the top of the page
 
+Quote Post
Petr_
сообщение Mar 17 2016, 11:55
Сообщение #5





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Цитата(AleksBak @ Mar 17 2016, 11:33) *
Вы какие исходники WEB сервера от ST смотрели? Даже скажем так - я как понял у ST лучше смотреть там где самое "современное" и иными словами там где самая последняя на данный момент линейка процессоров - M7. Т.е. например от платы DISCOVERY-746 (или EVAL-756). Между прочим там используется ОС т.е. судя по-всему Вы их не смотрели. А вообще Вы хотя и начали со "сложного" пути - без Куба (на самом деле это как обычно и по "старинке"), но все-таки более правильный путь это иногда т.к. вот сейчас например я думаю как бы избавиться полностью от этой cmsis_os.h например (это обертки над "чистыми" функциями FreeRTOS и хоть есть в них некоторые полезности, но лишние они) и еще некоторые вещи. А все потому что стал кушать огромный бесплатный сыр от Куба, объелся/подавился им и самое плохое, что приобрел "наркозависимость" от него (не избавиться от него вот так вот просто). sm.gif


Я взял исходники от их отладочной платы STM3210C-EVAL
Вот отсюда:
http://www2.st.com/content/st_com/en/produ...3210c-eval.html
Далее заменил 2 файла (HAL для Ethernet микросхемы)
поскольку плата у меня Olimex!!
Там все по другому подключено и нет такого красивого ЖКИ :D
WEB сервер и стек сразу заработали.
Никакой "оси" там нет, чему я очень рад. Поскольку не считаю полезным.
Софт от 2009 года и LwIP там 1.3.1


Далее я выпилил поддержку ЖКИ и привел в порядок использование ног.
Ну и теперь пилю сетевую часть проекта.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Petr_   Вопрос по LwIP   Mar 15 2016, 18:12
- - romas2010   Цитата(Petr_ @ Mar 15 2016, 21:12) Переда...   Mar 15 2016, 19:50
|- - Petr_   Цитата(romas2010 @ Mar 15 2016, 19:50) Ну...   Mar 15 2016, 20:11
|- - aaarrr   Цитата(Petr_ @ Mar 15 2016, 23:11) для пе...   Mar 15 2016, 20:32
|- - Petr_   Цитата(aaarrr @ Mar 15 2016, 20:32) В ваш...   Mar 15 2016, 20:54
|- - aaarrr   Цитата(Petr_ @ Mar 15 2016, 23:54) Я посм...   Mar 15 2016, 21:09
|- - Petr_   Цитата(aaarrr @ Mar 15 2016, 21:09) Где и...   Mar 16 2016, 07:57
|- - alag57   Цитата(Petr_ @ Mar 16 2016, 12:57) Обновл...   Mar 16 2016, 14:14
||- - Petr_   Цитата(alag57 @ Mar 16 2016, 14:14) git c...   Mar 17 2016, 06:56
|- - AleksBak   Цитата(Petr_ @ Mar 16 2016, 11:57) ... Та...   Mar 16 2016, 18:01
|- - scifi   Цитата(AleksBak @ Mar 16 2016, 21:01) Пох...   Mar 16 2016, 18:12
|- - Petr_   Решил свои проблемы с LwIP и делюсь результатом(мо...   Mar 22 2016, 06:59
- - AleksBak   Спасибо большое, что отписались! Я вот тоже не...   Mar 22 2016, 15:55
- - Petr_   Цитата(AleksBak @ Mar 22 2016, 15:55) Спа...   Mar 22 2016, 18:13


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:04
Рейтинг@Mail.ru


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