|
Быстрый стек tcp/ip для lpc2378 |
|
|
|
Jun 21 2008, 17:09
|
Местный
  
Группа: Свой
Сообщений: 238
Регистрация: 11-08-05
Пользователь №: 7 557

|
Цитата(voyt @ Jun 21 2008, 20:13)  Посмотрите в сторону lwip. У атмела есть готовые примеры для SAM9 - маленький вебсервер и т.п. На sam9 вообще без разницы, что ставить. Скорости в любом случае будут огромные, тут кто-то писал о 60-70Mbit/s. Меня интересует можно ли на LPC решить мою задачу. Прочитал много отзывов о том, что у народа на AT91SAM7X256 получаются совсем мизерные скорости <<1Mbit/s. Боюсь как бы у меня такого на LPC2378 не вышло...
Сообщение отредактировал Dars - Jun 21 2008, 17:10
|
|
|
|
|
Jun 22 2008, 18:10
|
Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 22-06-08
Из: Краснодарский край
Пользователь №: 38 488

|
Цитата(voyt @ Jun 21 2008, 20:13)  Посмотрите в сторону lwip. У атмела есть готовые примеры для SAM9 - маленький вебсервер и т.п. Ещё кроме lwip есть uIP (так называемый микро IP) http://www.sics.se/~adam/uip/
|
|
|
|
|
Jun 22 2008, 20:21
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(Dars @ Jun 21 2008, 17:45)  Нужно получить 1.5-2 Мбайта/с используя tcp на lpc2378 так чтобы осталось время на другие задачи(требуется собирать данные с двух устройств по двум ком портам используя несложный протокол и отправлять их по сети в PC, иметь небольшой веб сервер для настройки устройств и доступ по фтп к файлам с настройками). Используя операционку от micrium и их стек tcp/ip можно получить такие скорости? Или стоит взять проц мощнее?можно выбирать только из lpc2378 или аt91sam92600. Вашу задачу решить можно. У меня сейчас утсройство работает на 30 Мбит/с по UDP, при загрузке процессора 30% (частота ядра 60 МГц) (поток в одну сторону). Причем раскачивал до 70 Мбит. Сразу говорю - порты uIP в примерах IAR не берите за основу, они просто кошмарно неоптимальны! Портируйте сами или пишите конкретно под этот процессор свой стек. Просматривая uIP, в принципе если его немного переписать, то можно увеличить скорость в несколько раз на этом ARMе.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Oct 20 2008, 04:56
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 25-10-07
Из: Тольятти
Пользователь №: 31 723

|
Здравствуйте. Подскажите пожалуйста как настроить LwIP на максимальную скорость передачи по TCP. Месяц уже ковыряю, а скорость всего 180 Кбайт/с. Исходящие пакеты идут размером ~128...512 байт.
Вырезать что-то из стека не хотелось бы. 1 МБайта/с по ТСП вполне достаточно. скорей всего дело в каких-то опциях... но каких?
За основу брался порт ARM9_STR91X_IAR. Система: AT91SAM9260 + FreeRTOS v5.0.3 + LwIP v1.3 + EWARM5.10
Сообщение отредактировал elektronshik - Oct 20 2008, 05:12
|
|
|
|
|
Oct 20 2008, 05:52
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(elektronshik @ Oct 20 2008, 08:56)  Здравствуйте. Подскажите пожалуйста как настроить LwIP на максимальную скорость передачи по TCP. Читайте тут: http://lists.gnu.org/archive/html/lwip-use...1/msg00007.htmlГрубо говоря, у проблемы есть как минимум две стороны: - Оптимизация настроек TCP. Нужно сделать так, чтобы TCP посылал как можно больше данных, не дожидаясь подтверждения приёма. Какие параметры нужно править для этого в lwipopts.h - см. по ссылке выше. - Оптимизация сетевого драйвера и кода вычисления контрольной суммы, если процессор перегружен. В любом случае, очень помогает выявлять проблемы анализатор пакетов типа Wireshark.
|
|
|
|
|
Oct 20 2008, 07:09
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 25-10-07
Из: Тольятти
Пользователь №: 31 723

