Вопрос или проблема
У меня есть коммутатор на 100 Мбит, подключенный к трем камерам на 100 Мбит и компьютеру на 100 Мбит. Ограничение пропускной способности вызвано используемыми кабелями и не может быть изменено для решения проблемы, поскольку я работаю в промышленной/автомобильной среде.
┌------------ Камера
Компьютер-----Коммутатор---------- Камера
└------------ Камера
Камеры транслируют RTP через UDP. Все камеры настроены на использование постоянной скорости передачи данных по 24 Мбит/с каждая.
Диспетчер задач подтверждает, что используется ожидаемая пропускная способность:
Когда я запускаю анализ IO в Wireshark, я вижу, что, хотя средняя пропускная способность ниже 100 Мбит, есть всплески, превышающие 100 Мбит, что приводит к потере пакетов и невозможности декодирования потока.
Эти всплески возникают от камер, которые захватывают изображение каждые 33 мс и отправляют его. Затем они остаются бездействующими до следующего захвата изображения.
В красной рамке мы видим, что достигнут предел 100 Мбит, и пакеты теряются. Мы не можем увидеть это здесь, но анализ потока RTP показывает это.
Все камеры и коммутатор поддерживают управление потоком (https://en.wikipedia.org/wiki/Ethernet_flow_control). Я ожидал, что коммутатор будет использовать управление потоком для “сглаживания” сетевого трафика, избегая этой проблемы.
- Неправильно ли я понимаю управление потоком?
- Существует ли другой механизм, который может помочь?
Изменение транспортного протокола с RTP на что-то другое невозможно. Переключение на гигабит не возможно.
.
Ответ или решение
Проблема с неожиданным поведением Ethernet Flow Control в вашем случае действительно может вызвать путаницу. Давайте разберемся в деталях, почему вы сталкиваетесь с этой проблемой и что можно предпринять.
Теория
Ethernet Flow Control — это механизм на канальном уровне, который предназначен для управления потоком данных между узлами в сети, чтобы избежать перегрузки. Он использует PAUSE-кадры, чтобы временно приостанавливать передачу данных с одного устройства на другое, если принимающее устройство не успевает обрабатывать входящий поток. Однако, у этого механизма есть свои ограничения и нюансы работы:
-
Точечное управление: Flow Control обычно работает на уровне точка-точка. Если у вас несколько устройств, подключенных к одному коммутатору, и одно из них забивает канал, PAUSE-кадры могут не помочь эффективно распределить ресурс среди всех устройств.
-
Буферизация в коммутаторе: Коммутаторы перераспределяют трафик на основе своих буферов. Если увеличивается нагрузка на один из портов, буфер может заполниться до того, как сработает Flow Control. Это часто становится причиной потери пакетов.
-
Ограниченное управление трафиком: Flow Control работает на уровне Ethernet, и не всегда обеспечит идеальную работу для протоколов верхнего уровня, таких как UDP, который по своей природе не имеет механизмов обеспечения доставки.
-
Спайки трафика: Аппараты, такие как камеры в вашем случае, могут создавать внезапные всплески трафика из-за периодической передачи больших объемов данных. Даже если средняя полоса пропускания не превышает лимит, мгновенные пики могут это сделать.
Пример
В вашем случае, три камеры по 24 Мбит/с каждая создают совокупный трафик в 72 Мбит/с при постоянной нагрузке. Однако, поскольку камеры передают данные с интервалом в 33 мс, могут возникать пики передачи, когда все три камеры пытаются передать данные одновременно. Эти всплески могут превышать возможности вашего 100 Мбит/с канала, что приводит к потере пакетов, так как коммутатор не имеет достаточно возможностей для буферизации всего входящего трафика одновременно.
Применение
Что можно предпринять в данном случае?
-
Настройка QoS (Quality of Service): Внедрение QoS позволит приоритизировать трафик и более эффективно управлять существующими ресурсами. Вы сможете задать более высокий приоритет для RTP трафика, что снизит вероятность потерь пакетов.
-
Регулирование IP-очередей и управление трафиком: Исследуйте возможность конфигурировать очереди на уровне ваших устройств, если они поддерживают более продвинутые функции трансфера данных. Это может включать увеличение размера очереди и изменение алгоритмов обработки пакетов.
-
Использование более продвинутых протоколов: Хотя изменение RTP-протокола невозможно, можно попробовать использовать ассистивные протоколы или фильтры, которые минимизируют вероятность передачи данных одновременно от всех камер.
-
Рассмотрите использование распределенных конфигураций: Если возможно, распределите нагрузку, задействовав другую сеть или дополнительное сетевое оборудование, чтобы разгрузить существующий канал.
-
Изменение конфигурации оборудования: Проверьте все доступные настройки оборудования для оптимизации работы с потоками данных. Это может включать настройку размера буферов в камерах и коммутаторах.
-
Оптимизация камер: Измените настройки камер, если это возможно, чтобы они не передавали данные одновременно. Это может включать программирование их на передачу с небольшими временными задержками друг относительно друга.
Заключение
Ваше понимание Flow Control нуждается в корректировках. Он может быть полезен, но не решит все проблемы, особенно с UDP-трафиком и в условиях, когда несколько устройств конкурируют за ограниченный канал. Абстрактно, лучшие результаты можно получить из комбинации различных методов контроля качества сервиса, буферизации и распределения трафика. Это позволит стабилизировать поток данных и минимизировать потери пакетов в вашем конкретном сценарии.