Linux qos: tc DRR qdisc não funciona

Linux qos: tc DRR qdisc não funciona

Existe a disciplina de fila tc DRR (Dificite Round Robin).

Ele tem os mesmos recursos do HTB, mas em vez de usar buckets cheios de tokens, ele apenas atribui a cada fila algum contador de déficit. No envio de pacotes, o DC diminui de acordo com o 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 saber a largura do canal (que é necessária para HTB). Verhttp://www.unix.com/man-page/linux/8/tc-drr/

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 é um utilitário que permite medir a velocidade de transferência de dados via pipeline). Adicione DRR no segundo host (HTB na parte superior é usado para emular 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 de errado?

Responder1

Resposta: O DRR não descarta pacotes por si só. Para obter o comportamento desejado, adicione qdiscs filhos às classes filhas DRR, para pfifo limit 50fazer com que o qdisc filho descarte pacotes em vez de enfileira-los efetivamente indefinidamente. A solução foi encontrada aqui:tópico linux.org.ru

Referência:cara tc-drr

NOTAS Esta implementação não descarta pacotes da fila mais longa em caso de sobrecarga, pois os limites são tratados pelas qdiscs filhas individuais.

Responder2

dr é umAgendador, você ainda precisará alocar largura de banda diferente para classes com htb. Eu acho que você 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 apenas em caso de congestionamento, por exemplo, criar vários fluxos UDP e depois medir dois em questão, mas ainda não é o que você espera.

informação relacionada