Внедрение управления трафиком HTB, NetEM и TBF одновременно

Я работаю над утилитой bash, которая будет использовать несколько аспектов утилиты командной строки tc Linux для эмуляции различных сетевых условий. Я успешно сконструировал несколько иерархий qdisc, по одной для управления пропускной способностью HTB, задержкой NetEM и манипулированием пакетами, а также для управления скоростью TBF, а также комбинированные обработчики для HTB-NetEM и TBF-NetEM. единая структура, для случаев, когда мне нужно контролировать все эти факторы на одном соединении. Это то, что я до сих пор:

  sudo tc qdisc add dev $interface root handle 1:0 htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem  #netem args

Из-за моих меньших случаев я знаю, что проблема не в синтаксисе моих входных данных, а скорее в структуре моих tc qdiscs и классов. Когда я пытаюсь выполнить эти команды вместе с аргументами формирования скорости и пропускной способности (10 и 15 Мбит / с соответственно) на обоих портах Ethernet моего моста, не изменяется изменение пропускной способности теста iperf, в TCP или UDP. Любой совет будет принят во внимание.

Вот мои другие рабочие составные структуры, на случай, если они могут помочь:

HTB и NetEM:

  sudo tc qdisc add dev $interface root handle 1: htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

TBF и NetEM:

  sudo tc qdisc add dev $interface root handle 1:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

1 ответ

Решение

То, что вы хотите, это не HTB/TBF, а HFSC.

http://man7.org/linux/man-pages/man7/tc-hfsc.7.html

Вы можете прикрепить netem к листовым классам.

Вот пример сценария, с которого можно начать..

#!/bin/bash
tc qdisc add dev veth1 parent root handle 1: hfsc default 11
tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit
tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit
tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms
tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12

Это создает класс 100 Мбит, из которых 50 Мбит находится в классе по умолчанию (но может быть увеличен до 100 Мбит), в то время как другой класс допускает требование реального времени, так что 1500-байтовые пакеты должны покинуть очередь в течение 50 мс, максимальная скорость этого класса составляет 10 Мбит всегда.

Наконец, мы добавили лист qdisc в этот класс, который фактически задерживает пакеты, покидающие очередь, на 150 мс.

Трафик в класс реального времени выбирается на основании того, что он имеет атрибут исходного порта 22 (то есть весь трафик ssh).

Другие вопросы по тегам