Linux qos: tc qdisc DRR não funciona

4

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?

    
por Selivanov Pavel 15.09.2013 / 12:44

2 respostas

5

Resposta: O DRR não elimina pacotes em si. Para obter o comportamento desejado, adicione qdiscs filho às classes derivadas de DRR como pfifo limit 50 para fazer com que o qdisc filho solte os pacotes em vez de enfileirá-los de forma eficaz indefinidamente. A solução foi encontrada aqui: thread linux.org.ru

Referência: man tc-drr

NOTES This implementation does not drop packets from the longest queue on overrun, as limits are handled by the individual child qdiscs.

    
por 20.09.2013 / 08:11
3

drr é um scheduler , você ainda tem que alocar largura de banda diferente para classes com htb. Eu acho que você, embora especificando quantum como 600 e 1400, dará uma proporção próxima de 1: 2. Na verdade não será. Você pode chegar perto dessa proporção em sua configuração somente em caso de congestionamento, por exemplo crie vários fluxos UDP e, em seguida, meça dois em questão, mas ainda não é o que você espera.

    
por 17.09.2013 / 15:38

Tags