|
Цитата(scifi @ Oct 20 2008, 09:52)  Спасибо, сейчас посмотрю. Пользуюсь как раз Wireshark. Процессор больше ничем не нагружен, код выполняется в SDRAM на 100Mhz. Еще в догонку вопросик: При пинге пакетами более 1500 байт принимается только первый фрагмент. Может встречали такую проблему? Пока только выяснил, что от второго пакета уже не срабатывает прерывание.
Сообщение отредактировал elektronshik - Oct 20 2008, 07:09
|
|
|
|
|
Oct 20 2008, 07:36
|

Частый гость
 
Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621

|
Цитата(elektronshik @ Oct 20 2008, 07:56)  Здравствуйте. Подскажите пожалуйста как настроить LwIP на максимальную скорость передачи по TCP. Месяц уже ковыряю, а скорость всего 180 Кбайт/с. Исходящие пакеты идут размером ~128...512 байт.
Вырезать что-то из стека не хотелось бы. 1 МБайта/с по ТСП вполне достаточно. скорей всего дело в каких-то опциях... но каких? За основу брался порт ARM9_STR91X_IAR. Система: AT91SAM9260 + FreeRTOS v5.0.3 + LwIP v1.3 + EWARM5.10 1. Увеличьте значение параметра MEM_SIZE. Если памяти у вас мегабайты, можно ставить 64-256 КБайт 2. Увеличьте значение TCP_SND_BUF. В случае достаточности памяти - 64 Кбайт 3. Также имеют значения размеры буферов драйвера. У меня на SAM7X256: MEM_SIZE =24000 TCP_SND_BUF=4500 FreeRTOS v5.0.3 + LwIP v1.3 на TCP достигает скорости 6,5 МбИт/сек, это, правда, при "холостой" отправке. В задаче с реальными данными - 4 Мбит/сек, предел с реальными данными (для моей задачи) - ок. 5 МБит/сек Да, и еще важный момент: Если используете NETCONN, обязательно устанавливайте опцию TCP_NODELAY для TCP. Собственно, при использовании сокетов это тоже нужно
|
|
|
|
|
Oct 23 2008, 06:50
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 25-10-07
Из: Тольятти
Пользователь №: 31 723

|
Цитата(KolyanV @ Oct 20 2008, 11:36)  на TCP достигает скорости 6,5 МбИт/сек, это, правда, при "холостой" отправке. По моему скорость передачи реальных данных правильнее мерять бАйтами, т.к скорость передачи одного пакета на физическом уровне фиксированная (100Мбит/с в нашем случае). После прохождения данных через стек в прикладной уровень, мы получаем уже байты. Вобщем попробовал сделать по рекомендации http://lists.gnu.org/archive/html/lwip-use...1/msg00007.htmlВ результате скорость увеличилась до 650 выход /150 вход (было 180 выход /3.3 вход)... не густо. А с пингом проблема решилась - оказалось известный баг в ip_frag.c. Теперь пингуется пакетами до 23600 байт 32 мс, если больше - превышение TTL.
|
|
|
|
|
Oct 28 2008, 10:11
|
Участник

Группа: Участник
Сообщений: 58
Регистрация: 17-10-05
Из: Краснодар
Пользователь №: 9 732

|
Объясните мне пожалуйста, как вы получаете такие скорости? У меня сейчас используется uIP без ОС на LPC2468. Программа отправляет TCP пакеты с моими данными. Длина данных не бывает больше 255. Такая специфика. После отправки анализирую uip_outstanding(conn). Как написано: Check if a connection has outstanding (i.e., unacknowledged) data. И тогда отправляю следующий пакет. так вот у меня между пакетами не меньше 200 мс. Т.е. за секунду 5 пакетов всего. Скорость получается около килобайта в секунду. Хотелось бы получить хотя бы 100 килобайт в секунду.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|