Existe uma disciplina de fila tc, DRR (Dificite Round Robin).
Ele tem os mesmos recursos, como o HTB, mas ao invés de usar buckets, cheios de tokens, ele apenas atribui a cada fila algum Dificit Counter. No pacote de envio DC é diminuído pelo tamanho do pacote. Se o DC for menor que o tamanho do pacote, o DC será aumentado pelo quantum da fila e a próxima fila será processada. Assim, ele pode dividir o tráfego de saída em alguma proporção, sem conhecer a largura do canal (o que é necessário para o HTB). Consulte o link
Configuração: dois hosts, 172.16.1.1 e 172.16.1.2.
No primeiro host, estamos ouvindo o tráfego:
nc -l 8111
nc -l 8112
No segundo host, verificamos a velocidade:
pv /dev/zero | nc 172.16.1.1 8111
pv /dev/zero | nc 172.16.1.1 8112
Agora a velocidade é igual (pv é uma utilidade que permite medir a velocidade de transferência de dados por meio de pipeline). Adicione DRR no segundo host (o HTB no topo é usado para emular os limites reais de velocidade do canal):
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
A velocidade permanece igual :( O que estou fazendo errado?