Mudanças entre as edições de "Adicionando latência com tc no Linux"
(Criou página com 'category:Configuração') |
|||
Linha 1: | Linha 1: | ||
[[category:Configuração]] | [[category:Configuração]] | ||
+ | |||
+ | Provavelmente você nunca precisará fazer isso com a sua internet, mas, recentemente, encontrei-me em um dilema em que eu precisava para simular 120ms de latência de rede em meu ambiente de teste que consiste em máquinas para o VRC. É aí que o comando tc entra na história | ||
+ | |||
+ | Dentro das distribuições atuais do Linux há um componente do kernel chamado netem, que acrescenta emulação de rede e é usado para testar e simular os mesmos tipos de problemas se poderia ver em uma WAN (Wide Area Network). tc é um comando que permite adicionar regras para netem, especificamente abordaremos como adicionar latência de rede em um dispositivo específico com tc. | ||
+ | |||
+ | =Instalação= | ||
+ | |||
+ | O comando tc vem com o pacote ''iproute'' que é instalado por padrão no linux, não será necessário instalar quaisquer para usar o tc. | ||
+ | |||
+ | =Adicionando Latência= | ||
+ | |||
+ | O comando tc irá adicionar a quantidade de latência especificada, a fim de simular a mesma taxa de latência como meu ambiente de produção que terá de tomar minha latência desejada e subtrair o meu teste de metas de latência para descobrir a quantidade de latência que é necessário adicionar com netem. | ||
+ | |||
+ | "Latência alvo de Produção" - "Test-alvo Latência" = "Latência adicionar via netem" | ||
+ | |||
+ | A fim de determinar a latência de seu alvo de teste, você pode executar um ping simples e usar o tempo de ida e volta do ping para determinar suas redes latência. Neste caso, google.com será nosso alvo de teste. | ||
+ | |||
+ | # ping google.com | ||
+ | PING google.com (74.125.224.230) 56 (84) bytes de dados. | ||
+ | 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 1 ttl = 56 time = 24,1 ms | ||
+ | 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 2 ttl = 56 time = 24.2 ms | ||
+ | 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 3 ttl = 56 time = 21,9 ms | ||
+ | |||
+ | Minha latência média para google.com é 23.6ms a fim de obter 120ms de latência que eu preciso adicionar 96.6ms, para facilidade de uso eu vou arredondar para cima a 97. | ||
+ | |||
+ | # tc qdisc add dev eth0 raiz netem demora 97ms | ||
+ | Para verificar o comando definir a regra de prazo tc-s. | ||
+ | |||
+ | # tc-s qdisc | ||
+ | qdisc netem 8002: dev eth0 root refcnt 2 limit 1000 delay 97.0ms | ||
+ | |||
+ | Como você pode ver a regra de atraso de 97ms foi adicionado à netem, agora vamos testar com outro ping. | ||
+ | # ping google.com | ||
+ | PING google.com (74.125.239.8) 56 (84) bytes de dados. | ||
+ | 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 1 ttl = 56 time = 122 ms | ||
+ | 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 2 ttl = 56 time = 120 ms | ||
+ | 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 3 ttl = 56 time = 120 ms | ||
+ | |||
+ | Agora meu tempo de ping de ida e volta está tomando 120ms. | ||
+ | |||
+ | Nota: Como você está adicionando esta regra para uma interface específica de todo o tráfego de que a interface terá o atraso 97ms. | ||
+ | |||
+ | =Remova a regra= | ||
+ | |||
+ | Depois de ter completado o teste, você pode remover o atraso com o comando tc também. | ||
+ | |||
+ | # tc qdisc del dev eth0 netem raiz | ||
+ | # tc-s qdisc | ||
+ | qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 | ||
+ | |||
+ | Estes ajustes não irão sobreviver a uma reinicialização, não deixe de conferir as regras netem depois de qualquer reinicialização. | ||
+ | |||
+ | =Mais informações= | ||
+ | |||
+ | Para maiores informações procure: | ||
+ | |||
+ | [[http://bencane.com/2012/07/tc-adding-simulated-network-latency-to-your-linux-server/ tc: Adding simulated network latency to your Linux server]] | ||
+ | [[http://blog.tinola.com/?e=22 Adding Latency and Limiting Bandwidth]] | ||
+ | [[http://lartc.org/manpages/tc.txt Tc manpage]] |
Edição das 11h51min de 21 de maio de 2013
Provavelmente você nunca precisará fazer isso com a sua internet, mas, recentemente, encontrei-me em um dilema em que eu precisava para simular 120ms de latência de rede em meu ambiente de teste que consiste em máquinas para o VRC. É aí que o comando tc entra na história
Dentro das distribuições atuais do Linux há um componente do kernel chamado netem, que acrescenta emulação de rede e é usado para testar e simular os mesmos tipos de problemas se poderia ver em uma WAN (Wide Area Network). tc é um comando que permite adicionar regras para netem, especificamente abordaremos como adicionar latência de rede em um dispositivo específico com tc.
Instalação
O comando tc vem com o pacote iproute que é instalado por padrão no linux, não será necessário instalar quaisquer para usar o tc.
Adicionando Latência
O comando tc irá adicionar a quantidade de latência especificada, a fim de simular a mesma taxa de latência como meu ambiente de produção que terá de tomar minha latência desejada e subtrair o meu teste de metas de latência para descobrir a quantidade de latência que é necessário adicionar com netem.
"Latência alvo de Produção" - "Test-alvo Latência" = "Latência adicionar via netem"
A fim de determinar a latência de seu alvo de teste, você pode executar um ping simples e usar o tempo de ida e volta do ping para determinar suas redes latência. Neste caso, google.com será nosso alvo de teste.
# ping google.com PING google.com (74.125.224.230) 56 (84) bytes de dados. 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 1 ttl = 56 time = 24,1 ms 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 2 ttl = 56 time = 24.2 ms 64 bytes from lax04s08-in-f6.1e100.net (74.125.224.230): icmp_req = 3 ttl = 56 time = 21,9 ms
Minha latência média para google.com é 23.6ms a fim de obter 120ms de latência que eu preciso adicionar 96.6ms, para facilidade de uso eu vou arredondar para cima a 97.
# tc qdisc add dev eth0 raiz netem demora 97ms
Para verificar o comando definir a regra de prazo tc-s.
# tc-s qdisc qdisc netem 8002: dev eth0 root refcnt 2 limit 1000 delay 97.0ms
Como você pode ver a regra de atraso de 97ms foi adicionado à netem, agora vamos testar com outro ping.
# ping google.com PING google.com (74.125.239.8) 56 (84) bytes de dados. 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 1 ttl = 56 time = 122 ms 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 2 ttl = 56 time = 120 ms 64 bytes from lax04s09-in-f8.1e100.net (74.125.239.8): icmp_req = 3 ttl = 56 time = 120 ms
Agora meu tempo de ping de ida e volta está tomando 120ms.
Nota: Como você está adicionando esta regra para uma interface específica de todo o tráfego de que a interface terá o atraso 97ms.
Remova a regra
Depois de ter completado o teste, você pode remover o atraso com o comando tc também.
# tc qdisc del dev eth0 netem raiz # tc-s qdisc qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Estes ajustes não irão sobreviver a uma reinicialização, não deixe de conferir as regras netem depois de qualquer reinicialização.
Mais informações
Para maiores informações procure:
[tc: Adding simulated network latency to your Linux server] [Adding Latency and Limiting Bandwidth] [Tc manpage]