はじめに
本講座では、Linuxシステムを対象にダンプの解析方法について解説していきます。
“ダンプ解析”と言われてもピンとこない方もいらっしゃるかもしれません。先ずは、「ダンプの解析とは何なのか?」という観点で少し解説します。
そもそもダンプとは何かと言うと、マシンに搭載されているメモリの内容を(一般に)ディスクに出力したものです。(「出力する」という行為を、「吐き出す」とか「吐く」という表現もよく使われます。本講座内でも使用いたしますが、お客様向け資料等ではあまり好ましくない表現であることにご注意ください。)
ダンプを吐く契機は、カーネルが自分自身の異常を検知したことです。カーネルは、これ以上動作を継続するのは危険と判断するとダンプを吐いてシステムをダウンさせます。(※1)つまり、ダンプが取られたということは、カーネルに障害が発生したということを意味します。察しのいい方はお気づきかと思いますが、したがって、ダンプを取る目的というのは、カーネルの障害の原因を調査することにあります。
ダンプがあれば障害の原因が分かるのでしょうか?
答えはYESです。
カーネルの障害が原因でシステムがダウンした場合、ダンプがあれば殆どのケースで原因を突き止めることが可能です。稀に分からないケースもありますが、現象を絞込み、もう少し前の時点でデータを採取するようなパッチを提供するというように、次に再現した時は原因が究明できるような手が打てます。”ただ”で転ぶことはありません。
通常、運用しているシステムで障害が起きても、運用を止めてデバッグすることはできません。運用を直ちに再開することが求められます。ですから、障害時にはダンプを取り、運用はすぐに再開、障害の原因はダンプで解析するというのが自然な手順になります。ダンプがあれば、原因は分かるのですから、言って見れば、ダンプはカーネル障害を解析するための必要十分条件なのです。
もちろん、出力されたダンプを正確かつ迅速に解析する”技術力”と”経験”が必要になってくることは言うまでもありません。
オープンソースの世界で開発を行っていると、ダンプの解析をする機会があまりないかもしれません。ダンプの解析は、カーネル開発者としては身につけておくべき技術ですので、ぜひとも本講座を技術習得の機会として活用していただきたいと思います。また、本講座の内容は、カーネルを勉強する上で役に立つ情報も満載です。
さて、最初の問いかけ「ダンプの解析とは何か」をまとめておきましょう。
- ダンプとは、カーネルに障害が発生したときのメモリの内容
- ダンプの解析とは、ダンプを見て障害の原因を調べること
- 原因を究明するには解析能力と経験が必要
- 本講座を読んで、ダンプの解析技術を習得しよう
カーネル技術者の育成のために
今回の最後に蛇足ながら、本講座を始めた背景について触れておきたいと思います。VA Linuxでは、「VA Quest」なるLinuxカーネルの障害解析サービスを提供しています。ダンプの解析はそのサービスのキーとなる技術のひとつです。
そんな技術のノウハウを公開してもいいのでしょうか。いいのです。そんな、けちくさいことを言っている状況ではないというのが筆者の認識です。カーネル技術者の需要は大きくはなく、ニッチな市場です。それにしても供給が少し小さすぎるのが現状です。一体、日本にどれほどのカーネル技術者がいるのか、ちょっと不安です。一昔前までは、各社独自のOSを開発しており、OS(カーネル)の開発部隊を抱えていたわけですが、それにはかなりのコストがかかります。近年、Linuxの採用が進んでいるのは、OSの開発部隊を維持するコストが出せなくなっているのも大きな要因のひとつだと思われます。各社ともカーネル技術者がどんどん少なくなっているという状況なのではないでしょうか。しかし、そんなことで本当によいのでしょうか。カーネルがなければシステムは動かないという再認識が必要と感じます。
そのようなわけで、少しでもカーネル技術者を増やさねばという問題意識の元、本講座をその一助としたいという思いで公開しているのであります。
※1 これが本来のカーネルの動作なのですが、実は、Linuxでダンプを吐く機能(以降、ダンプ機能)が実装されたのは、2.6.13以降で、つい最近の話です。
そのため、これまで、ダンプ機能を実装するパッチがいろいろと出ていました。それらについて、別講で紹介する機会もあるかと思います。