|
Самый быстрый и самый маленький 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:56
|

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

|
QUOTE Имхо, вполне приличный результат для полноценного универсального стека - проигрывает по скорости узкозаточенному совсем немного -10-15 процентов. .... Из печального - загрузка процессора у меня при такой массированной отправке 99% - увы, такова плата за универсальность решения. Ага, из суперпечального  Т.е. таки два раза (даже больше), ибо у меня 43% CPU Load. QUOTE Дак, ИМХО, глубокий смысл не в том, где взять такой поток, а в том, чтоб меньше загрузить МК. Безусловно. QUOTE А эти 5Мб/сек - при половинной загрузке. Ну а у меня - при четверти
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jul 30 2011, 13:08
|

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

|
Цитата(Rst7 @ Jul 30 2011, 15:56)  Ага, из суперпечального  Т.е. таки два раза (даже больше), ибо у меня 43% CPU Load. А ничего что мое решение обладает на порядок большими фичами? Можно за минуту этот стек скомпилировать на 4 совершенно разных платформы, или за 5 минут написать на его основе бридж или роутер. И свои приложения пользователям на нем попроще (мягко говоря) писать. Так что проигрыш всего 10 процентов скорости - это очень невысокая плата. Да, еще момент - мое решение заточено больше на прием, и путь данных по приему несильно от Вашего отличается (только рулежка окнами автоматическая , а еще Out-of-Order Segments и Selective ACK), передача - по остаточному принципу, что там в квотах на память останется. Так что сравнение скорости передачи - максимально невыгодное для меня. Я все-таки на досуге напишу тестовую утилиту - чтобы и прием, передача, эхо, да по нескольким сокетам одновременно, там еще померяемся  . Цитата(Rst7 @ Jul 30 2011, 16:04)  Прямое чтение с GPIO (или через DMA) вполне такой поток даст. Даст, но это тот самый случай когда REGENERATE все это зарежет на корню - надо будет заводить большой буфер и хранить в нем DMA-нутые данные до ACK-а по TCP. Ну или терять данные, но это как бы неспортивно
|
|
|
|
Сообщений в этой теме
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 VslavX Небольшой апдейт про "Машу"
Включил клю... Jul 30 2011, 12:32 prottoss Цитата(VslavX @ Jul 30 2011, 18:32) Небол... Jul 30 2011, 12:39  VslavX Цитата(prottoss @ Jul 30 2011, 15:39) Дак... Jul 30 2011, 12:53   prottoss Цитата(VslavX @ Jul 30 2011, 18:53) Почем... Jul 30 2011, 13:03 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
|
|
|