Я работаю над обеспечением низкой задержки для UDP-трафика на уровне домашнего шлюза. На этом домашнем шлюзе у меня есть два типа трафика, TCP и UDP, и я гарантирую дифференцированный подход с помощью HTB. Пропускная способность, которую я тестирую, равна 1 Мбит / с (таким образом, он подключен к эмулированному каналу ADSL 1 Мбит).
Я использую следующую конфигурацию:
tc qdisc add dev br0 handle 1: root htb default 15
tc class add dev br0 parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit
tc class add dev br0 parent 1:1 classid 1:14 htb rate 200kbit ceil 1000kbit prio 1
tc class add dev br0 parent 1:1 classid 1:15 htb rate 10bit ceil 1000kbit prio 2
tc filter add dev br0 parent 1: protocol ip u32 match ip tos 0xb8 0xff flowid 1:14 (UDP)
tc filter add dev br0 parent 1: protocol ip u32 match ip tos 0x00 0xff flowid 1:15 (TCP)
tc qdisc add dev br0 parent 1:14 handle 20: sfq limit 40
tc qdisc add dev br0 parent 1:15 handle 50: pfifo limit 1000
Чтобы увидеть, как взаимодействует трафик, для UDP я использую тип трафика «лестница», поэтому я начинаю со скорости 0 бит / с и увеличиваю трафик каждые десять секунд на 100 кбит / с. Когда я достигаю 1 Мбит / с, я уменьшаю каждые 10 секунд на 100 Кбит / с, пока не достигну нуля.
Наряду с этим у меня есть TCP-трафик, либо загрузка файла, либо простой iperf (без какого-либо влияния на наблюдаемое поведение).
Обычно в большинстве случаев я получаю ожидаемое поведение. Таким образом, я прекрасно вижу разделение трафика TCP / UDP и тенденцию «лестницы» UDP. Кроме того, трафик UDP берет верх над TCP (но TCP все еще может отправлять - и тенденция противоположна UDP, поэтому сначала уменьшается, а затем увеличивается).
Однако время от времени я вижу, как TCP полностью берет на себя трафик UDP на пару секунд. Это происходит от 1 до 3 раз во время теста. Обычно это происходит хотя бы один раз, когда битрейт UDP уже уменьшается (примерно за 30 секунд до достижения 0), TCP-трафик полностью берет верх на пару секунд (3-5 секунд). Я действительно не могу понять это поведение, потому что кажется, что трафик UDP не может отправлять, но он не должен быть выше своего потолка, поскольку его битрейт уже уменьшается.
Я думаю, что это как-то связано с планированием HTB и блокировкой высокоприоритетного трафика по какой-то причине. Таким образом, когда скорость рассчитывается для моего высокоприоритетного трафика, она каким-то образом оказывается выше, чем ее потолок.
Я пробовал изменять разные параметры (скорость, скорость, скорость), но не вижу никаких улучшений.
Спасибо заранее за вашу помощь.