Назад | Перейти на главную страницу

Неожиданное поведение планировщика HTB, трафик с низким приоритетом, нехватка трафика с высоким приоритетом

Я работаю над обеспечением низкой задержки для 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 и блокировкой высокоприоритетного трафика по какой-то причине. Таким образом, когда скорость рассчитывается для моего высокоприоритетного трафика, она каким-то образом оказывается выше, чем ее потолок.

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

Спасибо заранее за вашу помощь.