13

私は Linux デバイス ドライバーの初心者で、 と の正確な違いを知りたいと思っていtaskletますworkqueue。次の疑問があります。

  1. 割り込み/プロセス コンテキストで実行する場合、割り込み、タスクレット、およびワークキューはどのカーネル スタックを使用しますか?
  2. タスクレットとワークキューはどの優先度で実行され、その優先度を変更できますか?
  3. 独自のワーク キュー リストを実装する場合、それを個別にスケジュール/優先順位付けできますか?
4

1 に答える 1

14

タスクレット:

  • 古いです(約2.3だと思います)
  • 簡単でシンプルな API を持っている
  • 低遅延用に設計されています
  • スリープできません (ソフト IRQ コンテキストでアトミックに実行され、特定のタスクレットに対して、特定のプロセッサの複数の CPU で決して実行されないことが保証されています)

ワーク キュー:

  • 最近のもの (2.5 で導入)
  • 柔軟な API を持っている (より多くのオプション/フラグがサポートされている)
  • レイテンシが高くなるように設計されています
  • 眠れる

つまり、ハード 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 スレッドプールは、ナイス レベルが高いワーカー スレッドによって提供されます。

通常のスレッドプールと高優先度のスレッドプールは相互に作用しないことに注意してください。それぞれが個別のワーカー プールを維持し、ワーカー間の同時実行管理を実装します。

すべてのご質問にお答えすることはできませんが、参考になれば幸いです。

于 2013-08-19T20:53:53.723 に答える