同氏にLinuxカーネルの開発体制などについて伺った。Linuxのカーネルメンテナであり、EFI(最後部コラム参照)や64bitアーキテクチャなどの分野で活躍している。CPUやOSに対する造詣も深い。Forum」(http://www.hp-aeforum2004.jp/itf/program/)のために来日した同氏に、カーネル開発者コミュニティやIA-64への移行について話を伺った。現在、カーネルメンテナは何人存在するのですか?Helgaas:数えたことはありませんが、かなりたくさんいます。PA-RISC、SPARC、Itanium、PowerPCなど、アーキテクチャごとに必ず1人います。それからVM(バーチャルメモリ)、SCSI、スケジューリングなど、サブシステムにも1人ずついます。各デバイスドライバにもメンテナが置かれています。Mosberger氏がメンテナです。Linuxのカーネルメンテナは柔軟なシステムです。ある人が何らかのコードに対して修正を加えます。して、同じ人がまたそのコードに修正を加えるということを続けていると、非公式ではありますが、その人がそのコードのオーナー、つまりメンテナになります。あなたはHewlett-Packardでどのような仕事をしているのですか?Helgaas:英語には、「2つの帽子」という表現があります(笑)。「メンテナの帽子」をかぶっているときは、SGIやIBM、Intelといった、Hewlett-Packard以外の人たちと協力する必要があります。私がメンテナとして力を発揮するためには、他社の人たちの信頼を得なければなりません。私が「Hewlett-Packardを優遇することはない」ということを、きちんと理解してもらうことが重要ですね。Hewlett-Packardの人間としての責任もあります。これが「2つ目の帽子」です。Labにおける私の仕事です。カーネル2.6の正式リリースで、カーネル2.4の開発は一段落ついたと思います。現在、あなたにパッチが送られてくる頻度を教えてください。Helgaas:私にIA-64固有のパッチが送られてくるのは、週に2つ程度です。おっしゃるとおり、カーネル2.4がすでに安定している証拠といえるでしょう。1つの理由としては、これもご存じのとおり、カーネル2.6に開発の比重が移っていることが挙げられます。現在はカーネル2.6用のパッチの方が多くなっており、Mosberger氏がそれらを管理しています。IA-64環境を自由に使える個人は、それほど多くないでしょう。IA-64用のパッチを送ってくる人はどのような人でしょうか?Helgaas:ほとんどがハードウェアベンダの人です。ディストリビュータの人もいます。LINUXの人たちです。大学生からパッチが送られてくることもあります。Linuxの開発で時々起こる問題があります。1人で孤立して大きなパッチを作ってしまい、しかもそれを完成するまで誰にも話さないことです。このような巨大なパッチは、大体失敗します。それを他人が理解するには、あまりにも複雑で大き過ぎるからです。Linuxは、小さな修正を取り込んで徐々に進化するものなのです。Dump)は標準カーネルへの取り込みを拒否されたと聞いています。その理由を教えてください。Helgaas:確かに、LKCDはコミュニティに受け入れられませんでした。その理由を詳しくは知らないのですが、私の考えでは、まだ信頼性が足りないのではないかと思います。ディスクに直接クラッシュダンプを書き込むので、その処理に間違いが起こるとユーザーデータを破壊する危険があります。Hewlett-Packardは、カスタムカーネルでLKCDをサポートしています。この方法は暫定的なものです。最終的には、netdumpで提供することになると思います。標準カーネルには将来的にnetdumpが取り込まれると考えているからです。それには2つの理由があります。Hatがnetdumpをサポートしていること。そのため、業界やコミュニティにはnetdumpの経験が豊富に蓄積されています。2つ目の理由は、netdumpの方が安全だからです。ネットワークを通してデータを書き込むので、LKCDに比べてユーザーデータを破壊する危険が非常に低いのです。注:LKCDは、もともとSGIが開発を開始した機能。2002年1月にIBM、NEC、日立、富士通の4社がLKCDの機能強化で協業を発表している。Itaniumには32bitエミュレーション機能がありますね。Linuxで実行するには、単にバイナリをコピーするだけでよいのでしょうか。Helgaas:そのとおりです。x86マシンから32bitアプリケーションのバイナリを持ってくれば、そのまま実行することが可能です。PCで実行するのと同じことになってしまい、Itaniumを使うメリットはないといえるでしょう。32bitアプリケーションをItaniumで実行する場合は、アプリケーションと一緒にライブラリもコピーする必要があります。コピーしてきたライブラリを32bitライブラリ用のディレクトリに入れておくと、32bitバイナリを起動するときにそこのライブラリを利用します。同一マシン上に32bit用と64bit用のライブラリが共存することになります。リコンパイルするだけでも構わないのでしょうか。Helgaas:正しく書かれたアプリケーションは、Itanium上でリコンパイルするだけで64bitアプリケーションになります。ご存じのとおり(笑)、ほとんどのアプリケーションはそうではないため、うまくいきません。32bitマシンではint(integer)、long、ポインタが同じサイズですが、64bitではintが32bit、longとポインタが64bitです。書かれていないコードは、これが問題になります。Itaniumにおいては、コンパイラによる最適化がより重要になると思います。最適化のためにパフォーマンスモニタを利用するとのことですが、パフォーマンスモニタの情報はどのように使うのですか?Helgaas:パフォーマンスモニタの利用方法には、2つのストラテジがあります。1つは、プログラムを普通にコンパイルして数回実行し、そこからプロファイルを取る方法です。そのプロファイルによって、「どの方向にブランチが起きやすいか」といった情報がコンパイラに送られます。それを基に、アプリケーションの最適化方法を改善します。1つは、昔からよく行われてきたマニュアルな手法です。パフォーマンス情報を収集して、アルゴリズムやデータストラクチャを再編成することです。どちらの方法にしても、最適化の方法を変えながら何度もリコンパイルを繰り返して、最終的なバイナリを生成することになります。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コードをインプリメントします。Watch(連載中)Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします連載:Linuxファイルシステム技術解説ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する特集:全貌を現したLinuxカーネル2.6[第1章]エンタープライズ向けに刷新されたカーネル・コアついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する特集:/procによるLinuxチューニング[前編]/procで理解するOSの状態Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。(2017/7/27)本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。(2017/7/21)今回は、コマンドライン環境でのジョブコントロールを試してみましょう。(2017/7/21)本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。(2017/7/20)本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。