クアッドコアIntelXeon CPU @ 2.80GHzをギガビットとして使用する古いFujitsiRX300S2を使用しようとしていますNATルーター、デュアルギガビットNIC PCI-Xを介してオンボード。
ルーターは、マルチキャストトラフィックを外部インターフェイスから内部ネットワークに転送します。マルチキャストルーティングはアップストリームのCiscoルーターによって処理されるため、NATルーターはeth1(アップストリーム)とeth0(内部)の間でマルチキャストトラフィックを「リーク」するだけで済みます。
これは、基本的にL3ルーターをマルチキャストトラフィックに応じてL2ブリッジとして機能させるigmpproxyを使用して適切に設定されています。
スループットをテストするとき、200グループ/ストリーム(約80,000 p/s)でユーザースペースのローカルプロセスに最大850〜900Mビットのマルチキャストトラフィックを受信することに問題はありません。ユーザースペースでは、パケット損失なしで200ストリームをリアルタイムで分析します。ローカルプロセスは、1つのコアを100%で最大化します。
ストリームは、IPUDPパケットにカプセル化されたIPTVmpegトランスポートストリームで構成されます。 7x188 = 1316バイトのペイロード。
ただし、転送モードでスループットをテストする場合、たとえば、マルチキャストトラフィックがeth1に入り、カーネルレベルでeth0にルーティングされてローカルネットワークに送信される場合、NATルーターは受信したすべてのトラフィックを転送できません。
外部インターフェイスeth1はすべてのマルチキャストトラフィックを〜900Mbitで受信しますが、発信インターフェイスは〜600Mbitしか送信せず、eth0に接続された受信テストマシンによると、すべてのストリームでパケット損失が発生します。
負荷を分析すると、ksoftirqd/3は100%CPUで最大になりますが、他の3つのコアは10%未満であるため、4つのコアすべてが負荷に関与しているわけではないようです。
/ proc/interruptsは、eth0とeth1がirq16を共有していることも示しています。
CPU0 CPU1 CPU2 CPU3
16: 0 0 92155 208280892 IO-APIC 16-fasteoi uhci_hcd:usb2, uhci_hcd:usb5, eth1, eth0
ご覧のとおり、CPU3は不均衡な量の割り込みを処理します。
Cpu_affinityに関するさまざまなテキストを読み、CPUコアをネットワークキューに固定しようとしています。残念ながら、このNIC Broadcomのtg3は複数のキューをサポートしていませんが、それでも、このクアッドコアシステム上のより多くのコア間で負荷を共有できるはずです。
または、ボトルネックとなっているのはPCI-Xバスですが、その場合、着信eth1と発信eth0の両方でスループットが低下し、パケットはeth1ですが、eth1間でパケットが失われるようです)およびeth0。パケットがルーターで失われると、/ sys/class/net/eth1/statistics/rx_missed_errorsが大幅に増加するため(約1000 p/s)、trueではありません。
100チャネルと約500Mbitのみが転送される場合、パケット損失は発生せず、ksoftirqd/3は約5〜6%のCPUしか消費しません。しかし、600Mbitが転送されると、ksoftirqd/3は100%を消費するため、CPUの外部のボトルネックが発生しているようです。
このような古いサーバーが、2つの組み込みNIC間でのみ1ギガビットのUDPトラフィックを一方向に転送できることは問題外ですか?パケットが大きい場合でも、1316バイトのペイロードは1Gbitで中程度の80..90kp/sを提供しますか?
仕様上、2つのオンボードネットワークインターフェイスがフルギガビットトラフィックを駆動することは想定されていなかったため、サーバーを放棄しました。 2番目のインターフェースは、管理に使用するためにインデントされました。
PCIeと2つのInteli210ギガビットアダプタを備えた標準のデスクトップコアi5は、1ギガビットマルチキャストUDPトラフィックを問題なく転送できました。
ただし、トラフィックのバースト性のため、RXおよびTXバッファー(ethtool -G)を微調整する必要がありました。 2xまたは4xPCIeは、PCIeバスの輻輳が原因でパケットが失われるリスクを減らすのに役立つ可能性があります。