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版は以下のとおりです。

バージョン 日付
2.6.23-rc5 9月1日
2.6.23-rc6 9月10日
2.6.23-rc7 9月19日
2.6.23-rc8 9月24日
9月中にリリースされた-rcリリース

 一方、Andrew Mortonによる-mmツリーの進捗は滞っていました。過去の実績では数日に1回はリリースされていた-mmツリーですが、9月に限ってはリリースの頻度が若干下がっていたような印象があります。

 Kernel Summit終了後の初のmmリリース、「-rc6-mm1」のアナウンス文のコメントには、「複数のマシン向けにコンパイルしてブートするようになるまでに、まるまる2日かかってしまった……この仕組みはもう機能していないのではないかといわざるを得ない」とありました。

 -mmツリーのリリースのタイムスタンプを確認してみると、特に2.6.23-rc6-mm1が出るまでの間隔が長かったのが分かります。Linusのrc版が出てから、それに対応する-mmツリーの準備をするのに時間がかかっていたようです。

バージョン 日付
2.6.23-rc4-mm1 9月1日
2.6.23-rc6-mm1 9月18日
2.6.23-rc7-mm1 9月24日
2.6.23-rc8-mm1 9月25日
2.6.23-rc8-mm2 9月27日
9月中にリリースされた-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
/proc/PID/coredump_filterの設定

 デフォルトの設定は3になっており、anonymous memoryしかダンプ対象になりません。例えばこれを15に変更すると、ファイルをmmapして確保しているメモリ領域もダンプの対象に含まれます。

 実際に、PID 1234のプロセスがコアダンプする際に、そのプロセスのメモリ空間すべてをコアダンプに含むように設定するには次のようにします。

$ echo 15 > /proc/1234/coredump_filter
$ cat /proc/1234/coredump_filter
0000000f

 この変更は2.6.23-rc1にマージされました。

参考:
/proc/pid/coredump_filterのドキュメント
Documentation/filesystems/proc.txt

コラム ユーザー空間のプロセスにコアダンプさせてみる
デフォルトではコアファイルのサイズ制限が0に設定されている場合が多いので"ulimit -c "で確認してみましょう。0になっているのであれば、"ulimit -c unlimited"で制限を無制限に変更すればよいでしょう。コアダンプを試す場合は、コマンドラインアプリケーションをctrl-\で中断することで、ダンプを吐くように強制終了させることができます。

コマンドラインの長さ制限を拡大?

 ファイルが大量にあるディレクトリでlsコマンドをワイルドカード指定で実行したときに、次のように「引数リストが長すぎます」とエラーが出て悔しい思いをしたことはありませんか?

$ /bin/ls */*/*/*
bash: /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
$ ulimit -s
65536
$ echo */*/*/* | wc -c
2155670
$ /bin/ls */*/*/* | wc -c
2734977

 このパッチはv2.6.23-rc1でマージされました。

1/2

Index
Linux Kernel Watch 10月版
 あんなコアいいな、吐けたらいいな
Page 1
 2.6.23のリリースは遠かった
 「欲しいメモリ領域だけ」、コアダンプのフィルタリング
 コマンドラインの長さ制限を拡大?
  Page 2
 セキュリティフレームワークの追加が議論を呼ぶ
 -stableの進ちょくにも方針の違い

連載 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カーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間