web-dev-qa-db-ja.com

Linuxの「高速割り込み」

私の知る限り、Linuxには「高速割り込み」があります。これはSA_INTERRUPTフラグで要求されたものです。高速割り込みは、現在のCPUで他のすべての割り込みを無効にして実行されます。しかし、それは通常の割り込みハンドラーの動作(どこ)とどのように異なりますか?

5
user4340

良い記事があります ここ

Linuxカーネルの古いバージョンでは、「高速」割り込みと「低速」割り込みを区別するのに非常に苦労しました。高速割り込みは非常に迅速に処理できるものでしたが、低速割り込みの処理にはかなり長い時間がかかりました。遅い割り込みはプロセッサに十分な要求を与える可能性があり、処理中に割り込みを再度有効にすることは価値がありました。そうしないと、迅速な対応が必要なタスクが長時間遅れる可能性があります。

最新のカーネルでは、高速割り込みと低速割り込みの違いのほとんどがなくなりました。残っているのは1つだけです。高速割り込み(SA_INTERRUPTフラグで要求されたもの)は、現在のプロセッサで他のすべての割り込みを無効にして実行されます。 2つのプロセッサが同じIRQを同時に処理することは決してありませんが、他のプロセッサは引き続き割り込みを処理できることに注意してください。

では、ドライバーはどのタイプの割り込みを使用する必要がありますか?最新のシステムでは、SA_INTERRUPTは、タイマー割り込みなど、いくつかの特定の状況での使用のみを目的としています。他の割り込みを無効にして割り込みハンドラを実行する強い理由がない限り、SA_INTERRUPTを使用しないでください。

したがって、唯一の違いはあなたが言及したものです。その高速割り込みハンドラーは、パフォーマンスを向上させるために、他のすべての割り込みハンドラーを無効にして実行します。

2
Justin Ethier

ARM CortexA57を見ているだけです。ARMアーキテクチャでは、高速割り込みには8つの専用レジスタがあるため、割り込みエントリの両方でコンテキストスイッチ時間が最小限に抑えられます。これが、SOCサプライヤが提供するLinuxに統合されているかどうか、またはどのように統合されているかはまだわかりません(最終的に提供されると仮定します)。

0
cageordie