Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятные тормоза в lwIP
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
KolyanV
Изучаю 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.
Что это может быть, почему низкая скорсть ? Может кто-то уже сталкивался с подобным ?
_dem
Увеличьте частоту таймера LwIP. Для тестового проекта, взятого с freertos.org, у меня такая же скорость.
KolyanV
Цитата(_dem @ May 28 2008, 16:32) *
Увеличьте частоту таймера LwIP. Для тестового проекта, взятого с freertos.org, у меня такая же скорость.

Не подскажите, что это за таймер ?
В tcp.h есть определение TCP_TMR_INTERVAL, но это врятли тот параметр, который надо менять.
В файле lwiopts.h ничего близкого по смыслу не нашлось.
_dem
Сорри, не подскажу - надо подымать старые проекты, а сейчас времени нет. Поищите - недавно была тема как раз про разгон LwIP на FreeRTOS, там народ вроде бы добился хороших результатов.
KolyanV
Цитата(_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 кБайт/сек.
Правда, судя по исходникам, частота работы таймеров завязана на логику, и еще надо проверять корректность подобного изменения периода таймеров.
Rst7
Цитата
Код работает, но скорость отдачи данных - низкая - около 3 кБайт/сек. В качестве приемника данных выступает компюьютер.


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


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


Что-то мне подсказывает (судя по Вашим пляскам), что lwIP не знает о Delayed ACK. Посмотрите в документацию, может надо в конфигурации чего поставить для борьбы с этим злом.
_dem
Цитата(KolyanV @ May 28 2008, 00:51) *
Изучаю lwIP...


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


1.2-1.5 Мбайт/сек было бы оптимально. На практике надо чуть меньше (до 0.8 МБайт/сек), но с учетом загрузки процессора паралельными задачами, хочется иметь некоторый зазор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.