10月版 あんなコアいいな、吐けたらいいな
上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2007/10/31
linux-kernelかいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2007年9月のLinuxカーネルメーリングリストでどんなことが起きたのか見てみましょう。同時公開のLinux Kernel Watch番外編「セキュリティをやってるやつらは狂っている?!」もあわせてお読みください。
2.6.23のリリースは遠かった
結局、9月中に2.6.23はリリースできないまま10月に入りました。致命的なバグがいくつか見つかったことが直接的な要因ですが、Kernel Summitの影響があったのでしょうか。過去の実績ではrc6かrc7でリリースされているのですが、今回はrc8まで出ています。
Linusが9月に出したrc版は以下のとおりです。
|
一方、Andrew Mortonによる-mmツリーの進捗は滞っていました。過去の実績では数日に1回はリリースされていた-mmツリーですが、9月に限ってはリリースの頻度が若干下がっていたような印象があります。
Kernel Summit終了後の初のmmリリース、「-rc6-mm1」のアナウンス文のコメントには、「複数のマシン向けにコンパイルしてブートするようになるまでに、まるまる2日かかってしまった……この仕組みはもう機能していないのではないかといわざるを得ない」とありました。
-mmツリーのリリースのタイムスタンプを確認してみると、特に2.6.23-rc6-mm1が出るまでの間隔が長かったのが分かります。Linusのrc版が出てから、それに対応する-mmツリーの準備をするのに時間がかかっていたようです。
|
-mmツリーは、Linusのツリーにマージされる前の各種雑多なパッチのテストの仕組みとして機能してきました。これが頻繁に更新されることで、Linusのツリーにマージする前に、先進的なパッチの試験ができています。
しかし、Linuxカーネルの規模が大きくなるにつれパッチの量が増加してきています。この結果、パッチのマージと試験に伴う作業が増加して、その勢いに追いつけなくなっているのかもしれませんね。今後もうまく-mmツリーのメンテナンスを継続できるかどうかが気になります。
「欲しいメモリ領域だけ」、コアダンプのフィルタリング
Hidehiro Kawaiは「coredump masking」と題した一連のパッチで、コアダンプの生成内容を変更する仕組みを提案しました。
Linuxカーネルが提供する機能の1つに、ユーザー空間のプロセスが例外的なエラーなどで強制停止した場合に、コアダンプを吐き出す機能があります。このとき、コアファイルの最大値を制限している場合は、そのサイズまでしか出力されずあまり問題になりません。
関連記事: | |
/procによるLinuxチューニング[後編] http://www.atmarkit.co.jp/flinux/special/proctune/proctune02a.html |
しかし、大量にメモリを利用しているアプリケーションなどでは、ダンプファイルがあまりに大きいと出力に時間がかかります。また、用途によって取得したいダンプの領域が変わってしまうため、これらを設定できるようにしようという仕組みです。
コアダンプに何を含めるのかという項目は、/proc/PID/coredump_filterで確認・設定できます。ドキュメントによると、内容は下記のようにビットマスクで設定します。
/proc/PID/coredump_filterの設定 |
デフォルトの設定は3になっており、anonymous memoryしかダンプ対象になりません。例えばこれを15に変更すると、ファイルをmmapして確保しているメモリ領域もダンプの対象に含まれます。
実際に、PID 1234のプロセスがコアダンプする際に、そのプロセスのメモリ空間すべてをコアダンプに含むように設定するには次のようにします。
$ echo 15 > /proc/1234/coredump_filter |
この変更は2.6.23-rc1にマージされました。
参考: | |
/proc/pid/coredump_filterのドキュメント Documentation/filesystems/proc.txt |
コラム ユーザー空間のプロセスにコアダンプさせてみる |
デフォルトではコアファイルのサイズ制限が0に設定されている場合が多いので"ulimit -c "で確認してみましょう。0になっているのであれば、"ulimit -c unlimited"で制限を無制限に変更すればよいでしょう。コアダンプを試す場合は、コマンドラインアプリケーションをctrl-\で中断することで、ダンプを吐くように強制終了させることができます。 |
コマンドラインの長さ制限を拡大?
ファイルが大量にあるディレクトリでlsコマンドをワイルドカード指定で実行したときに、次のように「引数リストが長すぎます」とエラーが出て悔しい思いをしたことはありませんか?
$ /bin/ls */*/*/* |
Ollie Wildは、これを解消する「mm: variable length argument support」というパッチを提案しました。
従来Linux Kernelでは、ユーザー空間におけるプロセスのコマンドラインの長さは固定で制限されていました。具体的には32ページ(1ページは通常4kbytesのため、合計128kbytes)に限られていました。
このパッチは、コマンドライン用の領域を動的なサイズで確保するように変更します。コマンドラインや環境変数を管理する領域はスタックに設置されるため、上限はスタックサイズの大きさに左右されることになるようです。現状では上限をスタック領域の大きさの1/4までとして、コマンドラインの格納に利用することになっています。
スタックサイズの大きさはulimitのRLIMIT_STACKでプロセス単位で設定されているため、スタックサイズを大きくすれば、制限を拡大することができますね。例えばbashなどでは、以下のように「ulimit -s」コマンドで設定できます。
$ ulimit -s 65536 |
このパッチはv2.6.23-rc1でマージされました。
1/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」コマンドです。
|
|