|
|
  |
подскажите хороший tcp/ip стек, кроме uIP |
|
|
|
Sep 21 2007, 12:17
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-06-07
Пользователь №: 28 483

|
LWIP, At91RM9200, GCC 4.1.2. HTTP-клиент. Скорость скачивания файлов - 5.7 Мбайт в секунду. Интересно, а сколько вообще предел для этого процессора в скорости передачи (интересует траф входящий, с точки зрения железки)?
Сообщение отредактировал e-yes - Sep 21 2007, 12:22
|
|
|
|
|
Sep 25 2007, 11:44
|
Участник

Группа: Новичок
Сообщений: 30
Регистрация: 16-06-07
Пользователь №: 28 483

|
Надо добавить, что сейчас LwIP свободно "доразрабатывается" на нонгну: savannah.nongnu.org/projects/lwip/ Пофиксено немало багов и функциональности добавлено.
Сообщение отредактировал e-yes - Sep 25 2007, 11:45
|
|
|
|
|
Nov 6 2007, 13:02
|

Местный
  
Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470

|
Цитата(MALLOY2 @ Nov 6 2007, 15:29)  После отимизаций стека LwIP на STR912FA получил скорость TCP 5.6 метра в секунду  . Весьма интересно в чем заключались эти оптимизации. Хотябы в общих словах. Кстати у меня при попытке увеличить TCP_SND_BUF выше TCP_MSS сразу пропадала связь и на аки он отвечал ресетами. Неужели у at91sam7x256 ему памяти не хватает... А так скорость 300килоБАЙТ в секунду уверенно.
|
|
|
|
|
Nov 7 2007, 07:49
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
1) 8- битные и 16 битные переменные полей которые работали как счетчки или как переменные хранящие длинну, также все локальные счетчики счетчики были сделаны 32 битным типом. 2) критичные функции типа CRC перенесены в ОЗУ (в итоге программа в ОЗУ сьела 8к ) 3) драйвер MAC буфиризирован. 4) в входном буфере нет копирования, тобиш выделяется место в PBUF под максимальную длинну пакета и в DMA подсовывается адресс, выделение происходит на опереженеие то есть раньше чем принят пакет, это сьедает больше памяти так как выделяется всегда на максимальный пакет, но колосально подымает производительность. В дальнейшем пакет никгде не копируется а по ходу продвижения по стеку разбирается. 5) естественно заменен алгоритм CRC на более быстрый, он кстати идет вместе с стеком но почемуто не включен в него. 6) выкинуты функции memcpy библиотечные и заменены на более быстрые. 7) ну и естественно выбраны оптимальные настройки памяти стека. 8) по итогу код стека во флеш. ~22К, в ОЗУ 8К, использовано памяти под кучу и другую фигню ~60к Ну приблизительно вот. Вот мои настройки стека
lwipopts.zip ( 3.27 килобайт )
Кол-во скачиваний: 232
|
|
|
|
|
Nov 12 2007, 11:06
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
Цитата(MALLOY2 @ Nov 7 2007, 11:49)  3) драйвер MAC буфиризирован. Что это значит? можно подробнее? Цитата(MALLOY2 @ Nov 7 2007, 11:49)  4) в входном буфере нет копирования, тобиш выделяется место в PBUF под максимальную длинну пакета и в DMA подсовывается адресс, выделение происходит на опереженеие то есть раньше чем принят пакет, это сьедает больше памяти так как выделяется всегда на максимальный пакет, но колосально подымает производительность. В дальнейшем пакет никгде не копируется а по ходу продвижения по стеку разбирается. Т.е. вы реализовали то, что в лвип-шной конфе называют зеро сайз копи? Я тоже думал над реализацией чего либо подобного, но меня затерзали "мутные сомнения". Если ядро работает с езернет памятью, то захватывает шину и емак должен дождаться освобождения ресурса. Мы получаем выигрыш от отсутствия копирования память-память, но получаем блокировку емак-а. В ином варианте мы тратим время на копирование, но дальше работают оба банка памяти. Один с ядром, а другой с емасом. Я так понимаю, вы проводили какое-то тестирование. Можно ли подробнее узнать: 1 насколько этот механизм увеличил пропускную способность стека 2 есть ли пропадание пакетов из-за блокировки емак-а 3 Я понял что исходящие пакеты вы обрабатываете "по старому". Почему здесь не применяете зеро сайз копи?
|
|
|
|
|
Nov 13 2007, 07:32
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Код Если ядро работает с езернет памятью У STR912 нету езернет памяти, есть токо фифо которое в принципе скрыто от юзера, между фифо и озу стоит DMA. Смысл буферизации заключается в том что б как можно меньше терять пакеты. Если не запустить DMA пакет не будет принят. Работает следующим как токо принят пакет, выделяется новый pbuf размером на макс пакет (1520 байт) и запускается DMA и так пока не кончатся pbuf  , приложения следит за этими pbuf и когда надо передвает в стек. Код 1 насколько этот механизм увеличил пропускную способность стека намного как при передачи так и при приеме. изначально при первом старете получил 13 mbit/s передача и 5-6 mbit/s прием, на данный момент 40-46 mbit/s передача, 25-30 прием Код 2 есть ли пропадание пакетов из-за блокировки емак-а Пропадаение пакетов есть, особенно если сеть перегружена броадкастами, но это не от блокировки емака, а от нехватки pbuf, память ведь ограничена. Код 3 Я понял что исходящие пакеты вы обрабатываете "по старому". Почему здесь не применяете зеро сайз копи? Да по старому, вся проблема в STR DMA, он требует выравнивание адреса 4, а payload pbuf не имеет выравнивания и приемущественно расположен на границе 2 из-за 6 байтового MAC адресса. В дальнейшем можно будет переписать управление PBUF так чтобы выходные пакеты имели выравниваение, но это потом.... сейчас меня такие параметры устраивают, а времени в обрез
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|