このクエリは、マルチコア プロセッサでのパケット処理に関連しています。パケット処理は、Linux または純粋なデータパスのいずれかで行うことができます。パケット処理アプリケーションが Linux 上にある場合、高いパフォーマンスを得るには割り込みベースのパケット処理でなければなりませんが、パケット処理が純粋なデータパス (Linux なし) である場合、ポーリングを使用してパフォーマンスを向上させる必要があるというのは本当ですか? はいの場合、なぜ/どのように?
2 に答える
ポーリング
私たちはもうそこにいますか?もうそこにいますか?もうそこにいますか?もうそこにいますか?もうそこにいますか?..。割り込み
完了時にpingを実行します。
したがって、割り込みによりCPUは他の作業を実行でき、ポーリングは割り込みのオーバーヘッドを回避します(1秒間に数万回割り込みが発生する場合に重要です)。さまざまな種類の高性能。
ハイブリッドアプローチがあることに注意してください。つまり、割り込みに戻る前に、数ミリ秒の割り込み後にポーリングします。
マルチタスク オペレーティング システムを使用している場合、ポーリングにはレイテンシ ペナルティが伴います (別のタスクの実行中にパケットが到着した場合)。したがって、そのようなシステムで割り込みベースのアプローチを使用すると、スループットを向上させることができます。これは、割り込みメカニズムが他のプロセスをブロックすることなく、データ パスの優先度を上げることができるためです (優先度の高いタスクでのポーリングは、優先度の低いタスクをすべてブロックするため)。
OS のないベアメタル組み込みシステムで実行している場合、CPU は常に新しいパケットのチェックや受信したパケットの処理に費やすことができるため、ポーリングを使用して最高のスループットを得ることができるはずです。これにより、レイテンシが最小限に抑えられ、パケット処理に最大のサイクルが割り当てられます。割り込みハンドラを呼び出すとサイクルが無駄になり、この場合はさらに複雑になります。CPU では他に何も実行されていないため、使用するサイクルは、データ パスに向かう使用されていないサイクルです。
これは、アプリケーションの全体的なパフォーマンスが向上したり、特定の実装がポーリングにより高速になったりすることを意味するものではないことに注意してください。これは、ポーリングによって可能な最大スループットが達成されることを意味するだけです。たとえば、アプリケーションが多くの処理を行う必要がある場合、DMA と割り込みを使用するとパフォーマンスが向上する可能性があります。特定のケースでポーリングが高速かどうかは、そのケースのアプリケーション特性に大きく依存します。
この質問の「マルチコア」の側面が何であるかはわかりませんが、CPU を I/O ポーリング専用にして、組み込みマルチコア システムで最小限のレイテンシを得ることが理にかなっていますが、これも非常にアプリケーション固有です。
ninjalj が指摘しているように、ハイブリッド アプローチを使用して、より複雑なシナリオで全体的なパフォーマンスを最適化できます。上記は単純な場合にのみ当てはまります。