Limita a largura de banda e latência de entrada e saída no linux

12

Eu percebo que muitas perguntas semelhantes já foram feitas, mas até agora eu ainda não encontrei uma solução para o meu problema.

Eu tenho um servidor linux virtual (rodando Debian Squeeze) que eu uso para testar as velocidades do site, a fim de medir o aumento e a diminuição do tempo de carregamento dos sites. Estou tentando limitar a largura de banda e a latência desse servidor para poder me aproximar dos tempos de carregamento do mundo real nos sites, mas até agora falhei.

O que eu quero especificamente é o seguinte:

  • Para definir uma latência de entrada e saída de 50 ms.
  • Para definir um limite de largura de banda de entrada de 512 kbps.
  • Para definir um limite de largura de banda de saída de 4096 kbps.

Eu tenho lido no netem e usando o comando tc , mas ainda está um pouco acima da minha cabeça. Consegui reunir esse comando para controlar a latência que parece funcionar, mas não tenho certeza se isso lida apenas com a latência de saída ou com os dois:

tc qdisc add dev eth0 root netem delay 50ms

Todos os gurus da rede em torno disso podem me ajudar?

Editar:

Depois de mais pesquisas, cheguei à metade do meu objetivo, usando esse comando todo o tráfego de saída se comporta como eu quero:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

No entanto, ainda não consegui regular o tráfego de entrada corretamente. Eu aprendi que eu deveria usar um "filtro Ingress Policer" Eu tenho tentado fazer exatamente isso com o comando abaixo, brincando com valores diferentes, mas sem sorte.

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

A largura de banda é afetada pelo comando, os valores acima fazem a velocidade começar em 2MB / se, à medida que a transferência avança, caem lentamente para cerca de 80-90kB / s, alcançando após 30 segundos de transferência.

Alguma idéia do que estou fazendo errado?

    
por yzfr1 14.05.2013 / 14:50

2 respostas

9

Por fim, decidi definir a largura de banda / latência de saída no servidor e fazer o mesmo no cliente, atingindo efetivamente o mesmo resultado.

Estes são os comandos que executei no servidor e no cliente, respectivamente, para alcançar meus objetivos:

Servidor: 4 Mbit 50 ms

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

Cliente: 512 kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
    
por 18.05.2013 / 12:05
1

Cerca de 80-90 kByte / s é sobre o que esperar de

    tc filter add ... police rate 1.0mbit ...

Você pede que os dados recebidos sejam descartados quando chegam a 1 mBit / s, ou seja, cerca de 125 kBytes / s. O servidor remoto, em seguida, cairá para consideravelmente menor do que isso (talvez metade, não tenho certeza). Depois disso, todos os pacotes passam, então a extremidade remota aumenta lentamente a velocidade até que 125 kByte / s sejam novamente atingidos. Você obtém uma taxa de transferência média consideravelmente abaixo de 125 kBytes / s, o que é típico da modelagem de ingresso.

Estou um pouco surpreso que a velocidade deve chegar a 2 MByte / s com o filtro de política de entrada já em vigor. Onde você mediu - no cliente downstream (programm) ou em algum roteador upstream? Ou talvez você tenha iniciado a conexão pela primeira vez e só depois você tenha chutado o filtro da política de ingresso?

    
por 02.04.2015 / 17:43