Рейтинг:0

Формирование трафика tc с помощью HTB и CQB вызывает несоответствия интервалов передачи пакетов

флаг hk

Проблема: когда tc HTB или CQB используются для формирования трафика, первые два пакета, которые отправляются после некоторого промежутка времени, отправляются друг за другом, как записано в журнале pcap. У меня есть промежуточный компьютер с Ubuntu 18.4 с включенной переадресацией по сети. Я запускаю tc с HTB, чтобы формировать трафик, чтобы иметь постоянный битрейт на выходном порту. Клиент запрашивает фрагменты с переменными размерами с сервера. Сервер отправляет закодированные данные передачи фрагмента с промежутком 200 мс между каждым фрагментом клиенту. В моей установке с промежуточным компьютером эти пакеты проходят через формирователь трафика на промежуточном компьютере для получения фиксированной скорости передачи 500 кбит/с. Поскольку я отключаю разгрузку (TSO и GRO), каждые n байтов разбиваются на кадры с помощью pcap. Большинство пакетов 1448B имеют временной интервал, близкий к 24,224 мс, что ожидается при скорости 500 кбит/с.

Проблема: несмотря на то, что кадры поступают в последовательности, временной интервал их поступления не соответствует. Второй большой пакет (1448B) после промежутка в 200 мс всегда идет почти впритык к первому пакету. Последний пакет в чанке (654B) приходит с задержкой (24,224 мс вместо 10,464 мс в примере на прикрепленном рисунке) Скрин тайминга Временные промежутки между пакетами.

Команда TC с HTB:

tc qdisc del dev enx00e04c080ecf root 2> /dev/null > /dev/null
tc qdisc add dev enx00e04c080ecf root handle 1:0 htb по умолчанию 2
tc class add dev enx00e04c080ecf parent 1:1 classid 1:2 htb rate 500kbit ceil 500kbit Burst 10 cburst 10 prio 2
tc filter добавить dev enx00e04c080ecf протокол ip parent 1:0 u32 match ip dst 192.168.2.103 flowid 1:2

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

Я пробовал разные варианты в команде tc Я также пытался использовать CQB - команда ниже Справка : https://lartc.org/lartc.html#AEN2233

Наблюдение: уменьшение Burst = 10 немного увеличивает разрыв между первым и вторым пакетом. тк с CQB:

tc qdisc del dev enx00e04c080ecf root 2> /dev/null > /dev/null
tc qdisc add dev enx00e04c080ecf root handle 1: cbq avpkt 5000 пропускная способность 10 Мбит
tc class add dev enx00e04c080ecf parent 1: classid 1:1 cbq rate 500kbit выделение 5000 prio 5 ограниченный изолированный
tc class add dev enx00e04c080ecf parent 1:1 classid 1:10 cbq rate 500kbit allot 5000 prio 1 avpkt 5000bounded
tc class add dev enx00e04c080ecf parent 1:1 classid 1:20 cbq rate 500kbit allot 5000 avpkt 5000 prio 2
tc filter добавить dev enx00e04c080ecf протокол ip parent 1:0 u32 match ip dst 192.168.2.103 flowid 1:10
tc filter add dev enx00e04c080ecf parent 1: протокол ip prio 13 u32 match ip dst 0.0.0.0/0 flowid 1:20

Ответить или комментировать

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