Amazon EC2 VPC: queda de desempenho da velocidade de download da instância NAT

7

Eu tenho um conjunto de servidores dentro do Amazon EC2 no VPC. Dentro desta VPC eu tenho uma sub-rede privada e uma sub-rede pública. Na sub-rede pública, configurei uma máquina NAT em uma instância t2.micro que basicamente executa esse script NAT na inicialização, injetando regras no iptables. Baixar arquivos da Internet de uma máquina dentro da sub-rede privada funciona bem.

No entanto, comparei a velocidade de download de um arquivo em um servidor FTP externo de alta largura de banda diretamente da minha máquina NAT com a velocidade de download de uma máquina dentro da minha sub-rede privada (via a mesma máquina NAT). Houve uma diferença realmente significativa: cerca de 10MB / s da máquina NAT vs. 1MB / s ao fazer o download da máquina dentro da sub-rede privada.

Não há uso da CPU na máquina NAT, portanto, esse não pode ser o gargalo. Ao tentar o mesmo teste com máquinas maiores (m3.medium com "moderado desempenho de rede" e m3.xlarge com "alto desempenho de rede"), também não consegui velocidades de download maiores que 2,5MB / s.

Este é um problema geral de NAT que pode (e deve) ser ajustado? De onde vem a queda de desempenho?

Atualizar

Com alguns testes, posso reduzir esse problema. Quando estou usando máquinas Ubuntu 12.04 ou Amazon Linux NAT a partir de 2013, tudo funciona sem problemas e eu obtenho as velocidades de download completas, mesmo nas menores instâncias t2.micro. Não importa se eu uso máquinas PV ou HVM. O problema parece estar relacionado ao kernel. Essas máquinas antigas têm uma versão do Kernel 3.4.x, enquanto as máquinas NAT mais recentes do Amazon Linux ou o Ubunut 14.XX têm a versão do Kernel 3.14.XX. Existe alguma maneira de ajustar as novas máquinas?

    
por j0nes 20.11.2014 / 15:28

3 respostas

6

Finalmente encontramos a solução. Você pode corrigir a velocidade de download executando na máquina NAT (como root):

ethtool -K eth0 sg off

Isso desabilita o modo dispersão-coleta, que (até onde eu entendo isso) interrompe o descarregamento de algum trabalho de rede na própria placa de rede. Desativar essa opção leva a um maior uso da CPU no cliente, pois a CPU agora tem que fazer o trabalho em si. No entanto, em uma máquina t2.micro só vimos cerca de 5% do uso da CPU ao baixar uma imagem de DVD.

Observe que isso não sobreviverá a uma reinicialização, portanto, certifique-se de definir isso em rc.local ou, pelo menos, antes de configurar o NAT.

    
por 03.12.2014 / 12:37
3

Eu também uso caixas NAT em uma configuração semelhante na produção, muito interessada em suas descobertas. Eu não tive descobertas semelhantes antes da produção, mas talvez seja uma questão que eu não tenha prestado atenção antes.

Vamos fazer alguma ciência!

=============================================== =============================

Teoria: As caixas NAT podem fazer o download e upload mais rápido do que um cliente que está usando o NAT.

Experiência: combine a experiência dos questionários. t2.micros com o Amazon NAT 2014.09 2 sub-redes com o NAT indo para um IGW e uma sub-rede privada apontando para o NAT. (Arrendamento Compartilhado. SSD de Propósito Geral)

Procedimento:

# install speedtest
$ sudo yum install python-pip -y --enablerepo=epel; sudo pip install speedtest-cli
# run against the same server
$ speedtest-cli --server 935 --simple
# run it many times
$ for ((n=0;n<10;n++)); do speedtest-cli --simple --server 935; done

Dados:

          Nat:     Client
Download  727.38   157.99
Upload    250.50   138.91

Conclusão: OP não está mentindo.

=============================================== =============================

Teoria: Diferentes versões do kernel levam a resultados diferentes.

Experiência: Configure 3 caixas nat, cada uma com SSD magnético, m3.medium (sem ruptura) e locação dedicada. Faça um teste de velocidade.

Procedimento: Veja o último experimento. Além disso, configure uma tabela de roteamento para cada caixa NAT. Usamos uma tabela de roteamento blackhole para provar que as alterações foram propagadas quando eu troquei as tabelas de roteamento.

  1. Usando um NAT.
  2. curl google.com funciona.
  3. Mude para o buraco negro.
  4. Espere que curl google.com falhe no cliente.
  5. Mude para o novo NAT.
  6. curl google.com funciona.

Aqui estão as minhas 3 caixas nat: 2014.09 3.14.20-20.44.amzn1.x86_64 2014.03 3.10.42-52.145.amzn1.x86_64 2013.09 3.4.62-53.42.amzn1.x86_64

Dados:

Todas as 3 caixas obtêm resultados muito semelhantes ao executar speedtest-cli --server 935

09/14   03/14   09/13
355.51, 356.55, 364.04
222.59, 212.45, 252.69

Do cliente:

09/14   03/14   09/13
351.18, 364.85, 363.69
186.96, 257.58, 248.04

Conclusão: Há degradação? Não. Existe alguma diferença entre as versões do kernel? Não.

=============================================== =============================

Teoria: A locação dedicada versus compartilhada faz a diferença.

Experiência: 2 caixas NAT. Ambos usando o NAT 2014.09. Um com locação compartilhada, um com locação dedicada.

Dados: Ambas as caixas têm desempenho semelhante:

Shared Nat   Dedicated Nat
387.67       387.26
296.27       336.89

Eles também têm desvios padrão semelhantes:

$ python3
>>> import statistics
>>> shared_download = [388.25, 333.66, 337.44, 334.72, 338.38, 335.52, 333.73, 333.28, 334.43, 335.60]
>>> statistics.stdev(shared_download)
16.858005318937742
>>> dedicated_download = [388.59, 338.68, 333.97, 337.42, 326.77, 346.87, 336.74, 345.52, 362.75, 336.77]
>>> statistics.stdev(dedicated_download)
17.96480002671891

E quando você executa as combinações 2x2:

      Shared Client/Sh. NAT  Sh. Client/Dedicated Nat  Ded. Client/Sh. Nat  Ded. Client/Ded. NAT
Upload       290.83                      288.17                283.13              340.94
Download     260.01                      250.75                248.05              236.06

Conclusão: Realmente claro que o compartilhado versus dedicado não parece fazer uma grande diferença.

Meta conclusões:

O teste que provavelmente vale a pena refazer seria o teste do OP com m3.mediums. Consegui duplicar os resultados do t2.micro, mas o meu m3.medium parece entrar em conflito com os resultados do m3.medium do OP.

Eu também estaria interessado em ver seus dados nas versões do kernel.

Talvez a parte mais interessante seja como eu não consegui fazer com que um NAT m3.medium fosse rápido.

    
por 29.11.2014 / 15:40
0

Meus testes mostraram que isso piorou meus downloads.

servidor speedtest m3.large m3.medium servidor NAT dedicado.

Nenhum outro tráfego neste ambiente.

sg em média Velocidade de download: 292.19 sg off average Velocidade de download: 259,21

Meu teste foi: para ((n = 0; n < 10; n ++)); fazer speedtest-cli - simples; feito

    
por 27.03.2015 / 19:06