Use integral scores to select stream suppliers
This commit is contained in:
1 parent
83c652a810
commit
2cc9834e4c
5 files changed
+105
-39
No files matched your search
+16
-5
@@ -261,7 +261,7 @@ DOWN закрывает выдачи соответствующей сессии
|
||||
Дедупликация — по (stream key, batch_seq, subblock), независимо от handles.
|
||||
При перекрытии качество поставщиков учитывается отдельно, но блок потребителю выдаётся один раз.
|
||||
При явном отказе разрешено одновременно восстанавливать несколько субпотоков.
|
||||
Точная задержка обычного переноса и гистерезис задаются настройками; небольшое колебание RTT не запускает перестройку.
|
||||
Точная задержка обычного переноса и гистерезис задаются настройками; небольшое колебание оценки не запускает перестройку.
|
||||
|
||||
9. Пути и защита от циклов
|
||||
|
||||
@@ -336,8 +336,12 @@ INFO_RESP также сообщает число свободных исходя
|
||||
Используются route_connectivity, sock_match/NCD и метрики существующих соединений; второй адресный probe-движок не создаётся.
|
||||
Прямая доступность — UNKNOWN/REACHABLE/UNREACHABLE с временем замера, а не вечный boolean.
|
||||
|
||||
Порядок выбора: доступный субпоток/индекс и отсутствие цикла; затем проблемы доставки и RTT;
|
||||
далее устойчивость набора поставщиков, совпадение промежуточных узлов и число хопов.
|
||||
После проверки доступного субпотока/индекса и отсутствия цикла минимизируем интегральную оценку в миллисекундах:
|
||||
score_ms = RTT_цепочки_до_поставщика + 2 * RTT_до_поставщика + 3 * hop_count + problem_penalty_ms
|
||||
hop_count включает последний переход от поставщика к получателю; для прямого получения у автора равен 1.
|
||||
problem_penalty_ms = min(1000, доля_поздних_блоков * 1000 + (были_остановки ? 10 : 0)), с округлением вниз до мс.
|
||||
Текущая остановка или lag > 500 мс дают штраф 1000 мс; неизвестные метрики дают 0, неизвестный RTT — бесконечную оценку.
|
||||
При равенстве оценок выбираем меньше общих узлов с остальными путями, затем меньший ID поставщика.
|
||||
Стремимся получить n субпотоков, хотя k достаточно для decode.
|
||||
При возможности не более r субпотоков от одного поставщика: потеря его при получении всех n оставляет не менее k.
|
||||
При r=0 такой защиты нет; при недостатке кандидатов ограничение ослабляется с отражением устойчивости в статусе.
|
||||
@@ -607,10 +611,17 @@ Stop/destroy выполняются по правилам ядра, вне callb
|
||||
RTT цепочки относится к этому пути; смена фактического пути DATA делает старое измерение неизвестным,
|
||||
новая проба обновляет RTT соответствующей активной выдачи. Невыбранные снимки истекают через 60с.
|
||||
Первый поставщик запрашивается с конца; остальные стартуют с его проверенного N, даже если k уже позволили выдать пачку.
|
||||
Поиск учитывает доступную старую позицию, запрет LOOP, проблемы/RTT, лимит r при наличии альтернатив и общие узлы пути.
|
||||
Поиск учитывает доступную старую позицию, запрет LOOP и лимит r при наличии альтернатив.
|
||||
Оценка поставщика в мс: RTT цепочки до поставщика + 2 * RTT до поставщика + 3 * hops + штраф проблем (0..1000 мс).
|
||||
hops = path.count: путь INFO содержит автора/поставщика, последний переход к получателю добавляет один hop.
|
||||
Штраф: доля поздних блоков за 60с * 1000 мс + 10 мс при остановках в истории, округление вниз, максимум 1000 мс;
|
||||
текущая остановка или lag > 500 мс сразу дают 1000 мс. Неизвестные метрики не дают штрафа, неизвестный RTT даёт UINT64_MAX.
|
||||
Меньшая оценка лучше; при равенстве выбираются меньше общих узлов путей, затем меньший ID поставщика.
|
||||
Более новый индекс повторно проверяется свежим INFO/SUBSCRIBE: старое объявление last не является вечным верхним пределом live-потока.
|
||||
Обычно переносится один субпоток; новая выдача перекрывает старую и заменяет её только после проверенного DATA и догоняющего cursor.
|
||||
По умолчанию: подтверждение улучшения 2с, удержание поставщика 5с, RTT-гистерезис 20мс; параметры доступны через stream_selection_configure.
|
||||
По умолчанию: подтверждение улучшения 2с, удержание поставщика 5с, гистерезис оценки 20мс; параметры доступны через stream_selection_configure.
|
||||
Перенос сравнивает ту же оценку по фактическим метрикам текущей выдачи и INFO альтернативы;
|
||||
распределение для FEC допускает ухудшение оценки не более гистерезиса. Логи выбора/переноса показывают оценку и её составляющие.
|
||||
Новая выдача без достаточного продвижения отменяется через 5с, старая остаётся. CLOSED/DOWN восстанавливают несколько отсутствующих субпотоков.
|
||||
При отсутствии decode-прогресса 5с, недостатке работающих субпотоков и наличии более новой истории возможен явный restart с конца;
|
||||
пропущенный диапазон передаётся потребителю GAP, кольцо/downstream сохраняются. Сам по себе простой источника restart не вызывает.
|
||||
|
||||
Reference in new issue
Block a user