Модернизация ретрансляций SRT: эксперименты с имитацией потокового вещания
Новый алгоритм ретрансляции SRT — механизм автоматического повторного запроса (ARQ) — показывает многообещающие результаты и отличается высокой эффективностью. Он требует меньше ресурсов на повторную передачу, улучшая потоковую онлайн-трансляцию в перегруженных сетях.

Модернизация ретрансляций SRT: эксперименты с имитацией потокового вещания

Новый алгоритм ретрансляции SRT — механизм автоматического повторного запроса (ARQ) — показывает многообещающие результаты и отличается высокой эффективностью. Он требует меньше ресурсов на повторную передачу, улучшая потоковую онлайн-трансляцию в перегруженных сетях.

Введение

SRT (Secure Reliable Transport) — транспортный протокол с открытым исходным кодом, используемый для потоковой трансляции видео, аудио в онлайн-режиме со сверхнизкой задержкой (менее секунды), а также для передачи больших объемов данных.

Во время прямой трансляции SRT поддерживает постоянную сквозную задержку, что позволяет воссоздавать параметры сигнала живого потока на стороне получателя, уменьшая потребность в буферизации. Когда пакеты передаются от источника к получателю, SRT обнаруживает и адаптируется к сетевым условиям в реальном времени между двумя конечными точками. Это помогает компенсировать джиттер и колебания полосы пропускания из-за перегрузки внутри нестабильных сетей.

SRT предлагает различные механизмы восстановления после ошибок для минимизации потерь пакетов, среди которых основным методом выступает автоматический повторный запрос (ARQ). Он хорошо подходит для потоковой передачи видео по IP-сетям, поскольку требует меньшей пропускной способности, чем другие методы исправления ошибок. При использовании ARQ, когда получатель обнаруживает отсутствие пакета, он посылает отправителю предупреждение, содержащее запрос на ретрансляцию.

Начиная с версии v1.4.2 библиотека SRT предоставляет возможность выбора между двумя алгоритмами повторной передачи:
  • Агрессивный алгоритм (по умолчанию до SRT v1.4.4);

  • Новый эффективный алгоритм (представлен в SRT v1.4.2; по умолчанию — начиная с SRT v1.4.4).

Понимание автоматического запроса на повторение (ARQ) в SRT

Перед началом работы с ARQ отправитель SRT сохраняет все отправленные пакеты данных в своем буфере и ведет список потерянных.

Отправитель SRT присваивает последовательный порядковый номер каждому отправляемому пакету данных. При потоковой онлайн-передаче каждый пакет также получает метку, которая используется для определения того, может ли информация быть вовремя доставленной вышестоящему приложению (в этом случае ретрансляция имеет смысл) или уже слишком поздно для доставки пакета и его можно отбросить, чтобы избежать блокировки текущей передачи.

Отбрасывание пакетов

Механизм слишком позднего отбрасывания пакетов (TLPKTDROP) позволяет как отправителю, так и получателю отбрасывать любые пакеты, которые не могут быть вовремя доставлены главному приложению (в пределах указанной сквозной задержки). Если механизм TLPKTDROP определяет, что уже слишком поздно восстанавливать отсутствующий пакет, отправитель больше не передает его повторно. Получатель пропускает отсутствующие пакеты, продолжая при этом доставлять полученные главному приложению.

Обнаружение потерь

Приемник SRT периодически отправляет пакеты подтверждения (ACK), где содержится информация о полученных им пакетах данных. На основе ACK отправитель может удалить подтвержденные пакеты из своего буфера, а также убрать соответствующие порядковые номера (если они есть) из списка потерь. Ретрансляция удаленных пакетов невозможна (и не нужна).

По мере поступления непрерывного потока пакетов данных приемник SRT обнаруживает пробелы в порядковых номерах пакетов. Такой разрыв указывает на то, что один или несколько пакетов потеряны при передаче. Отрицательное подтверждение, инициированное потерей пакетов (NAK), немедленно отправляется получателем для уведомления отправителя о таких потерях.

