ARM
cortex A9
1つのコアが IRQ を処理するのに必要なオペコードの量を見積もりたいと思います。
私が Linux カーネルで作業していると仮定すると、 を呼び出して実行するのに必要な3.4
オペコードはいくつですか?irq
irq_handler
ARM
cortex A9
1つのコアが IRQ を処理するのに必要なオペコードの量を見積もりたいと思います。
私が Linux カーネルで作業していると仮定すると、 を呼び出して実行するのに必要な3.4
オペコードはいくつですか?irq
irq_handler
あなたの質問は、Linuxの割り込みレイテンシを計算する方法に関連しています。少なくとも、割り込みが始まるまでにかかる時間に興味があるかもしれません。ここでは、この側面を無視しirqs
ます。
簡単な方法は、a を切り替えてGPIO
、スコープを使用して割り込みを測定することです。複数回切り替えて、GPIO
さまざまなフェーズにかかる時間を確認することもできます。このWindow CE リンクは、レイテンシーの測定例を示しています。一部の割り込みコントローラ (IMX など) には、割り込み番号が特定の I/O ラインを上げたり下げたりする I/O 多重化モードがあります。または、行を切り替えるコードを追加することもできます (ルーチンについては以下を参照してください)。
プライマリ割り込み処理のソースはentry-armv.S にあります。使用する割り込みコントローラ用に定義されたマクロがあり、これらはファイルに依存し.config
ます。たとえば、プリエンプティブ割り込み、マルチ割り込みコントローラー、SMP などがあります。プライマリベクトルはentry-armv.Sの下部で定義されます。一般的な要点は、現在の動作モードが検査され、次に or のいずれ__irq_usr
か__irq_svc
が取られるということです。これらのルーチンには、状態を格納するための異なるプリアンプがありますが、どちらも最終的にirq_handler
マクロを呼び出します。には についての_irq_usr
ものcmpxchg
がありますが、指定して ARM 皮質を.config
、これは当てはまりません。主な違いは、ユーザー モードで IRQ が発生した後に可能なコンテキスト スイッチです。マシンはmach/entry-macro.S
、割り込みコントローラにアクセスして割り込み番号を取得するためのアセンブラ マクロを定義します。次に、最上位のカーネルディレクトリにある一般的なirq
処理コードにジャンプします。
したがって、2 番目の方法は、コードを検査して直接計算することです。objdump --disassemble
ソースを見て、カーネルをコンパイルしてから、vmlinuxイメージを実行してこれらのシンボルを探すと、おそらく簡単です。irq_handler
展開されたマクロが表示され、最終的に IRQ コードにジャンプするはずです。
ソースからわかるように、 もありTRACE_IRQFLAGS
ます。使用している Cortex A9 でこれが利用可能かどうかを確認できますmake menuconfig
(および入力/TRACE_IRQFLAGS
)。利用可能かどうかはわかりません。
などのバリエーションがあります。
スコープで測定すると、サービス中のジッターが表示されます。IRQ
説明書を調べると、通常、IRQ
サービスが提供されない可能性があることがわかります。たとえば、優先度の高い割り込みが常にプリエンプト/防止する場合IRQ
。厳しい締め切りに合わせて完全に最適化するには、おそらく両方を行う必要があります。
IRQ
多くの場合、全体にかかる時間は気にしませんが、IRQ
ラインが発生してから周辺レジスタの書き込み/読み取りまでの時間は気にしません。たとえば、FIFO
深さが制限されている可能性があり、IRQ の発生とFIFO
レジスタの読み取りの間のレイテンシがFIFO_Size x BPSFIFO
よりも大きい場合、オーバーフローの問題が発生します。
インフラストラクチャはFIQ
はるかに高速ですが、使用できるカーネル機能ははるかに少なくなります!
編集: Cortex A9テクニカルリファレンスには、付録Bに命令数があります。ほとんどのARM命令は、メモリロード/ストア、倍数、および分岐を除いて、ほとんどのアーキテクチャで単一サイクルです。上記の 3 番目と 4 番目の段落に従って、構成の Linux 割り込みを処理するための完全な命令パスを見つけ、それを追加するだけです。見積もりについては(元の質問が尋ねるように)、通常は単一のサイクルであるため、命令を数えることができます。
ソース コードを調べることでコア サイクルの理論上の最小数を計算できますが、実際に使用される数は、キャッシング、メモリ、およびメモリ コントローラーのパフォーマンスの影響、その時点で他のコアが実行していること、およびさまざまな影響により、はるかに確実ではありません。問題のARMプロセッサのマイクロアーキテクチャに依存するその他の要因。
デジタルスコープまたはパフォーマンスカウンターを使用して、システムの実際の割り込みレイテンシパフォーマンスを測定した方がよいと思います。
もちろん、ハード リアルタイム アプリケーションの場合、最悪の場合の割り込みレイテンシを知る必要があります。これには、これらすべての要因の最悪のケースが含まれます。