33.5.2. システム全体の TCP ソケットバッファー設定
ソケットバッファーには、カーネルが受信したデータ、または送信する必要があるデータが一時的に保存されます。
以下のバッファーが存在します。
- 読み取りソケットバッファーには、カーネルが受信したがアプリケーションがまだ読み取っていないパケットが保持されます。
- 書き込みソケットバッファーには、アプリケーションがバッファーに書き込んだものの、カーネルがまだ IP スタックとネットワークドライバーに渡していないパケットが保持されます。
TCP パケットが大きすぎてバッファーサイズを超えている場合、またはパケットの送受信速度が速すぎる場合、カーネルはデータがバッファーから削除されるまで、新しい受信 TCP パケットをドロップします。この場合、ソケットバッファーを増やすことでパケットロスを防ぐことができます。
net.ipv4.tcp_rmem (読み取り) と net.ipv4.tcp_wmem (書き込み) の両方のソケットバッファーカーネル設定には、次の 3 つの値が含まれます。
net.ipv4.tcp_rmem = 4096 131072 6291456
net.ipv4.tcp_wmem = 4096 16384 4194304
表示される値はバイト単位であり、Red Hat Enterprise Linux はそれらを次の方法で使用します。
- 最初の値は最小バッファーサイズです。新しいソケットのサイズを小さくすることはできません。
- 2 番目の値はデフォルトのバッファーサイズです。アプリケーションがバッファーサイズを設定しない場合、これがデフォルト値になります。
-
3 番目の値は、自動的にチューニングされるバッファーの最大サイズです。アプリケーションで
setsockopt()関数をSO_SNDBUFソケットオプションとともに使用すると、この最大バッファーサイズが無効になります。
net.ipv4.tcp_rmem および net.ipv4.tcp_wmem パラメーターは、IPv4 プロトコルと IPv6 プロトコルの両方のソケットサイズを設定することに注意してください。