Приемник SRT ведет учет всех потерянных пакетов, сохраняя их порядковые номера в списке. Эта информация требуется получателю для регулярной отправки отчетов о потерях (называемых «периодическими отчетами NAK»), чтобы уведомить отправителя о постоянном отсутствии потерянных пакетов.

Периодические отчеты NAK

Периодический отчет NAK содержит список всех пакетов, которые приемник SRT считает потерянными на момент отправки информации. Периодические отчеты NAK представляют собой контрольные пакеты, отправляемые с периодом (RTT + 4xRTTVar)/2, где минимальное значение составляет 20 м/сек, а RTT — экспоненциально взвешенное скользящее среднее отсчетов времени прохождения туда и обратно, наблюдаемых на стороне получателя (или «сглаженное» RTT), RTTVar — дисперсия в образцах RTT.

Когда пакет данных достигает приемника SRT, его прием может быть подтвержден отправкой специального пакета (ACK) отправителю. При прямых трансляциях периодические отчеты NAK отправляются чаще (минимум два раза за RTT) намеренно. Это делается для восстановления после возможной потери NAK (или предыдущего периодического отчета NAK), что может привести к увеличению задержки ретрансляции. Работа с задержкой менее секунды делает важной каждую миллисекунду, поэтому увеличение вероятности того, что отчет NAK достигнет отправителя, увеличивает шансы на восстановление потерь в рамках ограничений сквозной задержки.

Механизм периодических отчетов NAK включен по умолчанию для конфигурации прямой трансляции SRT.

Пакетная ретрансляция

После получения отрицательного подтверждения отправитель SRT сохраняет порядковый номер потерянного пакета (или пакетов) в списке потерь. Он отдает приоритет повторной передаче потерянных пакетов данных по сравнению с теми, которые должны быть переданы первично. Скорость передачи пакетов зависит от настроенного ограничения пропускной способности. Ретрансляция потерянного пакета может повторяться несколько раз, пока приемник SRT не подтвердит его получение или пока один из пиров не решит отбросить этот пакет. Если получатель SRT отбрасывает пакет, он выдает обычное подтверждение, чтобы предотвратить повторную передачу отправителем. Если подобное действие совершает отправитель SRT, он уведомляет получателя, отправляя запрос на отбрасывание.
Заказать спутниковое оборудование

Алгоритмы ретрансляции

Существует два основных алгоритма ретрансляции:

Алгоритм агрессивной ретрансляции

Исходный агрессивный алгоритм повторной передачи заставляет отправителя SRT планировать ретрансляцию пакета каждый раз, когда он получает отрицательное подтверждение (NAK).

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

Реальная цель получателя SRT с включенными периодическими отчетами NAK — увеличение шансов на уведомление отправителя о потере пакета. Поскольку сам пакет NAK может быть потерян во время передачи, периодические отчеты NAK отправляются не менее двух раз за RTT пути. Это увеличивает вероятность восстановления после потери, помогая как можно скорее обнаружить потерю пакета на стороне отправителя. Но такая интенсивная ретрансляция пакетов создает большие расходы, превышающие уровень потери пакетов внутри сети более, чем вдвое.

Если пропускная способность канала ограничена или на пути имеется перегрузка, могут возникнуть дополнительные затраты на повторную передачу. Чрезмерная ретрансляция усугубит перегрузку, что приведет к ситуации, когда обычные пакеты данных (включая те, которые ожидают в очереди отправителя для первой передачи) не смогут достичь места назначения. Это следует учитывать при настройке SRT, чтобы обеспечить достаточную пропускную способность для правильной работы, особенно если на пути есть конкурирующий трафик.

Эффективный алгоритм ретрансляции

Новый эффективный алгоритм повторной передачи оптимизирует использование полосы пропускания за счет уменьшения числа ретрансляций на потерянный пакет. Он принимает во внимание статистику SRT, чтобы определить, находится ли повторно переданный пакет в пути и может ли он вовремя достичь получателя, поэтому некоторые отчеты NAK игнорируются отправителем.

