04.非リアルタイムOSの動き

●PCマニアの勘違い

 PCマニアがクロックの高いCPUを使い、転送速度の速いメモリを大量に積んだりするのは、希望する処理(たとえば、3Dゲームのフレーム処理)を可能な限り短時間で終わらせるためである。
 実際、そういった改良によってレスポンスタイムは上がる。

 しかし、Windowsはその期待通りには動かない。


2006/01/05
●非リアルタイムOSの動き

 リクエスト(処理依頼)してから結果を得るまでの時間をレスポンスタイムという。

 Windowsは、マルチタスクOSであるが、同時に非リアルタイムOSである。
 CPUが1つでも(見かけ上)複数のプログラムを同時に実行できるが、負荷がかかるほどレスポンスタイムは長くなり、限界を超えると処理自体のリクエストが後回しになってしまうという癖を持つ。
 極論を言うといつ終わるか、やってみるまでわからないというOSなのだ。

 昔、CD-Rの書き込み中にメール受信やウイルススキャンなどが動いて何枚もCD-Rを無駄にした経験を持つ人も多いだろう。CD-Rの書き込み中に他の処理をするとライティングソフトの動きが中断してしまい、CD-Rの書き込みに失敗する。Windowsのコアがリアルタイム機能を持っていないため、CD-Rへ書き込むデータを安定して用意できないためだ。

 非リアルタイムOSは、正確な応答を保証しない代わり、理論的には無制限に負荷をかけられ、CPU能力を100%活用できるといった利点がある。…ちょっと訳のわからない利点に見えるが、リアルタイムOSと比較するとわかる。


2006/12/30
●リアルタイムOSの動き

 リアルタイムOSは、3秒で終わる処理について「3分後に応答せよ」として処理を投げると、(3秒で終わっているのに)3分後にレスポンスを返す。ただし、このような要求を同時に10個や20個かけても、正確に3分後にレスポンスを返す。そこがリアルタイムOSの「リアルタイム」たる所以である。

 ただし、リアルタイムOSが動作するCPUでは、正確な応答のために、(リアルタイム処理をする分の処理について)常にCPU負荷に余裕を持たせておく必要がある。リアルタイムOSは機械制御などを目的としているため、正確なレスポンスが要求される。エンジンの点火制御のように、待ったなしである。「処理が詰まったから、ちょっと待った」が効かない。

 現実的な話、リアルタイムOSと言えどもCPU負荷が100%を超える量のリクエスト(3秒で終わる処理の結果を3分後に返す要求をほぼ同時に60個以上要求する場合)は、どうしても取りこぼしが出る。
 この場合は、要求に応じたレスポンスが得られるようにアプリケーションをチューニングしたり、CPUを強化する、あるいはCPU数を増やして1CPUあたりの最大リクエスト数を下げるなどの対策が(否応なしに)必要になってくる。

 一方、事務処理あるいは科学技術計算など、リアルタイム性を重視しない(早く終わるに超したことはないが)場合、「規定の時間内に結果を出さなければならない」という足かせを外すことで、CPUを最も効率よく使えるようにスケジュールすることが可能になる。

 ということで、非リアルタイムOSでは、レスポンスタイムが指定されない。
 いつ結果が出るかは出たトコ勝負である。
 CPUが暇ならすぐ結果が返ってくる。
 忙しければなかなか返ってこない。
 高負荷時は、リクエストが保留されるため、いつ処理が終わるかなど、知ったことではない。


2006/12/30
●クイックレスポンスからハイパフォーマンスへ

 従来、CPUのクロックが速くなると、それにほぼ比例する形でレスポンスタイムが短くなったし、レスポンスが短いほど良いとされていた。

 しかし、もはや急激なクロックアップは望めない。
 これから先、コア数だけ増えていく。今までのプログラムは、待てど暮らせどレスポンスは速くならない。

 いや、Windowsに代表される、非リアルタイム・マルチタスクOSにCPU能力に応じたレスポンスタイムを期待すること自体が間違いなのである。

 単位時間あたりの処理能力のことをスループットと言う。

 タスクマネージャーの所でも触れたが、OSは、アプリケーションをなるべく効率良く動くようにタスク管理される。非リアルタイム・マルチタスクOSは「与えられた時間内にどれだけの処理が行えるか」に重点を置いてが、本来求められる能力なのである。

 これからはマルチコア時代である。
 これからのアプリケーションは、スループットの良さが求められる時代になったと言えるだろう。


2006/03/19

[戻る]