4

ARM cortex A91つのコアが IRQ を処理するのに必要なオペコードの量を見積もりたいと思います。

私が Linux カーネルで作業していると仮定すると、 を呼び出して実行するのに必要な3.4オペコードはいくつですか?irqirq_handler

4

2 に答える 2

7

あなたの質問は、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)。利用可能かどうかはわかりません。

などのバリエーションがあります。

  1. ユーザー/SVC モードからの割り込み。
  2. 現在実行中のその他の割り込み。
  3. 中断されたコード (stm/ldm など) は、完了するまでに時間がかかる場合があります。
  4. ISR のページ フォールト。一部の Alsa ドライバーは、少なくとも一部の Linux バージョンで未割り当てのページでエラーになる可能性があります。
  5. ISR の条件。

スコープで測定すると、サービス中のジッターが表示されます。IRQ説明書を調べると、通常、IRQサービスが提供されない可能性があることがわかります。たとえば、優先度の高い割り込みが常にプリエンプト/防止する場合IRQ。厳しい締め切りに合わせて完全に最適化するには、おそらく両方を行う必要があります。

IRQ多くの場合、全体にかかる時間は気にしませんが、IRQラインが発生してから周辺レジスタの書き込み/読み取りまでの時間は気にしません。たとえば、FIFO深さが制限されている可能性があり、IRQ の発生とFIFOレジスタの読み取りの間のレイテンシがFIFO_Size x BPSFIFOよりも大きい場合、オーバーフローの問題が発生します。

インフラストラクチャはFIQはるかに高速ですが、使用できるカーネル機能ははるかに少なくなります!

編集: Cortex A9テクニカルリファレンスには、付録Bに命令数があります。ほとんどのARM命令は、メモリロード/ストア、倍数、および分岐を除いて、ほとんどのアーキテクチャで単一サイクルです。上記の 3 番目と 4 番目の段落に従って、構成の Linux 割り込みを処理するための完全な命令パスを見つけ、それを追加するだけです。見積もりについては(元の質問が尋ねるように)、通常は単一のサイクルであるため、命令を数えることができます。

于 2013-02-03T18:41:32.660 に答える
6

ソース コードを調べることでコア サイクルの理論上の最小数を計算できますが、実際に使用される数は、キャッシング、メモリ、およびメモリ コントローラーのパフォーマンスの影響、その時点で他のコアが実行していること、およびさまざまな影響により、はるかに確実ではありません。問題のARMプロセッサのマイクロアーキテクチャに依存するその他の要因。

デジタルスコープまたはパフォーマンスカウンターを使用して、システムの実際の割り込みレイテンシパフォーマンスを測定した方がよいと思います。

もちろん、ハード リアルタイム アプリケーションの場合、最悪の場合の割り込みレイテンシを知る必要があります。これには、これらすべての要因の最悪のケースが含まれます。

于 2013-02-03T19:38:54.103 に答える