SourceForge.JP: Open Source Software

LoginCreate AccountAdd BookmarkHelp

OpenSource Downloads

(7,965) Cabos
(3,068) 7-Zip
(2,483) Tera Term
(2,009) CrystalDiskInfo
(1,669) HandBrake Japanese Language Version
(1,252) CrystalDiskMark
(921) ffdshow
(669) Tween
(667) Boookends
10  (569) Amateras
11  (563) ギコナビ
12  (502) MergeDoc
13  (436) VirtualDubMod-jp
14  (422) えこでこツール
15  (375) SMPlayer
More >>

最近ブックマークされた記事

Linux 2.6 Real Time Kernel

2004年11月30日 06:18
  • スラッシュドットにタレコむ
  • あとで読む
この作業の目的は、割込みレイテンシをさらに縮小し、2.6のカーネル・シリーズのタスク・プリエンプション・レイテンシを、画期的に縮めることである。我々の広大な目的は、ワーストケースのIRQ disableによって、限界のあるプリエンプション・レイテンシを達成することである。

我々は、2.6.9-rc3-mmカーネル・シリーズにこれをポーティング中である。一般からフィード・バックを貰い、同様のカーネル・エンハンスメント作業を、他と共有させたいと考えて、この段階で仕事を示すことにした。

Sven-Thorsten Dietrichからの、[ANNOUNCE] Linux 2.6 Real Time Kernelと題したLKMLへの10月9日のポストである。

最近では、2.6のKernelプリエンプションを実装したIngo Molnarが、「Voluntary」プリエンプションPatchを公開しているほか、LKMLではカーネルのRealTime化や割込み処理のレイテンシ(遅延)縮小に関する議論が増えてきている。

Sven-Thorsten Dietrichのアナウンスは以下のように続く。

最初に

これらのRTエンハンスメントは次のように、いくつかの機能を集積したものである。

  • Ingo Molnarの「Voluntary」プリエンプション
  • Scott Wood と Ingo Molnarによる、IRQスレッドpatch
  • Ingo MolnarによるBKL mutex patch (MV extension付)
  • Germany's Universitaet der Bundeswehr, MunichからのPMutex
  • mutexes付spinlockを置き換えるMontaVistaのmutexアブストラクト・レイヤ

なぜLinuxでのRTサポートなのか

我々の目的は、Linux 2.6カーネルを高機能マルチメディア・アプリケーションと、非常に速く、タスク・レベルで信頼できる制御機能を要求するアプリケーションに対して使用可能にすることである。

AV企業は、Linuxの上でHDTVに関連する技術を構築している。また、デスクトップ・システムはますます同様のアプリケーションに使用される。

携帯電話、PDAおよびMP3プレーヤは、数多くのスレッドを要求する高度に統合されたデバイスへと、互いに近寄ってきている。これらのスレッドは多くの通信プロトコル(IP、Bluetooth、802.11、GSM(CDMA)などをサポートする。特にセルラー・ベースのプロトコルは、デッドラインに非常に敏感な操作が、確実に作動することを要求する。

GPSの処理は、例えば、厳しいリアルタイムタスクと保証されたKHzレベルの周波数割込み処理を要求する。セント・ヘレンズ火山の内部のように、たどり着けないか危険な場所のLinuxベースのリモート・コントロールGPSステーションは、IPによって実際のデータを流す。

さらにLinuxはレーダ処理、ファクトリー・オートメーション・システム、「ループ内の」プロセス・コントロール・システム、医療、および計測システム、自動運転制御システムといった、従来のリアルタイム制御環境でも、ますます利用されている。これらのシステムは多くの場合、数十から数百マイクロ秒のレンジに対する、タスク・レベルでのレスポンス要求を持っている。それは現在の2.6 Linux技術では達成可能ではない、保証されたタスク・レスポンス・レベルである。

他の先行作業

Micro-Kernelによるいくつかの解決策がある。それらは必要な性能を達成することができるが、これらの手段には2つの一般的な懸念事項がある。

  1. システム全体の複雑さをを含めて構築する方法と、アプリケーション・デザイン・レベル複雑さに対応する、2つの別なカーネル環境がある。
  2. 法的論議

上記に挙げた以前からのカーネル・エンハンスメントに従って、我々の仕事は、既存のアプリケーションとドライバに対して、透過であることを目指している。

最新のPatchは以下にある。

ftp://source.mvista.com/pub/realtime/

Ingo Molnar

素晴らしい!(cool!)

Ingo Molnarが答えた。

基本的には、最も大きな問題は技術自体ではなく、それのLinuxへ適切なインテグレーションである。2.4のRTパッチ(TimeSysとあなたのもの)からわかる様に、単に完全にプリエンプティブなカーネルへの道を歩くことは有益ではない。なぜなら、それは結局Linuxツリーとして維持できない分岐を作り出すほどの、大規模で深いパッチを多数生成することになるからである。

別のアプローチは、私が現在、「Voluntary」プリエンプションのPatchで行っているものである。多くの特別な機能を加えることを実際にせずに、レイテンシ目的のためにジェネリック・カーネルを改善することである。今ちょうどここに、-mmツリーで起こっていることがある。

  • 一般的なirqサブシステム: irqスレッドは単純で、200ライン程度までである。アーキテクチャ依存のコードは、これに追加することにする。3つの異なる実装を提供しても意味がない。1つを取り、それをうまく生かすことを支援すべきである。
  • preemptible BKL: mutexへのスピンロックの安全で遅い変換を許可するという、-mmの新しいデバッグ・インフラがこれに関連づけられる。BKL(Big Kernel Lock)の場合には、この変換が永久であると期待している。ほとんどの他のスピンロックについては、それはオプションだろう。しかし、デバッギング・コードは今までどおり使用することができる。
  • 様々なFIXとレイテンシの改善: 確実に実行することができるただ一つのコードがユーザスペース・コードで、カーネル・スペースでRTアプリケーションをたたく瞬間が高いレイテンシに晒される場合、mutexベースのカーネルはほとんど役に立たない。

2、3の提案がある。どのようにしてこのインテグレーションをスピードアップするか。-mmツリーに、これらの素材を再提供してはどうだろうか。また、私がパッチで(まだ)見ていない部分は、より難しい素材となっているのではないだろうか。

  • CPUごとのデータ構造(get_cpu_var())の取り扱い
  • RCUとsoftirqのデータ構造
  • IRQフラグの取り扱い

これらは基本的に、UPへの影響がSMPに対するのと同じ程度の正確さが必要になる問題である。これらがなくては、カーネルはまだ「完全にプリエンプティブな」カーネルではない。これらはインフラストラクチャー変更をまた必要とする。従って、spinlock -> mutex変換のような追加作業も必要となる。

その結果恐らく、mutex Patchは「ついに」上流に行くことができるものとなるだろう。それはカーネルを「完全にプリエンプティブ」にする「最終ステップ」となるものである。

この後、様々な技術的な問題が議論されたのだが、この続きは次回へ。

(2005年4月2日 ミススペルを訂正)

カーネル2.6のリリ-ス(その14)-(日高亜友)
2007年07月01日 19:05 更新