В эффективном алгоритме, как и в его агрессивном аналоге, первая попытка повторной передачи инициируется первым NAK, полученным отправителем. Затем отправитель SRT игнорирует все последующие отчеты NAK, полученные для конкретного пакета в течение периода, равного RTT — 4xRTTVar (рассчитывается от момента первой ретрансляции). Такой подход используется для всех последующих попыток повторной передачи одного и того же пакета.

Значение 4xRTTVar вычитается из RTT-адресного возможного уменьшения времени приема-передачи во время трансляции. Алгоритм передает пакет повторно, вместо ожидания следующего периодического отчета NAK.

Чтобы пакет ACK, отправленный получателем, достиг отправителя, требуется приблизительно RTT/2. Любой отчет о потере, полученный на стороне отправителя для уже повторно переданного пакета в течение периода времени приема-передачи, предположительно выступает отчетом о потере из «прошлого состояния» приемника SRT.

Тестирование алгоритмов ретрансляции на смоделирован­ных потоках

Тестирование алгоритмов ретрансляции включает несколько этапов:

Тестовая установка

Наборы данных были собраны при использовании лабораторной тестовой установки, показанной на рисунке, где Flip (хост-отправитель), а также Flop (хост-получатель) — это машины на базе CentOS 7 с установленным тестовым приложением SRT. Для внесения сетевых искажений использовался эмулятор сети LANforge CT910.
Тестовое приложение srt-xtransmit на стороне отправителя (A) генерирует фиктивную полезную нагрузку, отправляет ее по соединению SRT через эмулятор LANforge на сторону получателя (B). Сгенерированный поток, имеющий постоянный битрейт (CBR), равен 5 Мбит/сек или 10 Мбит/сек.

Пропускная способность ограничена 45 Мбит/сек, а время приема-передачи (RTT) занимает 20 м/сек. Используемые коэффициенты потери пакетов — 5% и 10%. Двунаправленный режим потери пакетов LANforge использовался для имитации потери в обоих направлениях для учета наихудшего сценария, когда могут быть потеряны не только данные, но и управляющие пакеты, содержащие значимую информацию протокола.

Версия SRT, оцениваемая в результате тестирования — v1.4.2. Начиная с этой версии оба алгоритма повторной передачи доступны в библиотеке SRT и могут быть настроены с помощью параметра сокета SRTO_RETRANSMITALGO. Во время тестирования для обоих алгоритмов были включены периодические отчеты NAK (по умолчанию для параметра сокета SRTO_NAKREPORT установлено значение «true»).

Параметр по умолчанию — 1 Гбит/сек, использовался как максимально допустимая пропускная способность, которая ограничивает использование SRT. Значения буферов были установлены на 1 Гбит как у отправителя, так и у получателя. Настройки применены для минимизации влияния на результаты тестирования.

Наборы данных со статистикой собраны с помощью сценариев lib-srt-utils для следующего диапазона задержек SRT: 0,5xRTT, 1xRTT, 1,5xRTT до 4,5xRTT, где xRTT означает «умножить на RTT». Таким образом, при RTT, установленном на 20 м/сек, диапазон задержки составлял 10 м/сек, 20 м/сек, 30 м/сек до 90 м/сек. Количество попыток составило одну на комбинацию параметров.

Результаты теста

На рисунке 1a показано процентное соотношение служебных данных повторной передачи, а также невосстановленных пакетов, в зависимости от задержки SRT и используемого алгоритма повторной передачи, когда потеря пакетов составляет 5%, а скорость отправки — 5 Мбит/сек. Рисунок 1b представляет собой увеличенное изображение невосстановленных пакетов, когда задержка SRT больше или равна 1,5xRTT. Синяя линия показывает результаты с использованием агрессивного алгоритма (когда SRTO_RETRANSMITALGO=0). Оранжевая линия отражает использование эффективного алгоритма (когда SRTO_RETRANSMITALGO=1). Пропускная способность канала равна 45 Мбит/сек, RTT — 20 м/сек для всех графиков.

