web-dev-qa-db-ja.com

-rt(RT-Preempt)カーネルパッチがメインラインカーネルにデフォルトで含まれていないのはなぜですか?

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO によると、RT-PreemptパッチはLinuxを完全にプリエンプティブなカーネルに変換します。魔法は以下によって行われます:

  1. Rtmutexesを使用して再実装することにより、カーネル内のロックプリミティブ(スピンロックを使用)をプリエンプティブにします。
  2. つまり、spinlock_tとrwlock_tによって保護されているクリティカルセクションがプリエンプティブになりました。 (カーネル内の)プリエンプティブでないセクションの作成は、raw_spinlock_t(spinlock_tと同じAPI)を使用して引き続き可能です。
  3. カーネル内ミューテックス、スピンロック、およびrw_semaphoresの優先度継承を実装します。
  4. 割り込みハンドラーをプリエンプティブなカーネルスレッドに変換する:RT-Preemptパッチは、カーネルスレッドコンテキストでソフト割り込みハンドラーを処理します。これは、一般的なユーザースペースプロセスのようにtask_structで表されます。ただし、カーネルコンテキストでIRQを登録することもできます。
  5. 古いLinuxタイマーAPIを、高解像度カーネルタイマー用の個別のインフラストラクチャとタイムアウト用の1つに変換し、高解像度のユーザースペースPOSIXタイマーを実現します。

マルチタスクだけでなくリアルタイムであることの欠点はありますか?

4

Linuxカーネルは一般的な使用のためのカーネルの実装に焦点を合わせているため、-rt(RT-Preempt)カーネルパッチはカーネルメインラインにありません。マルチタスクは、LinusTorvaldsが実装を開始したときに選択したものです。

なぜカーネルがそのようになっているのか不思議です。答えは、Linusがこの方法を選択したためです。そして、なぜ彼はこの方法を選んだのですか?彼はそれがより良い方法、またはそれを実装するための達成可能な方法であると信じていたからです。

他のデザインコンセプトは実際のものよりも優れていると考える人もいます。しかし、それを言うことは不可能です。それぞれに独自の意見があり、複雑さと可能性のためにベンチマーク比較の方法がない場合があります。

LinusTorvaldsとAndrewTanenbaumの間には、モノリシックとマイクロカーネルについての古典的な議論があります。そして、それぞれがより良いモデルであると言う多くの議論があります。

同様に、マルチタスクとリアルタイムがあります。どちらがいいですか?それぞれに長所と短所があります。

全体として、メインラインカーネルにはリアルタイムのパッチが適用されていません。シンプル!これは、開発者の選択と信念によるものです。

1
vitorafsr

これは意見に基づいているので、それが価値があるものと考えてください。

エンジニアリング上の決定は、トレードオフのバランスを取ることです。 -rtパッチは、タイミングの処理における決定論に関するものです。それは物事が適切なタイミングで実行されることを確実にすることです。古いことわざを覚えておいてください:

リアルタイムとは、間違った時間に正しい答えが間違っているときです

しかし、典型的な使用法はリアルタイムではありません。 Vanilla Linuxは、この領域では通常の使用に十分適しているため、-rtパッチは必要ありません。 -rtパッチを使用すると、システムは通常の使用ではおそらく遅くなります。

-rtは通常のユーザーにとって有用なものを何も追加せず、通常のワークロードパフォーマンスを低下させるため、通常のカーネルディストリビューションには含まれていません。

-rtパッチの用途は確かにあるので、カーネルソースコードの標準部分として含まれているのは非常に良いことです。これは、カーネルを構築するときに行う選択にすぎません(カーネルを構築するときに、さまざまな領域で利用できる選択肢がたくさんあります)。 -rtパッチによってワークロードが改善された場合は、それが有効になっているカーネルを選択してください(または、状況に合わせて特別に作成してください)。

1
ghellquist