hfsc

Алгоритм позволяющий проводить ограничение трафика в 2 этапа.

Формат команды:
Задать root класс для интерфейса:
tc qdisc add dev $dev root handle $ID: hfsc [default $classID ]

Подключить соответствующие иерархические данные:
tc add class dev $dev parent parentID classid $ID hfsc [ [ rt SC ] [ ls SC ] | [ sc SC ] ] [ ul SC ]

где:

SC := [ [ m1 BPS ] [ d SEC ] m2 BPS
m1 : slope of first segment (ограничение в начальный период времени)
d : x-coordinate of intersection (длительность периода m1)
m2 : slope of second segment (ограничение во второй период)

Альтернативный формат:

SC := [ [ umax BYTE ] dmax SEC ] rate BPS
umax : maximum unit of work
dmax : maximum delay\\
rate : rate\\

rt - real time (реальное время) нижняя величина пропускной способности. (может быть только на листьях дерева)
ls - link sharing (разделяемая полоса) полоса которая допустима с учетом заимствования из равных классов
ul - upper limit (верхний лимит) величина которую трафик не превысить
sc - в случае равенства параметров rt и ls, что бы избежать повторения можно указать их как параметр sc.
rt и ls - Дополнение. Если есть превышение по классу ls и в равном классе возникает необходимость в классе rt производится заимствование из класса ls для обеспечения требований класса rt. Таким образом можно определить поведение класса rt как гарантированное обслуживание. Необходимо учитывать, что суммарное rt не может превышать емкости родительского класса.
Альтернативный формат используется для манипуляции пакетом и задержкой с соответствующим объемом.

При формировании дерева не забывать формировать очереди в классах которые пропускают пакеты.

Пример: Хороший пример приведен Тут