Рис. 1а: Процент затраченных на повторную передачу ресурсов и невосстановленных пакетов для потери 5% и скорости отправки 5 Мбит/с

Рис. 1b: Увеличенный вид невосстановленных пакетов для потери 5% и скорости передачи 5 Мбит/с

Для каждого эксперимента показатели рассчитываются следующим образом:
  • Нагрузка на повторную передачу измеряется как процент повторно переданных пакетов данных (pktRetransTotal) по отношению к исходным пакетам данных (pktSentUniqueTotal), переданных отправителем SRT во время эксперимента.

  • «Процент невосстановленных пакетов» — это процент отброшенных приемником SRT и недоставленных вышестоящему приложению (pktRcvDropTotal) относительно исходных пакетов данных (pktSentUniqueTotal), переданных отправителем SRT во время эксперимента.
Из графиков и данных можно сделать следующие выводы:
  • По всем параметрам существует значительная разница в количестве повторно переданных пакетов между двумя алгоритмами. В среднем агрессивный алгоритм (SRTO_RETRANSMITALGO=0, синяя линия) производит в 1,71 раза больше ретрансляций, чем эффективный (SRTO_RETRANSMITALGO=1, оранжевая линия). Повторных передач в 1,77 раза больше в случае 5% потери пакетов (9,66% против 5,45% повторно переданных) и в 1,65 раза больше повторных передач в случае 10% потери пакетов (19,18% против 11,61% повторно переданных). При расчете среднего значения, точки данных, соответствующие задержкам SRT, равным 0,5xRTT, 1xRTT и 1,5xRTT, были исключены.

  • Процент невосстановленных пакетов показывает тенденцию к снижению для обоих алгоритмов по мере увеличения задержки SRT. Уровень невосстановленных пакетов достаточно высок для первых точек данных (когда задержка SRT равна 0,5xRTT и 1xRTT). Такого небольшого значения задержки недостаточно для того чтобы ни один из алгоритмов не восстановил потери. Однако процент невосстановленных пакетов быстро уменьшается от точки, где задержка SRT равна 1xRTT, до точки, где она составляет 1,5xRTT. Это говорит о том, что настройка такой задержки возможна, хотя рекомендуемая задержка SRT для общей настройки остается в 3−4 раза больше RTT.

  • Среднее количество невосстановленных пакетов немного выше у эффективного алгоритма. Однако в абсолютных значениях разница незначительна. Например, при задержке SRT 4xRTT с потерей пакетов 5% только 0,0066% пакетов SRT остаются невосстановленными и только 0,0540% с потерей пакетов 10%. Разница больше для задержек 1,5xRTT, 2xRTT и 2,5xRTT по сравнению с наблюдениями, где задержка SRT больше или равна 3xRTT. Это ожидаемо, поскольку агрессивный алгоритм пытается повторно переслать пакет каждый раз, когда отправитель получает отчет о потере, в то время как эффективный алгоритм может не иметь времени для повторной трансляции, если ранее повторно переданный пакет (с тем же порядковым номером) был потерян.
В этом тестовом примере использованы высокие значения потери пакетов для стресс-тестирования алгоритмов, которые применялись в обоих направлениях, поэтому могли быть потеряны не только пакеты данных (среди них — повторные передачи), но и контрольные пакеты со значимой информацией. Это означает, что оба алгоритма будут показывать высокую производительность в случае меньшей или однонаправленной потери. Чем выше вероятность последней, тем большее значение задержки следует использовать для потоковой передачи SRT.

