私は Linux デバイス ドライバーの初心者で、 と の正確な違いを知りたいと思っていtasklet
ますworkqueue
。次の疑問があります。
- 割り込み/プロセス コンテキストで実行する場合、割り込み、タスクレット、およびワークキューはどのカーネル スタックを使用しますか?
- タスクレットとワークキューはどの優先度で実行され、その優先度を変更できますか?
- 独自のワーク キュー リストを実装する場合、それを個別にスケジュール/優先順位付けできますか?
私は Linux デバイス ドライバーの初心者で、 と の正確な違いを知りたいと思っていtasklet
ますworkqueue
。次の疑問があります。
- 割り込み/プロセス コンテキストで実行する場合、割り込み、タスクレット、およびワークキューはどのカーネル スタックを使用しますか?
- タスクレットとワークキューはどの優先度で実行され、その優先度を変更できますか?
- 独自のワーク キュー リストを実装する場合、それを個別にスケジュール/優先順位付けできますか?
タスクレット:
ワーク キュー:
つまり、ハード IRQ コンテキストの外部で実行する必要がある、優先度が高く、待ち時間が短いアトミック タスクには、タスクレットを使用します。
(それぞれの no-バージョンの代わりに) tasklet_hi_enable
/を使用して、タスクレットである程度の優先度を制御できます。この IBM ページから:tasklet_hi_schedule
_hi
通常の優先順位のスケジュールは、TASKLET_SOFTIRQ レベルの softirq を介して実行されます。高優先順位は、HI_SOFTIRQ レベルの softirq を介して実行されます。
...
優先度の高いベクトルのタスクレットが最初に処理され、次に法線ベクトルのタスクレットが処理されます。各 CPU は、独自の通常の高優先度の softirq ベクトルを保持していることに注意してください。
ワーク キューでは、作成時にalloc_workqueue
(create_workqueue
は非推奨) を使用し、より高い優先度を要求するフラグを渡すことができます。
WQ_HIGHPRI:
highpri wq の作業項目は、ターゲット gcwq の highpri スレッドプールにキューイングされます。Highpri スレッドプールは、ナイス レベルが高いワーカー スレッドによって提供されます。
通常のスレッドプールと高優先度のスレッドプールは相互に作用しないことに注意してください。それぞれが個別のワーカー プールを維持し、ワーカー間の同時実行管理を実装します。
すべてのご質問にお答えすることはできませんが、参考になれば幸いです。