Добрый день,
У меня следующая ситуация: 4 TCP потока данных с одной машины на другую. Каждый поток имеет свой собственный TCP-порт назначения. 4 потока имеют разные приоритеты: высокий, средний, низкий, объемный. High, Medium, Low генерируют 1,67 Мбит/с, а массовые генерируют 10 Мбит/с. (iperf3 используется для генерации трафика). Пакеты каждого потока помечаются соответствующей меткой DiffServ (DSCP), и эта метка используется для классификации трафика в qdisc HTB.
Цель: HTB qdisc должен быть настроен таким образом, чтобы в любое время поток с высоким приоритетом получал свои требуемые 1,67 Мбит/с, средний приоритет также гарантировал 1,67 Мбит/с, но с чуть более низким приоритетом, а остальной трафик должен был гарантировать 50 кбит/с. с. Каждый поток должен иметь возможность использовать весь канал, если он простаивает, и поток генерирует большую пропускную способность, чем указано изначально.
Генерация трафика:
Высокий приоритет:
iperf3 -c 192.168.88.254 -p 5150 -t 62 -b 1.67M -l 128 -S 224
Средний приоритет:
iperf3 -c 192.168.88.254 -p 5160 -t 62 -b 1.67M -l 4K -S 160
Низкий приоритет:
iperf3 -c 192.168.88.254 -p 5170 -t 62 -b 1.67M -l 4K -S 96
Масса:
iperf3 -c 192.168.88.254 -p 5180 -t 62 -b 10M -l 4K -S 0
Конфигурация HTB qdisc
НИ="эт2"
AC="sudo /sbin/tc class add dev "
# Удалить предыдущие qdisc
sudo /sbin/tc qdisc del dev $NI root
# Добавить HTB от имени root с классом 40 по умолчанию для некатегоризированного трафика
sudo /sbin/tc qdisc add dev $NI корневой дескриптор 1: htb по умолчанию 40
sudo /sbin/tc class add dev $NI parent 1: classid 1:1 скорость htb 3,5 Мбит ceil 1000 Мбит
# поток с высоким приоритетом DSCP 224 - 1110 0000 - 0xE0
$AC $NI родительский 1:1 classid 1:10 скорость htb 1,7 Мбит ceil 1000 Мбит prio 1
# поток со средним приоритетом
$AC $NI родительский 1:1 classid 1:20 скорость htb 1,7 Мбит ceil 1000 Мбит prio 2
# поток с низким приоритетом
$AC $NI родительский 1:1 classid 1:30 скорость htb 50kbit ceil 1000mbit prio 3
# массовый поток
$AC $NI родительский 1:1 classid 1:40 скорость htb 50kbit ceil 1000mbit prio 4
# Добавляем фильтры для классификации пакетов на основе метки dscp
# высокий приоритет DSCP 224 - 1110 0000 - 0xE0
sudo /sbin/tc filter add dev $NI протокол ip parent 1: prio 1 u32 match ip tos 0xE0 0xff flowid 1:10
# средний приоритет DSCP 160 - 1010 0000 - 0xA0
sudo /sbin/tc filter add dev $NI протокол ip parent 1: prio 2 u32 match ip tos 0xA0 0xff flowid 1:20
# низкий приоритет DSCP 96 - 1100 0000 - 0x60
sudo /sbin/tc filter add dev $NI протокол ip parent 1: prio 3 u32 match ip tos 0x60 0xff flowid 1:30
# массовый DSCP 0 - 0000 0000 - 0x00
sudo /sbin/tc filter add dev $NI протокол ip parent 1: prio 4 u32 match ip tos 0x00 0xff flowid 1:40
Трафик классифицируется правильно. Я вижу, что соответствующие счетчики в статистике класса tc растут. Я перепроверял это несколько раз.
Проблема:
Эта конфигурация правильно распределяет пропускную способность для потоков с высоким и средним приоритетом. Low prio и bulk тоже получают свои 50кбит. Однако, Я не могу протолкнуть ссылку больше, чем значение, указанное в корне класс1:1 как ставка то есть 3.5мбит.
В каждой статье и мануале по HTB, которые я читал, указывалось, что параметр «рейт» — это минимальный гарантированный курс к классу, а «кейл» — максимальная сумма, которую он может получить. В моем случае кажется, что «скорость» ограничивает ссылку указанным значением. Это определенно не желаемое и ожидаемое поведение.
Если я установлю для параметра «скорость» корневого класса то же значение, что и для «ceil», то есть 1000 Мбит, приоритизации не будет, и доступная пропускная способность будет разделена поровну между всеми потоками. Это нежелательное поведение, так как в случае колебаний доступной полосы пропускания первоначальный трафик станет менее 1,67 Мбит/с.
Я неправильно понял значение параметра «скорость» в корневом классе? Эта проблема как-то связана с другими параметрами HTB, такими как «квантовый»? Я также заметил, что каждый класс имеет отрицательное количество токенов при передаче данных. Это плохо? Если да, то какие параметры я должен настроить и как?
Заранее спасибо!