上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2005/6/21
プリエンプトを実現するRTパッチ
Linuxカーネルはもともと、カーネルが処理を行っている間はほかの処理に切り替えない設計になっています。これとは逆に、カーネルによる処理が途中であってもほかの処理にCPUを割り当てることを「プリエンプト」といいます(編注)。
編注:プリエンプト(プリエンプティブルカーネル)については、 Linuxカーネル2.5 最新開発動向 全貌を現したLinuxカーネル2.6[第4章] も参照。 |
Ingo Molnarは、「Real-Time Preemption, -RT-2.6.12-rc4-V0.7.47-06」というサブジェクトのメールで、メーリングリストに新しいパッチを投げました。彼の管理しているRTカーネルパッチは、リアルタイムカーネルとしてLinuxを動かすことを目標としています。このパッチを適用すると、4つのモードが選べるようになります。
PREEMPT_NONE | 特にプリエンプトしない |
PREEMPT_VOLUNTARY | 明示的にプリエンプト場所を増やす |
PREEMPT_DESKTOP | クリティカルでない部分のカーネルについてプリエンプト可能にする |
PREEMPT_RT | 目標レイテンシを100ms以下として、spinlockをプリエンプト可能なmutexに置き換える |
巨大なパッチであり、まだ実験段階の部分も多いようです。Linusのツリーに急に入ることはないでしょうが、レイテンシが気になる方は試してみてはいかが?
参考リンク: | ||
realtime-preemptパッチ | http://people.redhat.com/mingo/realtime-preempt/ |
watchdogとシリアルドライバの危険な関係
Linuxカーネルには、ソフトウェアwatchdogの機能があります。これは、「一定時間割り込み処理が発生しなかった場合はシステムが停止したと見なし、強制的にリブートする」というものです。
ある日、Dave Jonesがコピープロテクトの掛かった音楽CDをCD-ROMドライブに入れたところ、SCSIエラーが大量に発生しました。それだけであればよいのですが、たまたまシリアルコンソール経由で接続していたため、シリアルコンソールにメッセージが大量に出力されました。その影響でwatchdogが発動し、システムがリブートしてしまいました。
Russell Kingによると、シリアルドライバの文字列出力処理は、割り込みを停止して動きます。この挙動は、CTSフローコントロールの信頼性のために必要なのだそうです。しかし、これでは表示に時間がかかり過ぎるとwatchdogが発動してしまう、ということです。
シリアルの信頼性も大切ですが、watchdogの動作も必要。かといって、ここにwatchdogのための例外処理を追加する必要があるのか? と、ひとしきり議論が盛り上がりました。
現時点ではまだ、シリアルコンソールとwatchdogを両立させる方法は出ていないようです。良い解決策が見つかるといいのですが。
アプリをその場で実行するXIPパッチ
Carsten OtteはXIPのパッチのメールを出しました。「XIP」とは、「Execute in Place(その場で実行)」の略です。
Linuxカーネルは通常、アプリケーションを実行する際に、ディスクに保存されているアプリケーションのイメージをメモリ上のページキャッシュに複製してから実行します。これに対して、「複製用の領域を確保するのは無駄だろう」ということで、複製を必要としないで実行するのがXIPというわけです。ただし、XIPを実現するにはディスク上のデータをメモリ空間にマップする必要があります。
XIPのパッチは、Andrew Mortonが管理している2.6.12-rc5-mm1に取り込まれました。まだまだ一般的に利用できるような雰囲気ではないですが、いつかLinusが管理するツリーに取り込まれるかもしれません。
参考リンク: | ||
2.6.12-rc5-mm1 | ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/ 2.6/2.6.12-rc5/2.6.12-rc5-mm1 |
RAWデバイスって消してもいいの?
Adrian Bunkが、「RAWデバイスがなくてもO_DIRECTフラグを使ってopenすれば同等の機能を提供できる」ということで、それを実現するパッチを投げました。実際、RAWデバイスはもともと2.7系列で削除するということになっていました。しかし、「この情勢では2.7系列に相当するものは出てこないだろうし、2.6.12がもともとの2.7系列に相当するものだから、もう削除してよいのではないか」と彼は主張しました。
Greg Kroah-Hartmanたちはこれに反論し、「REMOVAL.TXTにまず追加してしばらくたってからにしようよ」と提案しました。
RAWデバイスがなくなり、RAWデバイスの代わりにopenをO_DIRECTで行うように変更するには、ソースコードに手を入れる必要が出てきます。RAWデバイスが消されたら、影響大きくないですか?
(以上、敬称略)
2/2
|
|
|
||||
|
連載 Linux Kernel Watch |
Linux Squareフォーラム Linuxカーネル関連記事 |
連載:Linux Kernel Watch(連載中) Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします |
|
連載:Linuxファイルシステム技術解説 ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する |
|
特集:全貌を現したLinuxカーネル2.6[第1章] エンタープライズ向けに刷新されたカーネル・コア ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する |
|
特集:/procによるLinuxチューニング[前編] /procで理解するOSの状態 Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する |
|
特集:仮想OS「User
Mode Linux」活用法 Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
Linuxのカーネルメンテナは柔軟なシステム カーネルメンテナが語るコミュニティとIA-64 Linux IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った |
|
|
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|