Linuxのカーネルメンテナは柔軟なシステム
 〜 カーネルメンテナが語るコミュニティとIA-64 Linux 〜

IA-64 Linuxのカーネルメンテナにして米国Hewlett-PackardのOpen Source Labに所属するBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った。(編集局)

聞き手/文責:中澤勇
アットマーク・アイティ編集局
2004/3/23

 Bjorn Helgaas氏はIA-64 Linuxのカーネルメンテナであり、EFI(最後部コラム参照)や64bitアーキテクチャなどの分野で活躍している。以前はhp-uxやPA-RISCにも携わっており、64bit CPUやOSに対する造詣も深い。

 日本ヒューレット・パッカードのプライベートイベント「HP Integrity Technology Forum」(http://www.hp-aeforum2004.jp/itf/program/)のために来日した同氏に、カーネル開発者コミュニティやIA-64への移行について話を伺った。

   コミュニティとHewlett-Packardのはざまで

―― 現在、カーネルメンテナは何人存在するのですか?

Helgaas:数えたことはありませんが、かなりたくさんいます。

 まず、PA-RISC、SPARC、Itanium、PowerPCなど、アーキテクチャごとに必ず1人います。それからVM(バーチャルメモリ)、SCSI、スケジューリングなど、サブシステムにも1人ずついます。各デバイスドライバにもメンテナが置かれています。

 IA-64(Itanium)の場合、カーネル2.4は私が担当していますが、カーネル2.6はDavid Mosberger氏がメンテナです。

 Linuxのカーネルメンテナは柔軟なシステムです。例えば、ある人が何らかのコードに対して修正を加えます。しばらくして、同じ人がまたそのコードに修正を加えるということを続けていると、非公式ではありますが、その人がそのコードのオーナー、つまりメンテナになります。

HP Integrity Technology Forumで講演中のHelgaas氏

―― あなたはHewlett-Packardでどのような仕事をしているのですか?

Helgaas:英語には、「2つの帽子」という表現があります(笑)。

 「メンテナの帽子」をかぶっているときは、SGIやIBM、Intelといった、Hewlett-Packard以外の人たちと協力する必要があります。私がメンテナとして力を発揮するためには、他社の人たちの信頼を得なければなりません。つまり、私が「Hewlett-Packardを優遇することはない」ということを、きちんと理解してもらうことが重要ですね。

 もちろん、Hewlett-Packardの人間としての責任もあります。これが「2つ目の帽子」です。Linuxを新しいプラットフォーム上で使えるようにするのが、HP Linux and Open Source Labにおける私の仕事です。

―― カーネル2.6の正式リリースで、カーネル2.4の開発は一段落ついたと思います。現在、あなたにパッチが送られてくる頻度を教えてください。

Helgaas:私にIA-64固有のパッチが送られてくるのは、週に2つ程度です。おっしゃるとおり、カーネル2.4がすでに安定している証拠といえるでしょう。

 もう1つの理由としては、これもご存じのとおり、カーネル2.6に開発の比重が移っていることが挙げられます。現在はカーネル2.6用のパッチの方が多くなっており、Mosberger氏がそれらを管理しています。

  参考:
    linux-ia64 ML
    http://vger.kernel.org/vger-lists.html#linux-ia64
    IA-64 specific patch(kernel 2.4)
    http://www.kernel.org/pub/linux/kernel/ports/ia64/v2.4/

―― IA-64環境を自由に使える個人は、それほど多くないでしょう。では、IA-64用のパッチを送ってくる人はどのような人でしょうか?

Helgaas:ほとんどがハードウェアベンダの人です。ディストリビュータの人もいます。SGI、Intel、Dell、Red Hat、SUSE LINUXの人たちです。また、大学生からパッチが送られてくることもあります。

 Linuxの開発で時々起こる問題があります。1人で孤立して大きなパッチを作ってしまい、しかもそれを完成するまで誰にも話さないことです。このような巨大なパッチは、大体失敗します。それを他人が理解するには、あまりにも複雑で大き過ぎるからです。

 Linuxは、小さな修正を取り込んで徐々に進化するものなのです。

―― お話を聞いて思い出しましたが、LKCD(Linux Kernel Crash Dump)は標準カーネルへの取り込みを拒否されたと聞いています。その理由を教えてください。

Helgaas:確かに、LKCDはコミュニティに受け入れられませんでした。その理由を詳しくは知らないのですが、私の考えでは、まだ信頼性が足りないのではないかと思います。ディスクに直接クラッシュダンプを書き込むので、その処理に間違いが起こるとユーザーデータを破壊する危険があります。

 Hewlett-Packardは、カスタムカーネルでLKCDをサポートしています。ただし、この方法は暫定的なものです。最終的には、netdumpで提供することになると思います。なぜなら、標準カーネルには将来的にnetdumpが取り込まれると考えているからです。それには2つの理由があります。まず、Red Hatがnetdumpをサポートしていること。そのため、業界やコミュニティにはnetdumpの経験が豊富に蓄積されています。2つ目の理由は、netdumpの方が安全だからです。ネットワークを通してデータを書き込むので、LKCDに比べてユーザーデータを破壊する危険が非常に低いのです。

注:LKCDは、もともとSGIが開発を開始した機能。2002年1月にIBM、NEC、日立、富士通の4社がLKCDの機能強化で協業を発表している。
http://www.nec.co.jp/press/ja/0201/2203.html

   32bitから64bitへの移行は

Hewlett-Packard Linux and Open Source Lab Software engineer
Bjorn Helgaas氏

―― Itaniumには32bitエミュレーション機能がありますね。すると、32bitアプリケーションをIA-64 Linuxで実行するには、単にバイナリをコピーするだけでよいのでしょうか。

Helgaas:そのとおりです。x86マシンから32bitアプリケーションのバイナリを持ってくれば、そのまま実行することが可能です。ただし、32bit PCで実行するのと同じことになってしまい、Itaniumを使うメリットはないといえるでしょう。

 32bitアプリケーションをItaniumで実行する場合は、アプリケーションと一緒にライブラリもコピーする必要があります。コピーしてきたライブラリを32bitライブラリ用のディレクトリに入れておくと、32bitバイナリを起動するときにそこのライブラリを利用します。つまり、同一マシン上に32bit用と64bit用のライブラリが共存することになります。

―― アプリケーションを64bit化するために、コードの修正は必要ですか? リコンパイルするだけでも構わないのでしょうか。

Helgaas:正しく書かれたアプリケーションは、Itanium上でリコンパイルするだけで64bitアプリケーションになります。しかしご存じのとおり(笑)、ほとんどのアプリケーションはそうではないため、うまくいきません。

 32bitマシンではint(integer)、long、ポインタが同じサイズですが、64bitではintが32bit、longとポインタが64bitです。きちんと書かれていないコードは、これが問題になります。

―― Itaniumにおいては、コンパイラによる最適化がより重要になると思います。そして、最適化のためにパフォーマンスモニタを利用するとのことですが、パフォーマンスモニタの情報はどのように使うのですか?

Helgaas:パフォーマンスモニタの利用方法には、2つのストラテジがあります。1つは、プログラムを普通にコンパイルして数回実行し、そこからプロファイルを取る方法です。そのプロファイルによって、「どの方向にブランチが起きやすいか」といった情報がコンパイラに送られます。それを基に、アプリケーションの最適化方法を改善します。

 もう1つは、昔からよく行われてきたマニュアルな手法です。パフォーマンス情報を収集して、アルゴリズムやデータストラクチャを再編成することです。

 どちらの方法にしても、最適化の方法を変えながら何度もリコンパイルを繰り返して、最終的なバイナリを生成することになります。

コラム EFIとは?
多くの人にとって、EFI(Extensible Firmware Interface)はなじみのない言葉だろう。IA-64では、BIOS+MBRに書き込まれたブートローダという、一般的なx86マシンで慣れ親しんだ仕組みではなく、EFIでOSをブートする。Linuxとは直接関係ないが、EFIについても聞いてみた。

―― EFIは、x86アーキテクチャにおける「BIOSのようなもの」と考えればよいでしょうか?

Helgaas:そのとおりです。しかし、BIOSよりも拡張性があり、高機能で洗練しています。例えば、EFIはファイルシステムの中に非常にシンプルなシェルを提供します。このシェルを利用して、カーネルをブートする前にディスクの中を見たり、何らかのアプリケーションを実行することができます。

 EFI上の単純なアプリケーションとして、FTPを行うものがあるとします。これを使えば、ネットワーク上にあるカーネルをロードして、ファイルを転送することができます。それから、カーネルに対してファシリティを提供します。システムのメモリマップやコンソール、ブートディスクといったシステムのデバイスも提供します。

 EFIは分散されたソフトウェアで、Intelがほとんどのコアコードを含んだEFIリファレンスをインプリメントします。Hewlett-PackardなどのベンダやOEM先は、コアにプラグインするEFIコードをインプリメントします。

  参考:
    Extensible Firmware Interface
    http://developer.intel.com/technology/efi/
    Developers Interface Guide for Itanium Architecture-based Servers
    http://www.dig64.org/

Linux Square全記事インデックス


 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 記事ランキング

本日 月間