ウィーン発--20年の開発期間を経て、「リアルタイムLinux」(「PREEMPT_RT」)がついに、ようやくメインラインカーネルに統合された。Linus Torvalds氏は「Open Source Summit Europe」に参加した際に、PREEMPT_RTを賞賛した。なぜこれが重要なのだろうか。まずは、「リアルタイムOS」(RTOS)とは何か、どのような利点があるのかを説明しよう。
RTOSとは
RTOSは、処理速度が重視されるタスクを正確かつ確実に処理できるように設計された特殊なOSだ。「Windows」や「macOS」などの汎用OSと異なり、多くの場合、ミリ秒単位やマイクロ秒単位で測定される厳しい時間制約の中でイベントに応答し、データを処理するように構築されている。著名なリアルタイムLinux開発者であり、GoogleのエンジニアでもあるSteven Rostedt氏は、「リアルタイムとは最速の最悪のシナリオだ」と表現する。
これは、RTOSの本質的な特徴が決定論的な動作であるということだ。RTOSは、重要なタスクを指定された期限内に確実に完了させる。高速処理がRTOSの特徴だと思っている人が多いが、そうではない。RTOSで重要なのはスピードではなく、信頼性だ。この予測可能性は、タイミングが肝要な用途、例えば産業用制御システム、医療機器、航空宇宙機器などで重要になる。
現在使用されているリアルタイムOSの一例が、「VxWorks」だ。同OSは米航空宇宙局(NASA)の火星探査機で機体の誘導に使用されているほか、旅客機の「Boeing 787 Dreamliner」では、航空電子工学システムを制御して飛行制御のリアルタイム応答性を確保するために使われている。リアルタイムOSはほかにも「QNX Neutrino」があり、こちらは自動車のインフォテインメントや先進運転支援システム(アンチロックブレーキなど)で広く使用されている。
リアルタイムLinuxの歴史
リアルタイムLinuxのコードは、次の「Linux 6.12」カーネル以降、すべてのLinuxディストリビューションに組み込まれる。これにより、近い将来、Linuxを搭載したミッションクリティカルなデバイスや産業用ハードウェアが増えるだろう。しかし、ここに至るまでには長い時間がかかった。
リアルタイムLinuxの物語が始まったのは、Linuxでリアルタイムアプリケーションをサポートする必要性が高まった1990年代後半のことだ。当初の取り組みでは、Linuxカーネルと並行して動作する別のリアルタイムカーネルの開発に重点が置かれた。こうした取り組みには、カンザス大学の「KURT」やミラノ大学の「RTAI」、ニューメキシコ工科大学の「RTLinux」などの学術プロジェクトがあった。
Linuxカーネルの上級開発者であるIngo Molnar氏は2004年、これらのテクノロジーの断片を集めて再構築する取り組みに着手し、リアルタイム・プリエンプション・パッチ・セットPREEMPT_RTの基礎を築いた。
これは初期のリアルタイムLinuxソリューションと異なり、リアルタイムカーネルを別に作成するのではなく、既存のLinuxカーネルに変更を加えるというアプローチだった。2006年には、Linus Torvalds氏にこう言わせるほど大きな支持を獲得した。「Linuxでレーザーを制御するのは狂気の沙汰だが、この部屋にいる人間は皆、それなりに狂気じみている。したがって、Linuxを使用して産業用溶接レーザーを制御したいなら、PREEMPT_RTを使えばいい」
2009年には、Thomas Gleixner氏やPeter Ziljstra氏、Rostedt氏などの少数のカーネル開発者チームが、以前のプロトタイプ開発をツリー外の単一のパッチセットに統合する作業を完了した。それ以来、多くの企業がこのパッチセットを使用して、ミリ秒単位の精度でのハードリアルタイム処理が求められる産業用システムを構築するようになった。
プロジェクトが前進するにつれて、リアルタイムLinuxの多くの要素がカーネルに組み込まれていった。Rostedt氏は筆者に対し、リアルタイムが今回初めてLinuxに組み込まれたと言うのはある意味で間違いだ、と語った。多くの機能が長年にわたりメインストリームLinuxに組み込まれてきた。実際に、一部の機能は、われわれが毎日使用しているLinuxに不可欠なものだ。
例えば、あまり知られていない「NO_HZ」は、アイドル時のシステムの電力消費を削減する。NO_HZによって、Linuxは膨大な数のCPUを搭載したマシンでも効率的に動作することができる。「Linuxはリアルタイムパッチによって計り知れないほど大きく改善された」とRostedt氏は強調する。「現在、Linuxがデータセンターで稼働しているのは、ひとえにわれわれの取り組みの成果だ」
したがって、NO_HZがなければ、Linuxが事実上すべてのデータセンターで使われることにはならなかっただろう。これは、クラウドがLinuxによって稼働している理由でもある。こうしたリアルタイムの貢献がなかった場合、どのような世界になっていたかはよく分からないが、現在とは似ても似つかない世界だったはずだ。
リアルタイムLinuxが、当初は誰も想像していなかった形で役立つことも証明された。Rostedt氏は当時を次のように振り返る。「2005年に、リアルタイムのバグレポートを受け取ったので、パッチを送信して『これが修正だ。適用できるか』と伝えたところ、その相手は『自分が何をしているのか分からない』という調子だった。『ちょっと待って。あなたはカーネル開発者ではないのか』と返信すると、彼は『私はギタリストだ』と答えた」
確認してみると、この男性が初期のリアルタイムパッチを使用していた理由は、低遅延オーディオ接続用のサウンドサーバー「JACK」を使っていたからだった。彼は多くのミュージシャンと同じように、高級な機器を購入するお金がなかったために、JACKを利用していた。Rostedt氏はこう続ける。「彼はLinuxとJACKが搭載された低価格のノートPCを購入した。これは、リアルタイムパッチによって、ハードドライブの書き込み中の音飛びを防ぎ、良好な音質で録音ができるからだ」
多くのミュージシャンが、高品質の音源を安く作成できるという理由で、初期のリアルタイムLinuxを使っていたことが分かった。誰も予想していなかった用途だ。これまでにメインラインカーネルに統合されてきたリアルタイムLinuxの機能には、他にも以下のものがある。