Linux (Intel Xeon x86_64) を実行しているネットワーク サーバーを実装している場合、多くの場合、ボトルネックは単一で常に同じ CPU コア (割り込みは常に同じ (CPU0) コアで発生する) になり、割り込み (IRQ) が発生します。ネットワークカードドライバーのコードを呼び出すネットワークカードの。単一ではなく、異なるプロセッサコアで(ランダムまたはラウンドロビンによって)割り込みが発生し、負荷が分散されるようにすることはできますか?
ただし:ハードウェア割り込みが 1 つのコアで完了しない限り、割り込みが完了する前にネットワーク デバイスで何らかの方法でジョブを完了したとしても、別のコアが原因ではない場合、次のようになります。
異なるコアで割り込みが発生するたびに、ネットワークカードとデータを交換し、特定の CPU コア (このコアのインデックスを持つバッファー) に関連するメモリに到達したデータを積み上げてから、割り込みを終了したい(IRQ) コード。したがって、スレッド間同期は避けたいと思います。各コアは、ネットワークカードに割り込むか、1 つのスレッドのみがコアにバインドされ、優先度がリアルタイムで与えられます。私は 1P-1C コンテナーを使用しており、そのキャッシュ ラインはすべて常にシングル コアの L1/L2 のみに属しています。また、キャッシュ同期 (CPUx L1/L2 <-> L3 <-> CPUy L1/L2) は必要ないため、10 倍の速度が得られます。
または、ハードウェア IRQ の代わりにソフト IRQ を使用する方がよいでしょうか?