TCP/IP ネットワーク接続ごとに (カーネル アドレス空間で) Linux カーネルによって消費されるメモリの平均量はどれくらいですか?
3 に答える
TCP 接続の場合、消費されるメモリは次の条件によって異なります。
sk_buff のサイズ (Linux カーネルが使用する内部ネットワーク構造)
接続の読み取りおよび書き込みバッファ
バッファのサイズは必要に応じて微調整できます
root@x:~# sysctl -A | grep net | grep mem
これらの変数を確認してください
これらは、カーネル内のすべてのネットワーク接続の最大デフォルト メモリ バッファ使用量を指定します
net.core.wmem_max = 131071
net.core.rmem_max = 131071
net.core.wmem_default = 126976
net.core.rmem_default = 126976
これらは、tcp 接続に固有のバッファ メモリの使用を指定します。
net.ipv4.tcp_mem = 378528 504704 757056
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
指定された 3 つの値は、"min default max" バッファー サイズです。そのため、Linux で開始するには、各接続の読み取りおよび書き込みバッファーのデフォルト値を使用します。接続数が増えると、これらのバッファーは [最大で指定された最小値まで] 減少します。最大バッファー値の場合も同様です。
これらの値は、これを使用して設定できますsysctl -w KEY=KEY VALUE
例えば。以下のコマンドは、各接続の読み取りおよび書き込みバッファーがそれぞれ 4096 であることを確認します。
sysctl -w net.ipv4.tcp_rmem='4096 4096 4096'
sysctl -w net.ipv4.tcp_wmem='4096 4096 4096'
また、どの層かにもよります。純粋なブリッジ シナリオの場合は、ブリッジ レベルの FDB だけがあります。ルーティングが開始されると、ルーティング テーブルと IP レベルの FDB/近隣データベースが存在します。そして最後に、ローカル ソケットが有効になると、もちろんウィンドウ サイズ、ソケット バッファ (送信と受信の両方、前回チェックしたときはデフォルトで 128k)、フラグメント リスト (使用されている場合) があるため、そこにメモリは行きますが、すべての部品を使用して明確な答えを出すのは困難です。を使用ss -m
して、ローカル ストリーム ソケットのいくつかのメモリ統計を取得できます。
場合によります。多くの多くのことについて。
アイドル接続には数百バイトかかると思います。
ただし、送信および/または受信データにデータがある場合は、消費量が増加します。ウィンドウ サイズによって、この消費量をほぼ制限できます。
データの余分な消費は、受信/送信キュー内のバイトだけではありません。オーバーヘッドがあるため、1 バイトのセグメントは 2K 程度かかる場合があります。TCP は、セグメントを単一の sk_buff にマージするなどして、これを削減しようとしますが、常に成功するとは限りません。