2 台の Windows XP SP3 マシンを使用して、3k ZMQ メッセージを一方から他方に送信しようとしています。これらは両方とも、サーバー グレードのインテル ギガビット イーサネット カードを備えたかなり最新のシステム (5100 チップセットを搭載したデュアル クアッド コア Xeon および 5500 チップセットを搭載したデュアル ヘックス コア Xeon) です。
2 台のマシンは、間にスイッチやルーターを介さずにポイント ツー ポイントで接続されます。
パフォーマンス比較のために pcttcp を使用すると、あるマシンから別のマシンに TCP 経由で 70MB/s (使用率 56%) で送信できます。ZMQ PUSH/PULL を使用すると、2 つの間で最大 28MB/秒しか取得できません。
送信側と受信側を同じマシン (2 台のうち低速のマシン) で使用すると、97MB/秒の速度を達成できます。(デュアルヘキサコアで 220MB/s)
PUSH/PULL チャネルには、両端に HWM が設定されています。HWM サイズが 1024 のような大きな値よりも低く設定されている場合 (~150 メッセージ)、わずかにパフォーマンスが向上します。
6000 バイトのジャンボ フレームを試してみましたが、さらに悪化しました。(pcttcp は 72MB/s でわずかに優れたパフォーマンスを発揮)
TcpWindowSize をより大きな値に設定してみましたが、同様に悪化しているように見えました。ZMQ は小さいサイズを好み、pcttcp は変更されませんでした。TcpWindowSize が 32K に設定されるようになりました
その他のパラメータ:
- TcpAckFrequency = 1 // これがないと機能しません。
- Tcp1323Opts = 1
- Receive Side Scaling が有効
ボトルネックを見つけるにはどうすればよいですか?TCP と ZMQ のパフォーマンスで達成できることは何ですか? ZeroMQ Web サイトのパフォーマンス セクションでは、スループットが TCP (95%+) に近づくテストについて詳しく説明しています。
パフォーマンスのヒント/知恵(Linuxの使用を除いて、;-))は大歓迎です。
ありがとう!!!
別の手がかり: 2 つのシステム (同じ方向、異なるポート) 間で複数の送信者/受信者のペアをセットアップすると、より高い集約率を達成できます。(3 つの合計で ~42MB/秒)