Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Быстрый стек tcp/ip для lpc2378
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Dars
Нужно получить 1.5-2 Мбайта/с используя tcp на lpc2378 так чтобы осталось время на другие задачи(требуется собирать данные с двух устройств по двум ком портам используя несложный протокол и отправлять их по сети в PC, иметь небольшой веб сервер для настройки устройств и доступ по фтп к файлам с настройками). Используя операционку от micrium и их стек tcp/ip можно получить такие скорости? Или стоит взять проц мощнее?можно выбирать только из lpc2378 или аt91sam92600.
voyt
Посмотрите в сторону lwip. У атмела есть готовые примеры для SAM9 - маленький вебсервер и т.п.
Dars
Цитата(voyt @ Jun 21 2008, 20:13) *
Посмотрите в сторону lwip. У атмела есть готовые примеры для SAM9 - маленький вебсервер и т.п.


На sam9 вообще без разницы, что ставить. Скорости в любом случае будут огромные, тут кто-то писал о 60-70Mbit/s. Меня интересует можно ли на LPC решить мою задачу. Прочитал много отзывов о том, что у народа на AT91SAM7X256 получаются совсем мизерные скорости <<1Mbit/s. Боюсь как бы у меня такого на LPC2378 не вышло...
aaarrr
Цитата(Dars @ Jun 21 2008, 21:09) *
Прочитал много отзывов о том, что у народа на AT91SAM7X256 получаются совсем мизерные скорости <<1Mbit/s. Боюсь как бы у меня такого на LPC2378 не вышло...

Видимо у народа руки не оттуда растут. Слабо верится, что можно написать настолько плохой стек.
zltigo
Цитата(Dars @ Jun 21 2008, 19:09) *
На sam9 вообще без разницы, что ставить. Скорости в любом случае будут огромные..

Улыбнуло.
mobidev
Цитата(voyt @ Jun 21 2008, 20:13) *
Посмотрите в сторону lwip. У атмела есть готовые примеры для SAM9 - маленький вебсервер и т.п.


Ещё кроме lwip есть uIP (так называемый микро IP)
http://www.sics.se/~adam/uip/
Vitaliy_ARM
Цитата(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е.
Aprox
Цитата(Vitaliy_ARM @ Jun 23 2008, 00:21) *
Вашу задачу решить можно. У меня сейчас утсройство работает на 30 Мбит/с по UDP, при загрузке процессора 30% (частота ядра 60 МГц) (поток в одну сторону). Причем раскачивал до 70 Мбит.
Сразу говорю - порты uIP в примерах IAR не берите за основу, они просто кошмарно неоптимальны!
Портируйте сами или пишите конкретно под этот процессор свой стек. Просматривая uIP, в принципе если его немного переписать, то можно увеличить скорость в несколько раз на этом ARMе.


Переписать много сложнее, чем заново переписать, выкидывая все ненужные навороты и оставить только UDP и ARP. Тогда можно достигнуть и 90Мвсек.
voyt
Реальны данные из жизни: u-boot на SAM9260 загружает по tftp (UDP протокол, стек какой-то нераспространенный ) протоколу 20 МБайт за 20 секунд в SDRAM. Но думаю, что это не показатель, т.к. сетевая часть не шибко оптимизирована...
elektronshik
Здравствуйте. Подскажите пожалуйста как настроить LwIP на максимальную скорость передачи по TCP.
Месяц уже ковыряю, а скорость всего 180 Кбайт/с. Исходящие пакеты идут размером ~128...512 байт.

Вырезать что-то из стека не хотелось бы. 1 МБайта/с по ТСП вполне достаточно. скорей всего дело в каких-то опциях... но каких?


За основу брался порт ARM9_STR91X_IAR.
Система: AT91SAM9260 + FreeRTOS v5.0.3 + LwIP v1.3 + EWARM5.10
scifi
Цитата(elektronshik @ Oct 20 2008, 08:56) *
Здравствуйте. Подскажите пожалуйста как настроить LwIP на максимальную скорость передачи по TCP.

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

Спасибо, сейчас посмотрю.

Пользуюсь как раз Wireshark. Процессор больше ничем не нагружен, код выполняется в SDRAM на 100Mhz.

Еще в догонку вопросик:
При пинге пакетами более 1500 байт принимается только первый фрагмент. Может встречали такую проблему? Пока только выяснил, что от второго пакета уже не срабатывает прерывание.
KolyanV
Цитата(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. Собственно, при использовании сокетов это тоже нужно
elektronshik
Цитата(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.
virfis
Объясните мне пожалуйста, как вы получаете такие скорости?
У меня сейчас используется uIP без ОС на LPC2468. Программа отправляет TCP пакеты с моими данными. Длина данных не бывает больше 255. Такая специфика. После отправки анализирую uip_outstanding(conn). Как написано: Check if a connection has outstanding (i.e., unacknowledged) data. И тогда отправляю следующий пакет. так вот у меня между пакетами не меньше 200 мс. Т.е. за секунду 5 пакетов всего. Скорость получается около килобайта в секунду. Хотелось бы получить хотя бы 100 килобайт в секунду.
Rst7
Цитата
Объясните мне пожалуйста, как вы получаете такие скорости?


Ключевое слово для поиска - "Delayed ACK".
virfis
Цитата(Rst7 @ Oct 28 2008, 14:34) *
Ключевое слово для поиска - "Delayed ACK".


Нашел на форуме Ваш пост с двумя методами борьбы. Изначально я пробовал отправлять следующий пакет недожидаясь ACK. Но я терял не меньше половины пакетов. Не берусь утверждать но возможно uIP не умеет передавать недождавшись ACK. А LwIP у меня не работает.
Rst7
Не должно оно терять пакеты. Но я имел в виду немного другой поиск, например вот так
http://www.google.com/search?rls=ru&q=uIP+Delayed+ACK

Первая же ссылка - как обойти
virfis
uip-split подключил, не помогает. Он не рассчитан на маленькие пакеты. Результат тот же 200 мс задержка. Попробовал изменить функцию чтобы разбивала все пакеты, так вообще ничего не доходит. Есть еще какие способы обойти?
Rst7
Цитата
Попробовал изменить функцию чтобы разбивала все пакеты, так вообще ничего не доходит.


Должно доходить. Ищите ошибку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.