Existe um método para simular alta latência?

11

Esta é uma resposta muito boa sobre como limitar a largura de banda .

Agora, a largura de banda não é minha principal preocupação - a latência é.

O que acontece se eu colocar algumas centenas de quilômetros entre meus servidores de aplicativos e seus servidores de banco de dados?

Estou procurando uma possibilidade de simular o atraso esperado para cada pacote IP.

Nils
fonte

Respostas:

14

Você pode fazer isso usando netem. Na página inicial :

Emulação de atrasos na rede de área ampla

Este é o exemplo mais simples, apenas adiciona uma quantidade fixa de atraso a todos os pacotes que saem da Ethernet local.

# tc qdisc add dev eth0 root netem delay 100ms

Agora, um simples teste de ping para hospedar na rede local deve mostrar um aumento de 100 milissegundos. O atraso é limitado pela resolução do relógio do kernel (Hz). Na maioria dos sistemas 2.4, o relógio do sistema é executado em 100 Hz, o que permite atrasos em incrementos de 10 ms. Em 2.6, o valor é um parâmetro de configuração de 1000 a 100 Hz.

Exemplos posteriores apenas alteram os parâmetros sem recarregar o qdisc

Redes reais de área ampla mostram variabilidade, portanto é possível adicionar variação aleatória.

# tc qdisc change dev eth0 root netem delay 100ms 10ms

Isso faz com que o atraso adicionado seja de 100 ± 10 ms. A variação do atraso da rede não é puramente aleatória, portanto, para simular que também existe um valor de correlação.

# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

Isso faz com que o atraso adicionado seja de 100 ± 10 ms, com o próximo elemento aleatório dependendo de 25% no último. Isso não é uma correlação estatística verdadeira, mas uma aproximação.

Atraso na distribuição

Normalmente, o atraso em uma rede não é uniforme. É mais comum usar algo como uma distribuição normal para descrever a variação no atraso. A disciplina netem pode usar uma tabela para especificar uma distribuição não uniforme.

# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

As tabelas reais (normal, pareto, paretonormal) são geradas como parte da compilação iproute2 e colocadas em / usr / lib / tc; portanto, é possível com algum esforço fazer sua própria distribuição com base em dados experimentais.

Chris Down
fonte
3
Ótimo - e tcainda existe nos sistemas atuais SLES e RHEL.
Nils