Собственно для tc есть queue discipline DDD(Dificite Round Robin) .
Вкратце - умеет то же, что HTB, но вместо того, чтобы заполнять корзины токенами с определённой скоростью, потом их оттуда вынимать и т. д., просто присваивает каждой каждой очереди некоторый Dificit Counter, при отправке пакета - уменьшает его на размер пакета. Если DC меньше размера пакета, увеличивает размер DC на заданный для очереди quantum и переходит к следующей. Таким образом, можно делить исходящий траффик в некотором отношении, не зная заранее ширину канала(что требуется для HTB). Подробнее: http://www.unix.com/man-page/linux/8/tc-drr/
Setup: две машины, 172.16.1.1 и 172.16.1.2.
На первой - слушаем траффик:
nc -l 8111
nc -l 8112
На второй - проверяем скорость:
pv /dev/zero | nc 172.16.1.1 8111
pv /dev/zero | nc 172.16.1.1 8112
Пока скорость равная(pv - позволяет мерить скорость через pipeline). Добавляем на второй машине шейпер(сверху присобачен HTB для имитации ограничения скорости канала):
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc qdisc add dev eth0 parent 1:1 handle 2: drr
tc class add dev eth0 parent 2: classid 2:1 drr quantum 600
tc class add dev eth0 parent 2: classid 2:2 drr quantum 1400
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 8111 0xffff classid 2:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 8112 0xffff classid 2:2
Скорость остаётся равной :( Куда копать?