Comportamento inesperado do agendador HTB, tráfego de baixa prioridade, privando o tráfego de alta prioridade

1

Estou trabalhando para garantir baixo atraso para o tráfego UDP no nível do gateway doméstico. Neste gateway doméstico, tenho dois tipos de tráfego, TCP e UDP, e asseguro um tratamento diferenciado usando o HTB. A largura de banda que estou testando é igual a 1Mbit / s (portanto, ela é conectada ao link ADSL 1Mbit emulado).

Eu uso a seguinte configuração:

tc qdisc add dev br0 handle 1: root htb default 15
tc class add dev br0 parent 1: classid 1:1 htb rate 1000kbit ceil 1000kbit
tc class add dev br0 parent 1:1 classid 1:14 htb rate 200kbit ceil 1000kbit prio 1
tc class add dev br0 parent 1:1 classid 1:15 htb rate 10bit ceil 1000kbit prio 2
tc filter add dev br0 parent 1: protocol ip u32 match ip tos 0xb8 0xff flowid 1:14 (UDP)
tc filter add dev br0 parent 1: protocol ip u32 match ip tos 0x00 0xff flowid 1:15 (TCP)
tc qdisc add dev br0 parent 1:14 handle 20: sfq limit 40
tc qdisc add dev br0 parent 1:15 handle 50: pfifo limit 1000 

Para ver como o tráfego interage, para UDP eu uso um tipo de tráfego de "escadas", assim começo em 0bit / se aumento o tráfego a cada dez segundos em 100kbit / s. Quando eu alcanço 1Mbit / s eu diminuo a cada 10s por 100kbit / s até chegar a zero.

Paralelamente, tenho tráfego TCP, seja um upload de arquivo, seja um iperf simples (sem qualquer influência no comportamento observado).

Normalmente, na maioria das vezes, tenho um comportamento esperado. Assim, posso ver perfeitamente a separação de tráfego TCP / UDP e a tendência de “escadas” do UDP. Além disso, o tráfego UDP assume o TCP (mas o TCP ainda pode enviar - e a tendência é o oposto do UDP, primeiro diminuindo, aumentando mais tarde).

No entanto, de tempos em tempos, vejo o TCP assumindo completamente o tráfego UDP por alguns segundos. Acontece entre 1 e 3 vezes durante o teste. Em geral, isso acontece pelo menos uma vez, quando a taxa de bits UDP já está diminuindo (cerca de 30 segundos antes de chegar a 0), o tráfego TCP assume completamente alguns segundos (3 a 5 segundos). Não consigo entender esse comportamento, porque parece que o tráfego UDP não pode ser enviado, mas não deve estar acima do limite desde que sua taxa de bits já esteja diminuindo.

Eu acho que tem algo a ver com o agendamento de HTB e bloqueio de tráfego de alta prioridade por algum motivo. Assim, quando a taxa é calculada para o meu tráfego de alta prioridade, de alguma forma é mais alta que o seu teto.

  • Mas por que o tráfego de alta prioridade alcançaria seu teto se a taxa de bits fosse menor?
  • Por que o tráfego de baixa prioridade bloqueia o outro por vários segundos, mesmo que sua taxa garantida seja próxima de zero?

Eu tentei alterar diferentes parâmetros (burst, ceil, rates), mas não consigo ver nenhuma melhoria.

Agradecemos antecipadamente por sua ajuda.

    
por FasolkaPoBretonsku 15.04.2016 / 15:26

0 respostas