Por que alguns tcp_ [rw]? mem $ voodoo mostram todos os valores iguais?

2

Analisando os guias de otimização TCP pela Internet, um tema comum é definir o vetor de três inteiros tcp_mem, tcp_rmem ou tcp_wmem para ter valores iguais no arquivo sysctl.conf.

Emprestando da página man do TCP, a função dos valores é descrita como:

baixo

  • O TCP não regula sua alocação de memória quando o número de páginas alocado globalmente está abaixo desse número.

pressão

  • Quando a quantidade de memória alocada pelo TCP excede esse número de páginas, o TCP modera seu consumo de memória. Esta pressão de memória estado é encerrado quando o número de páginas alocadas fica abaixo do marca baixa.

alto

  • O número máximo de páginas, globalmente, que o TCP alocará. este O valor substitui quaisquer outros limites impostos pelo kernel.

Talvez eu seja louco, mas com base nessas descrições, definir valores iguais pode causar um conflito interno horrível.

Alguém mais esperto do que eu em relação à memória TCP no kernel do Linux pode falar sobre os efeitos de se definir esses valores como iguais?

Obrigado,

    
por Robert 18.07.2014 / 02:55

1 resposta

3

Você está certo, muitas pessoas não têm idéia do que estão falando e não pensam por si mesmas, então apenas configurações de cultos de carga de outros lugares sem entender o que essas configurações fazem ou o verdadeiro significado dos ajustes.

Você obviamente não é uma dessas pessoas. Tenha um upvote!

Configurar todos os três valores de tcp_.mem tunables para a mesma coisa arruinaria a capacidade do TCP de ajustar automaticamente tamanhos de buffer e uso de memória (o net.ipv4.tcp_moderate_rcvbuf=1 sintonizável), o que é uma boa vantagem da implementação TCP do Linux. p>

Supondo que os valores fossem todos altos, isso seria um uso ineficiente da memória TCP.

Se soquetes suficientes foram criados para que os tetos definidos por net.ipv4.tcp_mem sejam atingidos (note que eles são medidos em páginas , não em bytes), o TCP seria mais ineficiente à medida que ele inicia os buffers em conjunto para reduzir uso de memória, o que levaria a um maior uso da CPU %sys do que é realmente necessário.

Se houvesse pressão de memória suficiente, o kernel começaria a descartar pacotes, primeiro da fila fora de ordem, depois a fila principal de recebimento.

O valor correto para os tcp_rmem tunables é:

  • baixo: 4kb ou 8k (uma ou duas páginas, se não x86)
  • padrão: o BDP de sua conexão mais comumente veiculada
  • high: algum valor maior que o padrão, que permite transferências em massa e o atraso que um aplicativo tem na leitura do buffer de soquete

Para 1Gbps, 4Mb ~ 6Mb geralmente é suficiente. Para 10Gbps, você pode querer subir até 16Mb. Eu não vi um sistema onde mais do que isso tenha sido útil, mas talvez tal sistema exista.

Normalmente, você pode deixar os tcp_wmem tunables como estão.

Quanto mais tempo o sistema estiver ativo e servindo conexões de rede, melhor será o auto-ajuste do TCP ao prever o tamanho ideal do buffer padrão com base no BDP e no RTT das conexões anteriores.

    
por 18.07.2014 / 14:19