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

 
 
 
Reply to this topicStart new topic
> Непонятные тормоза в lwIP, на SAM7X256
KolyanV
сообщение May 27 2008, 21:51
Сообщение #1


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

Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621



Изучаю lwIP, эксперементирую. Взял демо-приложение FreeRTOS 4.4 + lwIP 1.1 для AT91SAM7X256 под IAR. Запустил, работает. Добавил к приложению еще одну задачу (тред), в котором выполняется тривиальная операция - при входящем TCP соединении на 3333 порт - принять соединение, выдать поток даных (около 50 кБ), закрыть соединение.
Код следующий:
Код
           /* Create a new tcp connection handle */
    pxListener = netconn_new( NETCONN_TCP );
    netconn_bind(pxListener, NULL, 3333);
    netconn_listen( pxListener );

    /* Loop forever */
    for(;; )
    {
        /* Wait for connection. */
        pxNewConnection = netconn_accept(pxListener);

        if(pxNewConnection != NULL)
        {

        /* Service connection. */
        for (int i=0;i<100;i++)
          { if (netconn_write(pxNewConnection, DataBuf,512,0)==ERR_OK)
              continue;
             else
              while (netconn_write(pxNewConnection, DataBuf,sizeof(DataBuf),NETCONN_COPY)!=ERR_OK)
                 vTaskDelay(1);
          }
        netconn_close(pxNewConnection);
        while( netconn_delete( pxNewConnection ) != ERR_OK )
            {
                vTaskDelay( 3 );
            }
        }
    }


Код работает, но скорость отдачи данных - низкая - около 3 кБайт/сек. В качестве приемника данных выступает компюьютер.
FreeRTOS работает в режиме вытесняющей многозадачности, частота переключения - 1000 Гц.
Наибольший приоритет - у задачи обработки данных по прерыванию (обрабатывает сигнал из ISR), следующий за ним по убыванию - у ядра lwIP. У вышеприведенной задачи приоритет на единицу ниже, чем у ядра lwIP. Анализ переключения задач показал, что более 95% времени процессор находится в IDLE.
Что это может быть, почему низкая скорсть ? Может кто-то уже сталкивался с подобным ?
Go to the top of the page
 
+Quote Post
_dem
сообщение May 28 2008, 13:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Увеличьте частоту таймера LwIP. Для тестового проекта, взятого с freertos.org, у меня такая же скорость.
Go to the top of the page
 
+Quote Post
KolyanV
сообщение May 28 2008, 16:38
Сообщение #3


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

Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621



Цитата(_dem @ May 28 2008, 16:32) *
Увеличьте частоту таймера LwIP. Для тестового проекта, взятого с freertos.org, у меня такая же скорость.

Не подскажите, что это за таймер ?
В tcp.h есть определение TCP_TMR_INTERVAL, но это врятли тот параметр, который надо менять.
В файле lwiopts.h ничего близкого по смыслу не нашлось.
Go to the top of the page
 
+Quote Post
_dem
сообщение May 29 2008, 08:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Сорри, не подскажу - надо подымать старые проекты, а сейчас времени нет. Поищите - недавно была тема как раз про разгон LwIP на FreeRTOS, там народ вроде бы добился хороших результатов.
Go to the top of the page
 
+Quote Post
KolyanV
сообщение May 29 2008, 09:09
Сообщение #5


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

Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621



Цитата(_dem @ May 29 2008, 11:02) *
Сорри, не подскажу - надо подымать старые проекты, а сейчас времени нет. Поищите - недавно была тема как раз про разгон LwIP на FreeRTOS, там народ вроде бы добился хороших результатов.


Вчера пробовал менять TCP_TMR_INTERVAL. Действительно, изменение этого параметра влияет на скорость. Так, существует 2 таймера lwIP - fast и slow, которые вызываются с периодом 250 и 500 мс. Их уменьшение в 10 раз (до 25 и 50) не дает значимых изменений скорости. Но дальнейшее их уменьшение дает существенные результаты. При периоде 1 и 2 мс скорость выпросла до 200 кБайт/сек. А увеличение буфера передачи с 1500 до 8000 байт при тех же таймингах (1 и 2 мс), привело к увеличению скорости до 810 кБайт/сек.
Правда, судя по исходникам, частота работы таймеров завязана на логику, и еще надо проверять корректность подобного изменения периода таймеров.
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 29 2008, 09:36
Сообщение #6


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

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



Цитата
Код работает, но скорость отдачи данных - низкая - около 3 кБайт/сек. В качестве приемника данных выступает компюьютер.


Цитата
Вчера пробовал менять TCP_TMR_INTERVAL...


Цитата
А увеличение буфера передачи с 1500 до 8000 байт при тех же таймингах (1 и 2 мс), привело к увеличению скорости до 810 кБайт/сек.


Что-то мне подсказывает (судя по Вашим пляскам), что lwIP не знает о Delayed ACK. Посмотрите в документацию, может надо в конфигурации чего поставить для борьбы с этим злом.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_dem
сообщение May 29 2008, 11:52
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Цитата(KolyanV @ May 28 2008, 00:51) *
Изучаю lwIP...


Каких показателей скорости надо добится ?
Go to the top of the page
 
+Quote Post
KolyanV
сообщение May 29 2008, 18:49
Сообщение #8


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

Группа: Свой
Сообщений: 91
Регистрация: 1-06-05
Пользователь №: 5 621



Цитата(_dem @ May 29 2008, 14:52) *
Каких показателей скорости надо добится ?


1.2-1.5 Мбайт/сек было бы оптимально. На практике надо чуть меньше (до 0.8 МБайт/сек), но с учетом загрузки процессора паралельными задачами, хочется иметь некоторый зазор.
Go to the top of the page
 
+Quote Post

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

 


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


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