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.