tcp_mem es más importante porque define cómo debe comportarse la pila tcp cuando se trata del uso de la memoria. El búfer de envío y recepción de IMO debe ser un múltiplo de tcp_mem. Aquí hay un enlace a una fórmula para recibir buffer: http://www.acc.umu.se/~maswan/linux-netperf.txt . En breve:
La sobrecarga es: window / 2 ^ tcp_adv_win_scale (tcp_adv_win_scale el valor predeterminado es 2) Entonces, para los parámetros predeterminados de linux para la ventana de recepción (tcp_rmem): 87380 - (87380/2 ^ 2) = 65536. Dado un enlace transatlántico (150 ms RTT), el rendimiento máximo termina en: 65536 / 0.150 = 436906 bytes / so aproximadamente 400 kbyte / s, lo cual es realmente lento hoy. Con el tamaño predeterminado aumentado: (873800 - 873800/2 ^ 2) /0.150 = 4369000 bytes / s, o aproximadamente 4Mbytes / s, lo cual es razonable para una red moderna. Y tenga en cuenta que este es el valor predeterminado, si el remitente está configurado con un tamaño de ventana más grande, se escalará felizmente hasta 10 veces (8738000 * 0.75 / 0.150 = ~ 40Mbytes / s), bastante bueno para una red moderna.
Esto es lo que dice el artículo sobre tcp_mem:
Lo que elimina es un límite artificial para el rendimiento de TCP, sin ese límite está limitado por el ancho de banda y la pérdida de extremo a extremo disponibles. Por lo tanto, puede terminar saturando su enlace ascendente de manera más efectiva, pero tcp es bueno para manejar esto.
En mi opinión, un valor tcp_mem medio más grande acelera la conexión al perder menos seguridad y aumenta ligeramente el uso de memoria.
Puede monitorear la pila de red con:
grep skbuff /proc/slabinfo