コンピュータオーディオの専門家がコンピュータがリアルタイムで動作するというとき、それは、ほとんど感知できない遅延で動作している、ということです。コンピュータは何かを一瞬で行うことはできず、入力とその出力を待つ時間のことをレーテンシー、遅延と呼びます。入力と出力の間の遅れが存在しないように知覚される、(別の言葉で言うとコンピュータが'リアルタイムで応答する')ためには、遅延は小さくなければいけません。
オーディオ処理(それは毎秒、一貫して繰り替えされる量のデータを持ちます)のように、周期的な作業にとって、低遅延は望ましいことですが、一貫した遅延であることが、通常はより重要です。このように考えてください:ずっと昔、北アメリカでは牛乳は専門の配達員によって家庭に配られました。牛乳配達員は中くらいの遅延を持ちますが一貫したスケジュールを持ち、7日に1回、まわってくると考えてください。あなたは牛乳をどれだけ買うか、計画することができ、すぐになくならないように飲むのをひかえることもできます。さて、牛乳配達員が、低遅延ですが、一貫しないスケジュールを持ち、1日から4日でまわってくるものとしましょう。あなたは牛乳をどれだけ買うか、どのように飲むのをひかえるか、全く見当がつかないでしょう。あるときは牛乳がありすぎ、あるときは底をついてしまいます。オーディオ処理と生成ソフトウエアはこのように振る舞います。もし、遅延の量が一貫していれば、それにしたがって計画できます。遅延が一貫していないとき、それが大きくても小さくても、ときにはデータが多すぎたり、ときには不足したりします。もし、アプリケーションがオーディオデータに不足すると、オーディオ信号の中に雑音か、静寂が生まれ、いずれも、よいものではありません。
ある程度、低遅延であることは重要です。あなたのコンピュータが、今起きていることに、気がつかないほど迅速に反応できるためです。重要なのは、8 ms の遅延と 16 msの遅延は人間にとってほとんど区別できないのに比べて、大きな遅延を許せば、コンピュータはより一貫した動作ができ、そちらの方がより重要だということです。
'システムモニタ'アプリケーションを開いたことがおありなら、いつもたくさんの'プロセス'が動いていることに気がつかれたでしょう。これらのうちのいくつかのプロセスは、プロセッサを必要とし、いくつかはただ、何かが起きるのを待っています。一度に走ることのできるプロセスの数を増やすために多くの現代のCPUは1つ以上の 'コア'を持ち、一度により多くのプロセスが評価されることができます。この改善があっても、プロセスの数は存在するコアの数より多いのが普通です。私のコンピュータは今、196プロセスと、たった3つのコアを持ちます。どのプロセスが、いつ、実行する機会を得るかを決める手段が必要で、この仕事はオペレーティングシステムに任されています。
Fedora LinuxのようなLinuxシステムでは、オペレーティングシステムの中心、(カーネルと呼ばれます)は、どのプロセスがいつ実行する機会を得るかを決める権限を持ちます。この権限は、'スケジューリング'と呼ばれます。プロセッサへのアクセスをスケジュールすることはプロセッサスケジューリングと呼ばれます。カーネルは、多くの他のもののスケジューリングも行います。例えば、メモリアクセス、ビデオハードウエアアクセス、オーディオハードウエアアクセス、ハードディスクアクセス、などです。これらのスケジューリング作業で使われるアルゴリズム(手続き)はそれぞれ異なり、ユーザの要求と使われるハードウエアによって、変えることもできます。例えば、ハードディスクは、どのプロセスが最初に読み出しができるかを決めるのに、ディスク上のデータの位置を考慮するのが妥当です。プロセッサの場合、これは無関係ですが、他に考慮すべきことがたくさんあります。
標準のLinuxカーネルで使うことのできるスケジューリングアルゴリズムはたくさんありますが、ほとんどのユーザにとって、'フェアキューイング'システムが適当です。これは、すべてのプロセスがプロセッサの等しい量の時間を得ることを保証します。これは、オーディオ作業には向きません。もしあなたがライブコンサートを録音しており、'PackageKit'の更新マネージャが開始したとき、PackageKitが平等なプロセッサ時間を得るかはどうでもよいでしょう。オーディオができる限り正確に録音されることがずっと重要です。さらに、あなたがライブコンサートを録音しており、あなたのコンピュータが、中断されない、高品質のオーディオを提供する一方、モニター、キーボード、マウスを更新するだけの速さを持たない場合、あなたはモニタ、キーボード、マウスの代わりに、オーディオを望むでしょう。実際、あなたがオーディオのとても小さな部分を見逃したとしたら、それは永遠に失われてしまうのです。
Linuxカーネルの'リアルタイムパッチ'があり、それは高い優先度を要求するあるプロセスを、プロセッサが非平等にスケジュールするのを可能とします。'パッチ'という言葉は、これがほんの部分的なソリューションであるかのように聞こえますが、実のところは、この種の非平等なスケジューリングを可能とするプログラムコードは標準のカーネルには含まれていない事実を意味します。標準のカーネルコードは、このコードを'つぎあて'されないといけないのです。
リアルタイムカーネルのデフォルト動作は、やはり、'フェアキューイング'をデフォルトで使うというものです。これは、ほとんどのプロセスは一貫した低遅延を必要としないので、よいことです。特別なプロセスだけが、高優先度のスケジューリングを要求するように設計されます。各プロセスは優先度番号を与えられ、(あるいは要求し、)リアルタイムカーネルは常にプロセッサ時間を最も高い優先度番号を持つプロセスに与えます。そのプロセスが、すべてのプロセッサ時間を使い尽くすとしてもです。これは、通常のアプリケーションに不利になります。高優先度のプロセスが走っている時は、残りのシステムは正しく動作することができないことがあります。極端な(そしてとてもまれな!)場合、リアルタイムプロセスがエラーになって、すべてのプロセッサ時間を使い尽くして、他のプロセスが走るのを禁止する、つまりあなたをコンピュータからロックアウトすることがあります。こんなことが起きないように防止措置がとられていますが、よくあるように、保証はありません。あなたがリアルタイムカーネルを使うとき、あなたはシステムクラッシュのより高い危険に自らをさらしているのです。
その理由から、リアルタイムカーネルは、サーバとして動作するコンピュータでは使うべきでありません。
最後に、リアルタイムスケジューリングには2つの異なる種類があります。Linux カーネルは、最も極端な場合でもソフトリアルタイムしか使いません。この意味するところは、プロセッサと他のスケジューリングアルゴリズムが、高優先度のプロセスを優先するように最適化されているとしても、絶対的な動作時間の保証はないということです。リアルタイムカーネルはオーディオプロセスが、データを失う機会をおおいに減らすことに役立ちますが、ときにはそれがやはり起きることもあります。
ハードリアルタイムコンピュータは、ほんのわずかの遅延が、生と死の違いを引き起こすような特別な用途のために設計されたものです。これらのシステムはハードウエアあるいはソフトウエアで実装されています。自動車事故の時にエアバッグを展開するもの、手術中に患者の脈拍をモニタするもの、などの例があります。これらのコンピュータは多機能ではなく、それが保証された低遅延を実現できる理由の1つでもあります。
Fedora Linuxで、リアルタイムカーネルは、Planet CCRMA at Homeリポジトリで提供されます。Planet CCRMA at Homeの章(sect-Musicians_Guide-CCRMA_Security_and_Stabilityを参照ください)での注意とともに、ここで、もう1つ、考えることがあります:リアルタイムカーネルは、標準のカーネルに比べて使っている人が少ないので、テストのされ方が少ないです。何かおかしなことになる可能性は比較的少ないとはいえ、リアルタイムカーネルを使うことはリスクレベルを上げることに注意下さい。リアルタイムカーネルが動作しなくなったときのためにリアルタイムでない選択肢を常に残して下さい。
リアルタイムカーネルを、他のシステム最適化とともにインストールするには、以下の手順にしたがってください:
Planet CCRMA at Homeリポジトリを、sect-Musicians_Guide-CCRMA_Installing_Repositoryの手順でインストール下さい。
以下のコマンドをターミナルで実行ください:su -c 'yum install planetccrma-core'これは、メタパッケージであり、それは自分では何もインストールしません。そのかわりに、いくつかの他のパッケージがインストールされるようにして、それらが目的のインストールと最適化をします。
新しいカーネルをテストするために、コンピュータをシャットダウン、リブートして下さい。もし、GRUB設定をなおすつもりなら、リアルタイムでないカーネルを、使えるように必ず残すようにして下さい。
これは、Fedora 14 Musicians' Guide http://docs.fedoraproject.org/en-US/Fedora/14/html/Musicians_Guide/index.html の部分を私が訳したものです。Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA")にしたがって https://sites.google.com/site/kandamotohiro で配布されます。kanda.motohiro@gmail.com