3月版 カーネルが無実のプロセスをkillし始めるとき
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2006/3/28
“不安定なsysfs”が含まれる“安定版カーネル”って……
halやudevやALSAは、カーネル側のインターフェイスに対応したユーザー空間のアプリケーションを提供しています。ユーザー空間側のudevやALSAライブラリがカーネルのバージョンに対応したものである限り、問題はありません。しかし、現実には安定版リリースであってもユーザー空間との互換性を損なうような変更がカーネルに適用されています。カーネルとユーザー空間側でバージョンの不一致があると、うまく動作しなくなります。
2月に行われたsysfsの構成変更のあおりを受けて、これまでのバージョンが動かなくなったlsscsi(注)ツールの新バージョン、0.17がリリースされました。
注:SCSIデバイスの一覧を表示するツール。/proc/scsi/scsiで従来提供されていた情報をsysfs経由で取得して表示する。 |
sysfsでしばしば発生しているファイル名変更の責任者でもあるGreg K-Hの主張は、「sysfsは不安定でプライベートなインターフェイスなので、ユーザー空間のアプリケーションはその名前に依存するべきでなく、カーネル側はどんどん変更してもよいものだ」というものでした。さらにGreg K-Hは、「不安定なインターフェイスがどれなのか区別できていないのが問題なので明文化しよう」とドキュメントを書き始めました。
それに対してLinusは、「“不安定だ”とマニュアルに書くのは言い訳にならない」と切り捨てました。彼は、「安定していないインターフェイスが安定版カーネルに含まれるのは間違っている。不安定なインターフェイスを持つサブシステムは、例えばHAL-unstableという別のカーネルのブランチを作ってそこで開発するべきであり、安定版カーネルにマージしたからにはユーザー空間から見えるカーネルのインターフェイスを安定させなさい」と反論しました。
「新しいカーネルにバージョンアップした際に、ユーザー空間のアプリケーションもバージョンアップするのを忘れるとシステムが起動しなくなる」ということでは、ユーザーにとって不便です。この議論の行く末がどうなるのか注目です。
カーネルのキラーが無実のプロセスを殺して回る
NUMAは、システムが複数のノードに分かれており、ノードをまたがるメモリアクセスが遅いというシステムです。当然ながら、同じノードにあるメモリにアクセスする方が高速なため、アプリケーションはローカルノードのメモリ領域を利用して実行した方が効率的です。そして、実行するノードのメモリしか利用しないように制限することを宣言するシステムコールがmbindです。
Christoph Lameterは、mbindしているアプリケーションがローカルノードからメモリを確保しようとして失敗した場合、システム全体としてはメモリが十分足りているのにOOM Killer(注)が発動してプロセスを殺し始めるという挙動をすることを報告しました。
注:メモリを確保できない場合に、適当なプロセスをkillすることでメモリを解放してメモリを確保できるようにするLinuxカーネルの仕組み。 |
OOM Killerは、メモリがローカルノードであるか非ローカルノードであるかを区別しません。mbindを使用せずにメモリの確保を試みた場合、解放されたメモリが非ローカルノードのものであっても(もちろんローカルノードのメモリであっても)利用できるため、特に問題は生じません。
しかし、mbindを使っている場合は事情が異なります。OOM Killerは前述したようにメモリがローカルであるか非ローカルであるかを区別しないため、メモリを確保するために非ローカルノード上にあるプロセスを殺すかもしれません。しかし、mbindによって非ローカルノードのメモリは使用を制限されているためメモリ不足は改善されず、さらにプロセスを殺さねばなりません。こうして、「運良く」ローカルノードのメモリ上にあるプロセスを殺してメモリを確保できるまで、OOM Killerはプロセスを殺し続けるのです。つまり、無駄にプロセスを殺してしまう場合があるということです。この挙動は意味がないだろう、ということで議論になりました。
結論としては、NUMAでmbindをしている場合はOOM Killerを発動しないように変更することで落ち着いたようです。OOM Killerの挙動にはご注意を。
-mmツリーにホットフィックスを
2月も活発に-mmツリーのリリースが行われていました。その中で、-mmツリーのリリース方法に目立った改善がありました。
Andrew Mortonは、カーネル2.6.16-rc2-mm1のリリースと同時に、「Matthias Urlichsにより、gitで-mmツリーの提供が開始された」と発表しました。従来、-mmツリーはquiltパッチのセットとして提供されていましたが、今後はgit利用者の利便性が向上します。
また、Andrew Mortonは2.6.16-rc1-mm5から-mmツリーに対してホットフィックスパッチの提供を開始しました。これは、-mmツリーのリリース直後に発見された問題だけを修正するパッチをリリースするもののようです。このために、-mmツリーのパッチを置いているディレクトリに、hot-fixes/というディレクトリが追加されています。
いままでは、修正版でありながら新機能も多く追加された-mmリリースが毎回リリースされていたことを考えると、仕組みとしては改善です。2.6.16-rc3-mm1以降、毎回数個のパッチが提供されており、少しずつ活用され始めているようです。このホットフィックスパッチによって-mmツリーの敷居が下がり、テストユーザーが増えるとよいですね。
-stableリリース
安定版2.6.15.yカーネル、2月は2つリリースされました。
- 2.6.15.3(2月6日)
・ICMPネットワーキングのDoSのセキュリティフィックス(CVE-2006-0454) - 2.6.15.4(2月9日)
・alpha、sparc64、x86_64用にコンパイルが通らなかったり起動しなかったりすることの修正
・SELinuxやNFSのメモリリークの修正
・dm-cryptのキー管理の修正(CVE-2006-0095)
など、24パッチ
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」コマンドです。
|
|