私は 2 つの Intel Xeon CPU E5-2620 (Sandy Bridge) と 10Gbps 82599 NIC (2 ポート) を搭載したサーバーを持っており、これをハイパフォーマンス コンピューティングに使用しました。PCI アフィニティから、10G NIC が CPU1 に接続されていることがわかります。実験を行うためにいくつかのパケット受信スレッドを起動しました。スレッドはパケットを受信し、IP/UDP 解析を行い、バッファにコピーします。10G NIC に使用したドライバーは IOEngine PacketShader/Packet-IO-Engine · GitHub
Q1! アイドル状態の CPU1 は CPU0 のパケット受信性能を低下させます
1.1) CPU0 に 1 つまたは 2 つまたは 4 つのスレッドが結合されている場合、すべてのスレッドの全体的なパフォーマンスは約 2.6 ~ 3.2Gbps です 1.2) 2 つのスレッドが CPU1 に結合されている場合、全体的なパフォーマンスは 16.XGbps 1.3) 4 つのスレッドが結合されている場合CPU1 への全体的なパフォーマンスは 19.XGbps (2 * 10G ポートで最大)
CPU0 は NIC に直接接続されていないため、CPU0 での最大受信速度は 2.6 ~ 3.2Gbps のようです。ただし、計算集約型のプロセスが CPU1 で実行されると、CPU0 のパケット受信スレッドが 2 スレッドで 15.XGbps、4 スレッドで 19.XGbps にブーストされることがわかりました。
これは電源管理のせいですか?CPU1 がアイドル状態の場合、省電力モードで動作しますか? そうだとしても、CPU1 が CPU0 のパフォーマンスにどのように影響するのでしょうか? QPI について不明な点はありますか?
Q2!CPU1 の過負荷により、すべてのパケット受信パフォーマンスが低下する
2.1) 1 つのパケット受信スレッドが CPU0 で実行され、1 つのパケット受信スレッドが CPU1 で実行される場合、全体のパフォーマンスは 10Gbps です。各スレッドのパフォーマンスはほぼ同じで、5.X Gbps です。2.2) 2 つのパケット受信スレッドが CPU0 で実行され、2 つのパケット受信スレッドが CPU1 で実行される場合、全体のパフォーマンスは 13Gbps です。また、各スレッドのパフォーマンスはほぼ同じで、2.1、1.2、および 1.3 よりも低い 3.X Gbps です。
つまり、CPU0 と CPU1 の両方で実行されているスレッドを受信すると、すべてのスレッドが最大のパフォーマンスを達成できず、パフォーマンスはほぼ同じになります。
NUMA と QPI について知らないことがたくさんあると思いますが、これについて説明してくれる人はいますか? ありがとう