LAN 上の多くの Linux サーバー間でマルチキャスト メッセージングを多用しています。多くの遅延が発生しています。私たちは基本的に膨大な数の小さな荷物を送ります。スループットよりもレイテンシに関心があります。マシンはすべて最新のマルチコア (ハイパースレッディングを含めると少なくとも 4 つ、通常は 8 つ、16 つ) のマシンであり、負荷は常に 2.0 以下で、通常は 1.0 未満です。ネットワーク ハードウェアの容量も 50% 未満です。
私たちが目にする遅延は、キューイング遅延のように見えます。パケットは、ジャムしたように見えるまでレイテンシーが急速に増加し始め、その後、通常に戻ります。
メッセージング構造は基本的に次のとおりです。「送信スレッド」で、キューからメッセージを取得し、( を使用してgettimeofday()
) タイムスタンプを追加してから、 を呼び出しますsend()
。受信プログラムはメッセージを受信し、受信時刻にタイムスタンプを付けて、キューにプッシュします。別のスレッドでキューが処理され、送信タイムスタンプと受信タイムスタンプの違いが分析されます。(タイムスタンプは内部キューの外部に追加されるため、内部キューは問題の一部ではないことに注意してください。)
この問題に対する答えをどこから探し始めればよいのか、私たちは本当に知りません。私たちは Linux の内部構造に精通していません。私たちは、カーネルが送信側または受信側 (またはその両方) でパケットをキューイングまたはバッファリングしていると考えています。しかし、これを追跡して追跡する方法はわかりません。
価値のあるものとして、CentOS 4.x (RHEL カーネル 2.6.9) を使用しています。