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

Одновременная реализация управления трафиком 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

Вам нужен не 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).