O tcp_mem é mais importante porque define como a pilha tcp deve se comportar quando se trata de uso de memória. O buffer de envio e recebimento do IMO deve ser um múltiplo de tcp_mem. Aqui está um link para uma fórmula para buffer de recebimento: http://www.acc.umu.se/~maswan/linux-netperf.txt . Em resumo:
A sobrecarga é: window / 2 ^ tcp_adv_win_scale (o padrão tcp_adv_win_scale é 2) Portanto, para os parâmetros padrão do linux para a janela de recebimento (tcp_rmem): 87380 - (87380/2 ^ 2) = 65536. Dado um link transatlântico (RTT de 150 ms), o desempenho máximo termina em: 65536 / 0,150 = 436906 bytes / s ou cerca de 400 kbyte / s, o que é realmente lento hoje. Com o tamanho padrão aumentado: (873800 - 873800/2 ^ 2) /0.150 = 4369000 bytes / s, ou cerca de 4Mbytes / s, que é razoável para uma rede moderna. E observe que esse é o padrão, se o remetente estiver configurado com um tamanho de janela maior, ele aumentará até 10 vezes isso (8738000 * 0,75 / 0,150 = ~ 40Mbytes / s), muito bom para uma rede moderna.
Aqui está o que o artigo diz sobre tcp_mem:
O que você remove é um limite artificial para o desempenho do TCP, sem esse limite você é limitado pela largura de banda e pela perda de ponta a ponta disponíveis. Portanto, você pode saturar seu uplink com mais eficiência, mas o tcp é bom em lidar com isso.
Na IMO, um valor médio maior de tcp_mem acelera a conexão com a perda de menos segurança e aumenta ligeiramente a utilização de memória.
Você pode monitorar a pilha de rede com:
grep skbuff /proc/slabinfo