38

TCP/IP ネットワーク接続ごとに (カーネル アドレス空間で) Linux カーネルによって消費されるメモリの平均量はどれくらいですか?

4

3 に答える 3

49

TCP 接続の場合、消費されるメモリは次の条件によって異なります。

  1. sk_buff のサイズ (Linux カーネルが使用する内部ネットワーク構造)

  2. 接続の読み取りおよび書き込みバッファ

バッファのサイズは必要に応じて微調整できます

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'
于 2012-01-04T18:55:21.180 に答える
3

また、どの層かにもよります。純粋なブリッジ シナリオの場合は、ブリッジ レベルの FDB だけがあります。ルーティングが開始されると、ルーティング テーブルと IP レベルの FDB/近隣データベースが存在します。そして最後に、ローカル ソケットが有効になると、もちろんウィンドウ サイズ、ソケット バッファ (送信と受信の両方、前回チェックしたときはデフォルトで 128k)、フラグメント リスト (使用されている場合) があるため、そこにメモリは行きますが、すべての部品を使用して明確な答えを出すのは困難です。を使用ss -mして、ローカル ストリーム ソケットのいくつかのメモリ統計を取得できます。

于 2012-01-03T19:05:56.720 に答える
1

場合によります。多くの多くのことについて。
アイドル接続には数百バイトかかると思います。
ただし、送信および/または受信データにデータがある場合は、消費量が増加します。ウィンドウ サイズによって、この消費量をほぼ制限できます。
データの余分な消費は、受信/送信キュー内のバイトだけではありません。オーバーヘッドがあるため、1 バイトのセグメントは 2K 程度かかる場合があります。TCP は、セグメントを単一の sk_buff にマージするなどして、これを削減しようとしますが、常に成功するとは限りません。

于 2011-12-27T15:24:17.407 に答える