- ARMプロセッサのirqレイテンシをどのように見積もることができますか?
- irqレイテンシの定義は何ですか?
3 に答える
Interrupt Request (irq) latency is the time that takes for interrupt request to travel from source of the interrupt to the point when it will be serviced.
Because there are different interrupts coming from different sources via different paths, obviously their latency is depending on the type of the interrupt. You can find table with very good explanations about latency (both value and causes) for particular interrupts on ARM site
You can find more information about it in ARM9E-S Core Technical Reference Manual:
4.3 Maximum interrupt latency
If the sampled signal is asserted at the same time as a multicycle instruction has started its second or later cycle of execution, the interrupt exception entry does not start until the instruction has completed.
The longest LDM instruction is one that loads all of the registers, including the PC.
Counting the first Execute cycle as 1, the LDM takes 16 cycles.
• The last word to be transferred by the LDM is transferred in cycle 17, and the abort status for the transfer is returned in this cycle.
• If a Data Abort happens, the processor detects this in cycle 18 and prepares for the Data Abort exception entry in cycle 19.
• Cycles 20 and 21 are the Fetch and Decode stages of the Data Abort entry respectively.
• During cycle 22, the processor prepares for FIQ entry, issuing Fetch and Decode cycles in cycles 23 and 24.
• Therefore, the first instruction in the FIQ routine enters the Execute stage of the pipeline in stage 25, giving a worst-case latency of 24 cycles.
and
Minimum interrupt latency
The minimum latency for FIQ or IRQ is the shortest time the request can be sampled by the input register (one cycle), plus the exception entry time (three cycles). The first interrupt instruction enters the Execute pipeline stage four cycles after the interrupt is asserted
レイテンシーを中断するには、次の 3 つの部分があります。
- 割り込みコントローラーが割り込み自体をピックアップします。最新のプロセッサはこれを非常に迅速に行う傾向がありますが、デバイスがピンであることを通知してから割り込みコントローラーがそれを取得するまでにはまだ時間がかかります.1nsであっても、時間です[または割り込みを通知する方法が何であれ].
- プロセッサが割り込みコード自体の実行を開始するまでの時間。
- 割り込みを処理するはずの実際のコードが実行されるまでの時間 - つまり、プロセッサがどの割り込みを割り出し、ドライバーコードなどのどの部分が割り込みを処理する必要があるかを判断した後です。
通常、オペレーティング システムは 1 に影響を与えません。オペレーティング システムは確かに 2 に影響を与えます。たとえば、オペレーティング システムは割り込みを無効にすることがあります [たとえば、何かを変更するなどの重要な操作に割り込みが干渉するのを避けるためです。割り込み処理で、または新しいタスクをスケジュールするとき、または割り込みハンドラーで実行するときでさえ。一部のオペレーティング システムでは、割り込みが数ミリ秒間無効になることがありますが、優れたリアルタイム OS では、最大でもマイクロ秒を超えて割り込みが無効になることはありません。
そしてもちろん、割り込みハンドラーの最初の命令が実行されてから、実際のドライバー コードまたは同様のものが実行されるまでにかかる時間は、かなりの数の命令になる可能性があり、オペレーティング システムはそれらすべてを担当します。
リアルタイムの動作では、「最悪の場合」が問題になることがよくあります。非リアルタイム OS では、全体の実行時間の方がはるかに重要です。 「割り込みを有効にしてから割り込みを無効にする」という指示に従って、Linux または Windows タイプの OS はそうするのを選ぶかもしれません。
Mats と Nemanja は、割り込みの待ち時間に関する良い情報を提供しています。Mats から提供された 3 つの問題に加えて、もう 1 つ追加する問題が 2 つあります。
- その他の同時/準同時割り込み。
- 割り込みのマスキングにより、OS レイテンシが追加されました。編集:これはMatsの回答にありますが、あまり説明されていません。
単一のコアが割り込みを処理している場合、複数の割り込みが同時に発生すると、通常は何らかの解決優先度があります。ただし、優先割り込み処理が有効になっていない限り、割り込みハンドラで割り込みが無効になることがよくあります。したがって、たとえば、遅い NAND フラッシュ IRQ が通知されて実行され、その後イーサネット割り込みが発生すると、NAND フラッシュ IRQ が完了するまで遅延する可能性があります。もちろん、優先割り込みがあり、NAND フラッシュ割り込みを懸念している場合、イーサネットが優先されると、実際には事態が悪化する可能性があります。
2 番目の問題は、メインライン コードが割り込みフラグをクリア/セットするときです。通常、これは次のような方法で行われます。
mrs r9, cpsr
biceq r9, r9, #PSR_I_BIT
Linux ソースのarch/arm/include/asm/irqflags.hで、メイン ライン コードで使用される多くのマクロを確認してください。典型的なシーケンスは次のようになります。
lock interrupts;
manipulate some flag in struct;
unlock interrupts;
struct
ページ フォールトが発生すると、非常に大きな割り込みレイテンシが発生する可能性があります。ページ フォールト ハンドラが実行されている間、割り込みはマスクされます。
Cortex-A9には、割り込みをマスクしないことでこれを防ぐことができるロックフリー命令がたくさんあります。よりも優れたアセンブラ命令のため。この 2 番目の問題は、ldm/stmタイプの命令による IRQ レイテンシによく似ています (これらは、実行するのに最も長い命令です)。swp/swpb
最後に、技術的な議論の多くはゼロ待機状態のRAM を前提としています。キャッシュをいっぱいにする必要がある可能性が高く、メモリ データ レート (おそらく 2 ~ 4 マシン サイクル) がわかっている場合、最悪の場合のコード パスはこれを掛け算します。
SMP 割り込み処理、優先割り込み、およびロック フリーのメイン ラインがあるかどうかは、カーネルの構成とバージョンによって異なります。これらはOSの問題です。その他の問題は、CPU/SOC 割り込みコントローラーおよび割り込みコード自体に固有のものです。