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

 
 
> Самый быстрый и самый маленький 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 28 2011, 08:14
Сообщение #2


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

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



QUOTE
Угу, а если стек занят (ну по другому сокету что-то отдает или удаленный хост задумался, пакет пропал и тд) и этот wakeup задерживается? Причем в общем случае он так нехило на секунды задержаться может. При этом ресурс MMC+SPI заблокирован и никто им больше пользоваться в этот момент не может (ну там логгер чего писнуть хочет).


Почему? Задержка будет максимум на время приготовления или обработки пакета. Конечно, надо всегда минимизировать время обработки данных.

QUOTE
Еще интересно как тут с приемом. В нормальном стеке с внутренней буферизацией всегда можно четко вычислить свое окно и передать его удаленному хосту.


И тут всегда можно вычислить. А иногда - например, для разбора HTTP-запросов, оно и нафиг не нужно, все делается на лету.

В общем, при такой архитектуре принципиально иным должно быть построение остального кода. Только тогда будут скорости. Хотя, в общем-то и в обычных bsd-style дизайнах нельзя забывать о том, что, например, очень нежелательно кормить, скажем, функцию send по одному байту. Понятное дело, что есть буферизация, но накладные расходы на вызов будут просто феерические.

А с другой стороны сама по себе bsd-style архитектура не позволяет работать с zero-copy. А zero-copy - это не только в самом стеке, но и еще и в генераторе/приемнике данных. Т.е. проблему скорости надо решать в комплексе.

QUOTE
А Вы тестировали точка-точка?


Свич торчит 16типортовый между девайсом и большим братом.

QUOTE
Можно, используя RTOS и вместо колбеков флаги. Относительно легко переделывается.


Там все-же сложнее ситуация. И опять-же, повторюсь, решать ее надо в комплексе. Обработчик медленный и печальный - уносите его в низкоприоритетную задачу/прерывание (я просто разноприоритетными прерываниями как неким аналогом RTOS пользуюсь), разбивайте его на подзадачи, возможно - добавляйте ему необходимые буфера.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
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
|- - 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 Имхо, вполне приличный результат для полноце...   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 Текстовая версия Сейчас: 21st July 2025 - 04:00
Рейтинг@Mail.ru


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