3

x86_64 RedHat 5.3 (カーネル 2.6.18) を実行しており、特に sysctl -a から net.core.rmem_max を見て、UDP バッファーを設定しようとしています。受信アプリケーションは時々パケットを見逃すことがありますが、それが何を意味するかに応じて、バッファはすでに十分に大きいと思います:

この設定の単位は何ですか? ビット、バイト、パケット、またはページ? ビットまたはバイトの場合、データグラム/ペイロード (100 バイトなど) またはネットワーク MTU サイズ (~1500 バイト) からですか? ページの場合、ページ サイズは何バイトですか?

これは、システムごと、物理デバイス (NIC) ごと、仮想デバイス (VLAN) ごと、プロセスごと、スレッドごと、ソケットごと、マルチキャスト グループごとの最大値ですか?

たとえば、データがメッセージあたり 100 バイトで、各ネットワーク パケットが 2 つのメッセージを保持し、ソケットあたり 50,000 メッセージをバッファできるようにしたい場合、4 つのスレッドのそれぞれでスレッドあたり 3 つのソケットを開きます。net.core.rmem_max の大きさはどのくらいですか? 同様に、アプリケーション内でソケット オプションを設定すると、単位はペイロード バイトなので、この場合、各ソケットで 5000000 になりますか?

最後に、一般的に、sysctl -a で表示されるパラメータの単位の詳細を見つけるにはどうすればよいでしょうか? 同様のユニットと、net.core.netdev_max_backlog や net.ipv4.igmp_max_memberships などの他のパラメーターに関する X ごとの質問があります。

ありがとうございました。

4

2 に答える 2

2

これは、socket(7) の man ページに完全に記載されています (バイト単位です)。

さらに、制限は SO_RCVBUF を使用してソケットごとに設定できます (同じページに記載されています)。

これらが実際にどのように機能するかについては、socket(7)、ip(7)、および udp(7) の man ページを参照してください。sysctl はそこに文書化されています。

于 2010-08-31T12:42:25.917 に答える
2

あなたはこれらのドキュメントを見るでしょう。とはいえ、これらのパラメーターの多くは実際には文書化されていないため、ブログやメーリングリストから詳細を掘り下げるためにグーグルを使用することを期待してください.

rmem_max は、ソケットごとの最大バッファー (バイト単位) です。掘り下げてみると、これはパケット全体が受信されるメモリのように見えるため、サイズにはwhatever/ip/udpヘッダーのサイズも含める必要があります-ただし、この領域は私にはかなりあいまいです.

ただし、UDP信頼できないことに注意してください。スイッチとルーターの間だけでなく、多くの損失の原因があります。これらにはバッファーもあります。

于 2010-08-30T20:31:35.937 に答える