Мы исследуем проблему с нашим комплектом, который представляет собой IP-камеру под управлением Busybox Linux на SoC Ti-Davinci.
На одном конкретном сайте идет большой сетевой трафик (который мы не контролируем), и одна система рассылает рассылку широковещательных пакетов (чтобы 255.255.255.255
) каждые ~ 50 мс без остановки. Он не отправляет много данных, но очень устойчив.
Это странно влияет на нашу систему - если система запускается, перезапускается или сеть перезапускается (ifdown ... ifup
и т. д.) пока этот трафик присутствует, сетевой интерфейс не работает должным образом. Он утверждает, что up
но просто сидит там, регистрируя тысячи ошибок переполнения / кадра Rx. Мы не получаем ничего успешно адресованного нам (PING и т. Д.), И ничего не можем отправить, PING терпят неудачу, как будто они пропали без вести (они отображаются как успешно переданные, но никогда не покидают нас), а не активно отклоняются / упал. Сетевой драйвер, кажется, считает, что он включен и работает нормально, но ничего не входит и не выходит.
Если мы удаляем трафик и запускаем / перезапускаем / циклически запускаем сеть, интерфейс запускается и работает отлично - если мы затем повторно вводим трафик, мы НЕ видим нарастания переполнений / ошибок кадров.
Поскольку мы являемся небольшой встроенной системой, работающей под управлением Busybox, в нашем распоряжении нет ни мощности, ни полного набора сетевых инструментов для некоторых из наиболее сложных предложений, найденных во время поиска (увеличение буферов Rx было основным, что я нашел).
Скорее, я ищу предложения по основной причине и / или предложения о том, с чего начать копаться, чтобы попытаться предотвратить это. Это может быть так же просто, как настройка параметров ядра или восстановление сетевого драйвера - ответы на открытке!
Если требуется дополнительная информация, спросите - это не вызывает никаких ошибок, кроме статистики Rx Overflow / Frame в ifconfig
так что ничего не стоит размещать.
Что ж, похоже, я нашел ответ - в драйвере ti-davinci EMAC была ошибка:
Список рассылки Davinci-Linux ноты:
Указанная фиксация добавляет проверку, в порядке ли связь с оператором связи. Если ссылка не в порядке, skb освобождается и новый дескриптор dma не добавляется в канал rx dma. Это вызывает проблемы во время инициализации, когда статус оператора связи еще не обновлен. Если получено много пакетов, в то время как netif_carrier_ok возвращает false, все дескрипторы dma освобождаются и передача rx dma останавливается.
Чтобы воспроизвести ошибку, заполните ping доску davinci во время выполнения
ifconfig eth0 down && ifconfig eth0 up
на борту.После этого путь rx перестает работать, и значение переполнения, сообщаемое ifconfig, увеличивается.
Мы создали и протестировали это устройство, теперь устройство может с радостью выдерживать более 2500 пакетов в секунду, вымываемых против него, без каких-либо побочных эффектов, поэтому почти наверняка оно исправлено - раньше требовалось всего около 50 пакетов в секунду, чтобы вывести его из строя.