|
Самый быстрый и самый маленький TCP-стек., По просьбам трудящихся. |
|
|
|
Jul 27 2011, 10:57
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Итак, по просьбам трудящихся выкладываю порт своего стека на LPC1768, выдранный из текущего проекта, над которым щас тружусь.
NikeE_CM3.zip ( 350.37 килобайт )
Кол-во скачиваний: 563
Собирается IAR'ом 6.20.3 (вроде крайний на текущий момент), за подправить для GCC - даже не просите. В качестве PHY используется KSZ8041TL, что, в общем, не принципиально - править, если что, файл emac.c Тактовая проца в проекте - 100МГц, кварц - 20МГц, менять - функция InitPLL в файле hardware_init.c Так же для генерации 50МГц REFCLK используется сам процессор через модуль CLKOUT. Кому не надо, в файле hardware_init.c необходимо убрать CODE //Нужно если 50МГц для RMII генерируется процом PINSEL3 |= (0x01UL<<22); //CLKOUT on P1.27 CLKOUTCFG=0x00000110; //CLKOUT 100MHz/2=50MHz used for RMII Стек поддерживает TCP (и серверные, и клиентские сокеты), ICMP. Очень не долго прикрутить UDP. Поддерживается Fast Retransmit на передачу. На прием - сделаю чуть позже (если, конечно, понадобится). Архитектура стека - callback по событиям из низкоприоритетного прерывания (используется модуль RIT как таймер, необходимый для TCP и заодно происходит Wakeup этого потока при поступлении пакетов - через прерывание от EMAC, которые должно быть высокоприоритетным (но при этом очень короткое, TODO - управление Flow Control)). Сам стек - network.c. По умолчанию IP-адрес - 192.168.0.100. Есть вебинтерфейс, даже с поддержкой ajax - можно поставить галочку Update Graphics и повеселиться (естественно, с браузером, который понимает HTML5 - Опера, Хром, Тормозилла - все годится). Кнопки "<<" и ">>" тоже можно понажимать. Для создания и отображения этих данных копать show_data.c и HTMLsource/http_root_level3. Еще там случайно md5-авторизация в вебсервере сделана
Эмулятор EEPROM в проекте не прикручен, так что на страничке конфигурации настройки стека не сохраняются. Когда у себя в проекте прикручу, сюда сделаю порт. На порту 2000 висит отдаватель файла со случайными числами размером 100 мегабайт - это для теста скорости. В папочке GetData лежит проект забирателя для большого брата (собирать C++ Builder'ом). Ну вот теперь, собственно, за скорость. По TCP - 90Мбит/с.
На этом, кстати, предлагаю закончить спор о максимально достижимой скорости по TCP. Ну размеры вообще не угадываются - 3.7кБ собственно стек, вебсервер - 3.5кБ. Ах да, там еще странички пакуются, но это осталось с версии для AVR, можно честно выбросить. Собственно, примеры использования можно смотреть в rx_tcp_dump.c (тупой отправлятель данных) и http_server.c (веб-сервер, там берегите мозг). Ну и на посошок - лицензии. От это все - GPL, так что пользуйтесь. На все вопросы постараюсь ответить тут. Добавлено 29 июня 2011г: http://electronix.ru/forum/index.php?s=&am...st&p=956930 - ревизия 1315.Добавлено 30 июля 2011г: http://electronix.ru/forum/index.php?s=&am...st&p=957213 - ревизия 1318.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
 |
Ответов
|
Jul 30 2011, 12:32
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Небольшой апдейт про "Машу"  Включил ключик компилятора для оптимизации по скорости, внес еще пару коррекций в RTOS (давно уже ждали, но руки не доходили) - в-общем, достигнуто 83.3Мбит/сек  - 16 мегабайт чистых данных ушло за 1610мс. В принципе, достигалось и 86Мбит/сек - но после патча драйвера EMAC на приоритет событий отправки, при этом оно принимать при ограниченном буфере похуже будет, поэтому такой вариант я забраковал. Имхо, вполне приличный результат для полноценного универсального стека - проигрывает по скорости узкозаточенному совсем немного -10-15 процентов. Есть еще небольшой резерв - цикл подсчета chksum/копирования исходящих пакетов я не разворачивал, но там сложная функция на асме (одна из трех для всего стека, которые от проца зависят) - лениво уже переделывать. Из печального - загрузка процессора у меня при такой массированной отправке 99% - увы, такова плата за универсальность решения. Если отправлять осмысленные данные (считаем что заберем половину проц.времени) то эффективная скорость на LPC17 - 5Мбайт/сек. Где на LPC17 взять такой реальный поток данных - непонятно, ни SD, ни USB, ни UART, ни ADC такого не дадут, выходит даже эти 5Мбайт/сек - сферический конь в вакууме, потому как их нечем загрузить.
|
|
|
|
|
Jul 30 2011, 12:39
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(VslavX @ Jul 30 2011, 18:32)  Небольшой апдейт про "Машу"... ...где на LPC17 взять такой реальный поток данных - непонятно, ни SD, ни USB, ни UART, ни ADC такого не дадут, выходит даже эти 5Мбайт/сек - сферический конь в вакууме, потому как их нечем загрузить. Дак, ИМХО, глубокий смысл не в том, где взять такой поток, а в том, чтоб меньше загрузить МК.
--------------------
|
|
|
|
Сообщений в этой теме
Rst7 Самый быстрый и самый маленький TCP-стек. Jul 27 2011, 10:57 andrewlekar Эмуляцию EEPROM уже хочется глянуть. У меня своя е... Jul 27 2011, 11:09 Rst7 QUOTE Эмуляцию EEPROM уже хочется глянуть.
А что,... Jul 27 2011, 11:45 prottoss А че он самый быстрый то? С чем сравнивалось?
У мя... Jul 27 2011, 12:33 VslavX Цитата(prottoss @ Jul 27 2011, 15:33) А ч... Jul 27 2011, 14:54  blackfin Цитата(VslavX @ Jul 27 2011, 18:54) А вот... Jul 27 2011, 15:36   VslavX Цитата(blackfin @ Jul 27 2011, 18:36) Мож... Jul 27 2011, 17:08    blackfin Цитата(VslavX @ Jul 27 2011, 21:08) Я вот... Jul 27 2011, 17:16 Rst7 QUOTE А че он самый быстрый то? С чем сравнивалось... Jul 27 2011, 12:40 prottoss Цитата(Rst7 @ Jul 27 2011, 18:40) А Вы за... Jul 27 2011, 12:50 Rst7 QUOTE А сколько занимает памяти TCP-сокет кстати?
... Jul 27 2011, 13:07 prottoss Цитата(Rst7 @ Jul 27 2011, 19:07) Давайте... Jul 27 2011, 13:20 Rst7 QUOTE Хорошо. Постараюсь причесать до понедельника... Jul 27 2011, 13:24 prottoss Цитата(Rst7 @ Jul 27 2011, 19:24) Так а п... Jul 27 2011, 13:55 prottoss Цитата(Rst7 @ Jul 27 2011, 19:24) Так а п... Jul 28 2011, 08:03 scifi Интересная штука. Эх, причесать бы код и абстрагир... Jul 27 2011, 14:01 prottoss Цитата(scifi @ Jul 27 2011, 20:01) Эх, пр... Jul 27 2011, 14:13 zltigo QUOTE (scifi @ Jul 27 2011, 16:01) Эх, пр... Jul 27 2011, 14:28 Rst7 QUOTE Эх, причесать бы код и абстрагировать от жел... Jul 27 2011, 14:27 prottoss Цитата(Rst7 @ Jul 27 2011, 20:27) Так - п... Jul 27 2011, 15:09 Rst7 QUOTE Судя по скорости работы с конкретным железом... Jul 27 2011, 14:48 Rst7 QUOTE Может быть, обсудим методику тестирования пр... Jul 27 2011, 15:08 Rst7 QUOTE Чего там оно просит?
В windows/drivers/etc/... Jul 27 2011, 15:23 Rst7 QUOTE Я вот жду LPC18xx - у него EMAC продвинутый,... Jul 27 2011, 18:24 VslavX Цитата(Rst7 @ Jul 27 2011, 21:24) Однако ... Jul 27 2011, 20:57 Rst7 QUOTE Можно, например, Ethereal'ом протестиров... Jul 27 2011, 20:34 blackfin Цитата(Rst7 @ Jul 28 2011, 00:34) Только ... Jul 28 2011, 04:15 Rst7 QUOTE Ну, допустим, не в два, а чуть больше чем в ... Jul 27 2011, 21:28 VslavX Цитата(Rst7 @ Jul 28 2011, 00:28) Имеем з... Jul 28 2011, 06:08 halfdoom Цитата(Rst7 @ Jul 27 2011, 13:57) Ну вот ... Jul 28 2011, 04:04 andrewlekar ЦитатаА что, собственно стек не интересен?
Не особ... Jul 28 2011, 04:19 Rst7 QUOTE Их никто и не складывает. Данные идут в одно... Jul 28 2011, 06:39 VslavX Цитата(Rst7 @ Jul 28 2011, 09:39) А оно-т... Jul 28 2011, 07:36 Rst7 Подумал про передачу данных, например, с MMC. Да, ... Jul 28 2011, 07:48 VslavX Цитата(Rst7 @ Jul 28 2011, 10:39) прерыва... Jul 28 2011, 07:56 Rst7 QUOTE Угу, а если стек занят (ну по другому сокету... Jul 28 2011, 08:14 VslavX Цитата(Rst7 @ Jul 28 2011, 11:14) Почему?... Jul 28 2011, 10:53 AlexandrY Цитата(Rst7 @ Jul 27 2011, 13:57) Итак, п... Jul 28 2011, 10:08 Rst7 QUOTE и вижу вы даже не пытались оптимизировать ра... Jul 28 2011, 10:30 AlexandrY Цитата(Rst7 @ Jul 28 2011, 13:30) Именно ... Jul 28 2011, 12:51 Rst7 Кстати, о максимальной пропускной способности.
Им... Jul 28 2011, 11:27 VslavX Цитата(Rst7 @ Jul 28 2011, 14:27) Буфер п... Jul 28 2011, 13:03  halfdoom Цитата(VslavX @ Jul 28 2011, 16:03) Но хр... Jul 28 2011, 14:24   VslavX Цитата(halfdoom @ Jul 28 2011, 17:24) Воз... Jul 28 2011, 14:33 Rst7 QUOTE Что значит крутить окно заранее? Это вообще ... Jul 28 2011, 13:33 VslavX Цитата(Rst7 @ Jul 28 2011, 16:33) Для так... Jul 28 2011, 14:10 Rst7 QUOTE Угу, и еще залезли в s->win и сделали его... Jul 28 2011, 14:25 Rst7 QUOTE а для человека, незнакомого с протоколом TCP... Jul 28 2011, 14:52 blackfin Цитата(Rst7 @ Jul 28 2011, 18:52) Более т... Jul 28 2011, 15:18  zltigo QUOTE (blackfin @ Jul 28 2011, 18:18) Ага... Jul 28 2011, 17:32   blackfin Цитата(zltigo @ Jul 28 2011, 21:32) При э... Jul 28 2011, 18:31    zltigo QUOTE (blackfin @ Jul 28 2011, 21:31) и и... Jul 28 2011, 18:50     VslavX Цитата(zltigo @ Jul 28 2011, 21:50) Прими... Jul 28 2011, 19:08      zltigo QUOTE (VslavX @ Jul 28 2011, 22:08) А что... Jul 28 2011, 19:19       VslavX Цитата(zltigo @ Jul 28 2011, 22:19) Там д... Jul 28 2011, 19:32        zltigo QUOTE (VslavX @ Jul 28 2011, 22:32) И что... Jul 28 2011, 19:43 Rst7 QUOTE Ага, вот тут и встает наш Главный холиварный... Jul 28 2011, 16:13 VslavX Цитата(Rst7 @ Jul 28 2011, 19:13) Да поро... Jul 28 2011, 17:56 yakub_EZ IAR 6.21.1.2846 и common components 6.3.3.1990. П... Jul 28 2011, 16:18 Rst7 QUOTE При компиляции просит revision.c, где его вз... Jul 28 2011, 16:36 Rst7 QUOTE ИМХО, как раз LPC17xx неудачно выбран для ил... Jul 28 2011, 19:23 VslavX Цитата(Rst7 @ Jul 28 2011, 22:23) конечно... Jul 28 2011, 19:45 Rst7 QUOTE и похоже таки со 100% загрузкой ядра (раз 92... Jul 28 2011, 20:04 VslavX Цитата(Rst7 @ Jul 28 2011, 23:04) Ну я по... Jul 28 2011, 20:20 VslavX Цитата(Rst7 @ Jul 28 2011, 23:04) А вот т... Jul 28 2011, 20:36 Rst7 QUOTE Хм, а разве он их генерирует, а не просто бе... Jul 28 2011, 20:28 VslavX Цитата(Rst7 @ Jul 28 2011, 23:28) Распако... Jul 28 2011, 20:44 aaarrr Цитата(Rst7 @ Jul 29 2011, 00:28) Да ладн... Jul 28 2011, 22:06 Rst7 QUOTE Это для пакета в 1460 байт? Примерно 1 такт ... Jul 28 2011, 20:43 Rst7 QUOTE А что - на PIO получится 25МГц выдать?
Ну п... Jul 28 2011, 20:55 Rst7 ЦитатаА еще придется CRC16 считать для каждой из ч... Jul 29 2011, 06:59 Rst7 QUOTE Не стоит овчинка выделки - сделать можно, но... Jul 29 2011, 08:18 Rst7 Сделал правильный отправлятель пакетов (без тупого... Jul 29 2011, 10:00 RA3WUM Rst7
Сколько данный стек занимает RAM? В LPC1114 ... Jul 29 2011, 15:28 Rst7 QUOTE Сколько данный стек занимает RAM? В LPC1114 ... Jul 29 2011, 19:02 RA3WUM Цитата(Rst7 @ Jul 29 2011, 23:02) Или как... Jul 29 2011, 19:26 Rst7 QUOTE Соответсвенно скорость порядка 96-192 кБит/с... Jul 29 2011, 19:41 RA3WUM Цитата(Rst7 @ Jul 29 2011, 23:41) Источни... Jul 29 2011, 19:59 Rst7 QUOTE Если не ошибаюсь на вашем стеке уже делали и... Jul 29 2011, 20:36 RA3WUM Цитата(Rst7 @ Jul 30 2011, 00:36) Да. Но ... Jul 29 2011, 20:57 Rst7 QUOTE Но в моём случае что есть под рукой, от того... Jul 29 2011, 21:37 RA3WUM Цитата(Rst7 @ Jul 30 2011, 01:37) VS1053 ... Jul 30 2011, 11:56 Rst7 Поигрался с dummynet, подправил некоторые неточнос... Jul 30 2011, 08:57 Rst7 QUOTE Имхо, вполне приличный результат для полноце... Jul 30 2011, 12:56 VslavX Цитата(Rst7 @ Jul 30 2011, 15:56) Ага, из... Jul 30 2011, 13:08 Rst7 QUOTE Где на LPC17 взять такой реальный поток данн... Jul 30 2011, 13:04 Rst7 QUOTE Так что проигрыш всего 10 процентов скорости... Jul 30 2011, 13:13 VslavX Цитата(Rst7 @ Jul 30 2011, 16:13) Проигры... Jul 30 2011, 13:29 Rst7 QUOTE а еще Out-of-Order Segments и Selective ACK
... Jul 30 2011, 13:39 VslavX Цитата(Rst7 @ Jul 30 2011, 16:39) Я с одн... Jul 30 2011, 14:10 Rst7 QUOTE хотя, если тут перейти на RTOS, то это свою ... Jul 30 2011, 14:39 zltigo QUOTE (Rst7 @ Jul 30 2011, 16:39) Не пора... Jul 30 2011, 15:10 VslavX Цитата(Rst7 @ Jul 30 2011, 17:39) Не пора... Jul 30 2011, 15:21 Rst7 QUOTE Написание и использование RTOS (кстати, ои о... Jul 30 2011, 15:21 VslavX Цитата(Rst7 @ Jul 30 2011, 18:21) Да я не... Jul 30 2011, 15:38 Rst7 QUOTE Угу, все именно так. Поэтому malloc/free у м... Jul 30 2011, 15:34
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|