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

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


Йа моск ;)
******

Группа: Модераторы
Сообщений: 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-авторизация в вебсервере сделана wink.gif

Прикрепленное изображение


Эмулятор 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.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jul 29 2011, 19:41
Сообщение #2


Йа моск ;)
******

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



QUOTE
Соответсвенно скорость порядка 96-192 кБит/с.


Источник где? В большом интернете? Тогда не годится, будет икать, мало места под буфера.

Расчет такой - сделайте пинг в ваше любимое радио, посмотрите время ответа - это так называемый Round Trip Time.

Допустим, мы подобрали MTU так, чтобы нам сыпалось много маленьких пакетиков с данными - пусть не очень экономно, зато можно быстро перевести сервер в состояние Fast Retransmit при потере пакета. Будем для простоты считать, что уведомление серверу о потере пакета начинает лететь сразу после этого события. Значит, повтор пакета произойдет за время Round Trip Time. Но за это время нам упадет много новых пакетов, которые необходимо сохранить, ибо они валидные. Суммарно этих данных будет ваше 96-192кБит/с умножить на RTT. Ну, скажем, RTT будет 50мс - адекватная цифра для современных интернетов. За это время упадет 5-10 килобайт данных, которые надо сохранить. Плюс, кстати, к ним еще служебная инфа.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
RA3WUM
сообщение Jul 29 2011, 19:59
Сообщение #3


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

Группа: Участник
Сообщений: 163
Регистрация: 22-02-07
Пользователь №: 25 578



Цитата(Rst7 @ Jul 29 2011, 23:41) *
Источник где? В большом интернете? Тогда не годится, будет икать, мало места под буфера.

Расчет такой - сделайте пинг в ваше любимое радио, посмотрите время ответа - это так называемый Round Trip Time.

Конечно в большом, у меня пинг от 16-75 миллисекунд в зависмости от радиостанции.
Что нужен внешний буфер это понятно. В некоторых конструкциях web-радио используются RAM или FRAM с интерфейсом SPI.
Последняя кстати у меня и живьём есть, так что планирую её поставить.
В качестве декодера VS1053.
Если не ошибаюсь на вашем стеке уже делали интернет-радоприёмник?


--------------------
Мужество есть лишь у тех, кто ощутил сердцем страх!
В. Кипелов, Беги за солнцем.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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 Если не ошибаюсь на вашем стеке уже делали и...   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 Имхо, вполне приличный результат для полноце...   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 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:19
Рейтинг@Mail.ru


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