Максимально допустимую пропускную способность, которая ограничивает использование протокола SRT, установили ​​на 1 Гбит/с, а размеры буферов получателя и отправителя — на 1 Гбит. Количество попыток повторной передачи потерянного пакета для агрессивного алгоритма никак не ограничивалось, в результате чего наблюдались более высокие уровни ретрансляций, более низкие — отброшенных пакетов. Поскольку пропускная способность канала была настроена достаточно высокой (45 Мбит/сек) для рассматриваемых скоростей отправки (5 Мбит/сек и 10 Мбит/сек), чрезмерные повторные передачи не вызывали перегрузки, увеличивая шансы на восстановление потерянных пакетов. Но в реальных сетях, где пропускная способность канала колеблется во времени, такого может не быть.

Выводы

Первый этап тестирования на смоделированных потоках подтвердил первоначальные предположения:
  • Новый эффективный алгоритм обеспечивает значительно меньших ресурсов на ретрансляцию, более эффективно использует доступную полосу пропускания.

  • Разница в количестве невосстановленных пакетов между двумя алгоритмами незначительна.

  • По сравнению с эффективным алгоритмом повторной передачи, агрессивный обеспечивает более высокую вероятность восстановления потери за счет более высокой пропускной способности.
Другая серия тестов проводилась с потоковой передачей онлайн-видео, а также использованием пары кодер/декодер в качестве отправителя и получателя SRT соответственно. Подтверждено, что наблюдаемое незначительное увеличение процента невосстановленных пакетов для нового эффективного алгоритма не влияет на качество восприятия зрителя.

Эффективный алгоритм лучше подходит для сетей с трудно предсказуемыми или неизвестными характеристиками — с высоким уровнем потери пакетов или ограниченной, сильно изменчивой пропускной способностью в короткие промежутки времени (например, беспроводных, сотовых и т. д.).

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

В следующей таблице представлено краткое сравнение алгоритмов повторной передачи и их показателей.

Приложение А. Технические характеристики тестовых машин

Приложение B. Графики

Рис. 2а: Процент затраченных на ретрансляцию ресурсов и невосстановленных пакетов для потери 5% и скорости отправки 10 Мбит/с

Рис. 2b: Увеличенный вид невосстановленных пакетов для потери 5% и скорости передачи 10 Мбит/с

Рис. 3а: Процент затраченных на ретрансляцию ресурсов и неоткрытых пакетов для потери 10% и скорости отправки 5 Мбит/с

Рис. 3b: Увеличенный вид невосстановленных пакетов для потери 10% и скорости передачи 5 Мбит/с

Рис. 4а: Процент затраченных на ретрансляцию ресурсов и невосстановленных пакетов для потери 10% и скорости отправки 10 Мбит/с

Рис. 4b: Увеличенный вид невосстановленных пакетов для потери 10% и скорости передачи 10 Мбит/с

Приложение C. Таблицы с результатами испытаний

Процент ресурсов, затраченных на ретрансляцию для агрессивного алгоритма повторной передачи (SRTO_RETRANSMITALGO=0)
Процент ресурсов, затраченных на ретрансляцию для эффективного алгоритма повторной передачи (SRTO_RETRANSMITALGO = 1)
Процент невостребованных пакетов для алгоритма агрессивной ретрансляции (SRTO_RETRANSMITALGO = 0)
Процент невостребованных пакетов для эффективного алгоритма ретрансляции (SRTO_RETRANSMITALGO = 1)
Процент ресурсов, затраченных на ретрансляцию для агрессивного алгоритма (SRTO_RETRANSMITALGO = 0), деленный на процент ресурсов, затраченных на повторную передачу для эффективного алгоритма (SRTO_RETRANSMITALGO = 1)
Разница в процентах невостребованных пакетов между эффективными (SRTO_RETRANSMITALGO = 1) и агрессивными (SRTO_RETRANSMITALGO = 0) алгоритмами повторной передачи
Разница в проценте невостребованных пакетов между эффективными (SRTO_RETRANSMITALGO = 1) и агрессивными (SRTO_RETRANSMITALGO = 0) алгоритмами повторной передачи, усредненными для потери пакетов