Всем привет!
Завел я на своей кастомной плате OpenWRT. На плате 2 Ethernet 100Мбит, объединенные в мост. Все работает на малых скоростях, но как только начинаю тестировать скорость передачи по мосту или перекачивать большие файлы, вся система умирает.
Тестировал iperf3:
- 10Мбит/полный дуплекс - норм, TCP и UDP по 9,5Мбит дают.
- 100Мбит/полный дуплекс - UDP прокачивает 95Мбит/с, TCP кладет систему
- 100Мбит/полудуплекс - UDP прокачивает 95Мбит/с, TCP - 75Мбит
На больших скоростях загруз проца почти 100 (95% обработка sirq)
Здоровенный лог падения приложу, если надо, но суть в том, что переполняется очередь отправки:
WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:303 dev_watchdog+0x198/0x224()
NETDEV WATCHDOG: eth0 (fec): transmit queue 0 timed out
P.S. Как я понял, проблема эта давняя, но нигде не могу найти нормального решения. Размеры очереди и обрезку кадров в драйвере менял - не помогло. Спасает только ограничение скорости да изменение дуплексности, но 10 Мбит или полудуплекс не хочется оставлять(плата тянет где-то 30Мбит).