|
|
  |
STM32F4 + lwIP, Согласование пропускной способности Ethernet |
|
|
|
Jul 1 2015, 04:24
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071

|
Отлаживаю модем для удлинения Ethernet соединения. Пропускная способность порта Ethernet 100 Мб/сек, пропускная способность модема 1 Мб/сек. Схема работает следующим образом: Ethernet фрейм попадает в драйвер lwIP, здесь я его перефатываю и отправляю в модем (вместо стека lwIP), на втором конце такой же модем принимает этот фрейм - кладу его в драйвер lwIP (как будто он пришел со стека lwIP) и дальше он попадает в порт Ethernet. Для тестирования на обоих концах подключены компьютеры. Пинги проходят, файлы передаются. Запускаю на обоих компьютерах утилиту jperf, тестирую пропускную способность TCP соединения. Несколько секунд работает нормально (1 Мб/сек), затем скорость падает почти до нуля, через несколько секунд возникают небольшие увеличения пропускной способности (порядка 100 кБит/сек). Складывается впечатление, что отправляющий комп не получает вовремя подтверждения сегментов и делает паузы. После перезапуска всей схемы картина повторяется. Подскажите, в какую сторону копать?
|
|
|
|
|
Jul 1 2015, 06:03
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(TolikG @ Jul 1 2015, 07:24)  .. Подскажите, в какую сторону копать? Просмотрите обработчики по таймерам. Там не все состояния прописаны. Такое очучение было, что кто-то специально выкинул пару-тройку строк из обработки состояния канала. Это правда наверное ближе к реплике Голикова... По поводу заминки в переходнике - думаю надо ещё обрабатывать флаг быстрой передачи, в стэке TCP и возможно глянуть в сторону SNMP как управляющего слоя соединения.
|
|
|
|
|
Jul 1 2015, 08:10
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071

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

Местный
  
Группа: Свой
Сообщений: 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 проверьте, есть у вас такое?
|
|
|
|
|
Jul 2 2015, 04:08
|
Частый гость
 
Группа: Свой
Сообщений: 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
Причина редактирования: ,бездумное цитирование, форматирование
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|