LinuxでSCHED_SOFTIRQの機能は何ですか?

LinuxでSCHED_SOFTIRQの機能は何ですか?

誰がこのSoftirqを起動しますか?マティックごとに実行されますか(タイマ割り込みに基づいていますか?)

これにより、カーネルが実行可能なプロセスをスケジュールできますか?それでは、現在の実行がプロセスコンテキスト(dispatch()以降)にあるので、優先順位の低いSoftirq(HR_TIMER、RCU_SOFTIRQ)のハンドラはどのように実行されますか?

答え1

カーネル文書によると:

ソフトウェア割り込みコンテキスト:SoftirqとTasklet
保留中としてマークされているすべての「ソフトウェア割り込み」(通常、ハードウェア割り込みによって)は、システムコールがユーザースペースに戻るか、またはハードウェア割り込みハンドラが終了するたびに実行されます(kernel / softirq.c)。

実際の割り込み処理のほとんどはここで行われます。 SMPへの移行初期には、マルチCPUを活用できなかった「下半分」(BH)だけ存在した。マッチと鼻水で作られた時計台コンピューターから離れて、しばらくして、私たちはこの制限を捨てて「ソフト割り込み」に切り替えました。

include/linux/interrupt.hには様々なSoftirqがリストされています。非常に重要なSoftirqはタイマーSoftirq(include/linux/timer.h)です。これを登録すると、特定の時間内に関数を呼び出すことができます。

同じSoftirqが複数のCPUで同時に実行されるため、Softirqを処理することはしばしば苦痛です。したがって、タスクレット(include/linux/interrupt.h)がより一般的に使用されます。これは動的に登録可能であり(必要に応じて多くを持つことができることを意味します)、他のタスクレットが可能であっても、すべてのタスクレットが1つのCPUでのみ実行できることを保証します。同時に実行しますが、いつでも実行できます。
警告する

「tasklets」という名前は誤解を招く。 「tasklets」とは何の関係もなく、おそらくAlexey Kuznetsovが当時飲んでいた悪いウォッカともっと関連があるでしょう。

in_softirq() マクロ (include/linux/interrupt.h) を使用して、現在 Softirq (またはミニスレッド) にあることを確認できます。
警告する

bhロックが維持されると、偽の肯定が返されます(下記参照)。

関連情報