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

 
 
 
Reply to this topicStart new topic
> STM32F4 + lwIP, Согласование пропускной способности Ethernet
TolikG
сообщение Jul 1 2015, 04:24
Сообщение #1


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

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Отлаживаю модем для удлинения Ethernet соединения. Пропускная способность порта Ethernet 100 Мб/сек, пропускная способность модема 1 Мб/сек. Схема работает следующим образом: Ethernet фрейм попадает в драйвер lwIP, здесь я его перефатываю и отправляю в модем (вместо стека lwIP), на втором конце такой же модем принимает этот фрейм - кладу его в драйвер lwIP (как будто он пришел со стека lwIP) и дальше он попадает в порт Ethernet.
Для тестирования на обоих концах подключены компьютеры. Пинги проходят, файлы передаются. Запускаю на обоих компьютерах утилиту jperf, тестирую пропускную способность TCP соединения. Несколько секунд работает нормально (1 Мб/сек), затем скорость падает почти до нуля, через несколько секунд возникают небольшие увеличения пропускной способности (порядка 100 кБит/сек). Складывается впечатление, что отправляющий комп не получает вовремя подтверждения сегментов и делает паузы. После перезапуска всей схемы картина повторяется. Подскажите, в какую сторону копать?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 1 2015, 04:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



может буферы накрываются?
В LWIP есть медленный таймер который отвечает за очистку использованных буферов, может его почаще подергать?

у меня было с lwIP что он время от времени почему то замирал и начинались повторные пересылки пакетов, потом все восстанавливалось, причину этого не нашел, так как перешли на другой стек.
Go to the top of the page
 
+Quote Post
mantech
сообщение Jul 1 2015, 05:58
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Jul 1 2015, 07:35) *
у меня было с lwIP что он время от времени почему то замирал


Да, замечал у себя такое же поведение, пока не принципиально, работает в веб-морде, но буду признателен, если кто подскажет, где можно подшаманить laughing.gif
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 1 2015, 06:03
Сообщение #4


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(TolikG @ Jul 1 2015, 07:24) *
.. Подскажите, в какую сторону копать?


Просмотрите обработчики по таймерам. Там не все состояния прописаны. Такое очучение было, что кто-то специально выкинул пару-тройку строк
из обработки состояния канала. Это правда наверное ближе к реплике Голикова...

По поводу заминки в переходнике - думаю надо ещё обрабатывать флаг быстрой передачи, в стэке TCP и возможно глянуть в сторону
SNMP как управляющего слоя соединения.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 1 2015, 06:36
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(TolikG @ Jul 1 2015, 07:24) *
Схема работает следующим образом: Ethernet фрейм попадает в драйвер lwIP, здесь я его перефатываю и отправляю в модем (вместо стека lwIP), на втором конце такой же модем принимает этот фрейм - кладу его в драйвер lwIP (как будто он пришел со стека lwIP) и дальше он попадает в порт Ethernet.

Что-то не пойму, зачем нужен lwip, если нужно всего лишь перебрасывать кадры Ethernet?
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jul 1 2015, 08:10
Сообщение #6


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

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Цитата(scifi @ Jul 1 2015, 09:36) *
Что-то не пойму, зачем нужен lwip, если нужно всего лишь перебрасывать кадры Ethernet?

Кроме переброски кадров там еще есть web-интерфейс для конфигурации модема
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 1 2015, 09:07
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Golikov A. @ Jul 1 2015, 07:35) *
у меня было с lwIP что он время от времени почему то замирал и начинались повторные пересылки пакетов

У меня тоже было. Проблема была не в LwIP а в процедуре ethernetif_input куба. В последней версии всё подправили и проблема ушла.
До тех пор пока она существовала, я ввёл копирование ID пакета и мониторил его на приёмной стороне.
Go to the top of the page
 
+Quote Post
Quasar
сообщение Jul 1 2015, 11:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(SasaVitebsk @ Jul 1 2015, 12:07) *
в процедуре ethernetif_input куба.


Да, тоже столкнулся с таким в свое время, вот такой там код был:
Код
void ethernetif_input( void const * argument )

{

  struct pbuf *p;
  struct netif *netif = (struct netif *) argument;

  for(;; )
  {
    if (osSemaphoreWait( s_xSemaphore, TIME_WAITING_FOR_INPUT)==osOK)
    {
      p = low_level_input( netif );
      if   (p != NULL)
      {
        if (netif->input( p, netif) != ERR_OK )
        {
          pbuf_free(p);
          p = NULL;
        }
      }
    }

  }
}


TolikG проверьте, есть у вас такое?
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jul 2 2015, 04:08
Сообщение #9


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

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



У меня такой код:
Код
void ethernetif_input( void * pvParameters )
{
  struct pbuf *p;
  
  for(;; )
  {
    if (xSemaphoreTake( s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE)
    {
TRY_GET_NEXT_FRAME:
      p = low_level_input( s_pxNetIf );
      if   (p != NULL)
      {
        if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf))
        {
          pbuf_free(p);
        }
        else
        {
          goto TRY_GET_NEXT_FRAME;
        }
      }
    }
  }
}


Сообщение отредактировал IgorKossak - Jul 2 2015, 06:20
Причина редактирования: ,бездумное цитирование, форматирование
Go to the top of the page
 
+Quote Post
TolikG
сообщение Jul 6 2015, 06:09
Сообщение #10


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

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



Прошу прощения за бездумное цитирование, форматирование - не умею вставлять в сообщения фрагменты кода - подскажите как это делать?

Сообщение отредактировал IgorKossak - Jul 6 2015, 06:47
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 6 2015, 06:53
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Чтобы бездумно не цитировать предыдущее сообщение, достаточно нажать не Reply в сообщении, а AddReply внизу страницы. Или удалить в цитате всё ненужное, чтобы не раздувать тему.
Для оформления кода надо выделить этот код и нажать на иконку CODE (над текстовым полем) или CODEBOX (слева) в зависимости от длины кода.
Go to the top of the page
 
+Quote Post

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

 


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


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