tcp_mem важливіше, оскільки він визначає, як повинен поводитись стек tcp, коли справа стосується використання пам'яті. Буфер IMO для надсилання та прийому повинен бути кратним tcp_mem. Ось посилання на формулу для буфера прийому: http://www.acc.umu.se/~maswan/linux-netperf.txt . Коротко:
Накладні витрати: window / 2 ^ tcp_adv_win_scale (типовим параметром tcp_adv_win_scale є 2) Отже, для параметрів Linux за замовчуванням для вікна отримання (tcp_rmem): 87380 - (87380/2 ^ 2) = 65536. Дано трансатлантичне посилання (150 мс RTT), максимальна продуктивність закінчується на рівні: 65536 / 0,150 = 436906 байт / с або близько 400 кбайт / с, що сьогодні дуже повільно. Зі збільшеним розміром за замовчуванням: (873800 - 873800/2 ^ 2) /0.150 = 4369000 байт / с, або близько 4 Мбайт / с, що є резонансом для сучасної мережі. І зауважте, що це за замовчуванням, якщо відправник налаштований на більший розмір вікна, він із задоволенням може масштабуватися до 10 разів (8738000 * 0,75 / 0,150 = ~ 40 Мбайт / с), що досить добре для сучасної мережі.
Ось що йдеться у статті про tcp_mem:
Те, що ви видаляєте, є штучним обмеженням продуктивності tcp, без цього обмеження ви обмежені доступною пропускною здатністю та втратами. Таким чином, ви можете в кінцевому підсумку наситити свою вихідну лінію більш ефективно, але tcp добре справляється з цим.
IMO більша середня величина tcp_mem прискорює зв’язок при втраті меншої безпеки та трохи збільшує використання пам'яті.
Ви можете контролювати мережевий стек за допомогою:
grep skbuff /proc/slabinfo