エンタープライズ:ニュース 2003/10/11 21:06:00 更新


test8以降はいよいよRCへ、年内リリース目指すLinuxカーネル2.6概要をモートン氏が語る (1/2)

安定版Linuxカーネル2.4が2001年1月にリリースされてから3年近くが経つ。OSDN主催の「Linux Kernel Conference 2003」では、米OSDLから主任メンテナのモートン氏が来日し、リリース間近な2.6の進捗を語った。

 安定版リリース間近となったLinuxカーネル2.6。10月11日現在は「The Linux Kernel Archive」でtest7(Kernel 2.6.0-test7)が公開されている。以降は、test8が1、2週後、そしてRCへと移り年内の正式リリースを目指す。

 10月9〜10日、東京・青山ダイヤモンドホールではOSDNジャパンによる「Linux Kernel Conference 2003」が開催された。10日午後には、来日されたアンドリュー・モートン氏が「カーネル2.6の新機能概要」と題した講演を行った。同氏は、安定版Linuxカーネルの主任メンテナとして知られ、トーバルズ氏に続いてOSDLへ加わったことも記憶に新しい(参考記事)。

IMG_2223.jpg

講演を行ったアンドリュー・モートン氏は、Linuxカーネル主任メンテナとして知られる


 冒頭でモートン氏は、カーネル2.6の位置づけについて「Linuxは成熟し確立されたソフトウェア。各リリースごとに大きな変更は行わず、2.6で行ってきた作業のほとんどは2.4で実現しているものを強化することだった。幾つかのマネジャービリティ改善もあるが、パフォーマンス向上が軸となった」と語る。

 カーネル2.6で最も重要視されたのは、講演内容を総括すれば「エンタープライズにおけるサーバ利用時のスケーラビリティ実現」、「ディスク利用可能台数制限を緩和すると共に、扱える最大ディスク容量を拡大した点」だ。これには複数ディスクアクセスへのパフォーマンス改善も含まれ、モートン氏は「最も重要なのはディスクへの同時書き込みを行わなくなった点だ」と強調する。

 詳細は後述するが「futex(フューテックス)によってIA-64環境では、何十万というスレッド対応が可能となった」とモートン氏。さらにエンタープライズ以外でもデスクトップでも効果が実感できるはずだという。その効果を「動作がキビキビと動作するように感じるはずだ」と言い、CPUスケジューラ識別手段とシステムコールのプライオリティ変更が影響していることを挙げる。さらにスワップはもちろん、ディスク書き出しのストック処理見直しも関わっている。

スケーラビリティと拡張性の実現

 現行の安定版カーネル2.4では、マルチプロセッサ対応として4〜8CPU程度が実用レベルとされてきた。この上限理由は、「ファイルシステムのメモリ管理、ディスク管理におけるパフォーマンスが予想以上に割かれていることが原因だ」とモートン氏は指摘する。カーネル2.6では見直され、32CPUでも実用的なよう考慮されている。さらに、IA-32環境では4GBのメモリ利用時におけるフリーズ問題があったが、この点も改善されたという。

 カーネルビルド面にも変更がある。「カスタマイズ性を実現すべく、複数のカーネルを同じソースツリーから構築可能となっている。単に拡張子.o、.cファイルが混在するのではなく、個別のツリー構造から設定することが可能だ」とモートン氏。

 さらにメモリ管理面では、バーチャルメモリ(VM)システムに手が入っている。常にクレーム対象となってきたものだと語り、「カーネル2.4.10のコードは完全に書き直さなければならなくなり、2.5でも再発したことが記憶に新しい」と苦悩を見せる。

ファイルシステム改変にはバッファサイズ変更とファイルシステムのディレクトリ再配置など

 ファイルシステム面では、O_DIRECTについても触れられた。O_DIRECTとは、ファイル記述子のフラグでありユーザー空間バッファへの直接的な書き込みを実現するもの。

 「O_DIRECTは2.6で書き直した」とモートン氏、そしてユーザーが実感できる点のひとつとしても最適化が行われている。カーネル2.4では、バッファが4Kバイトの倍数でなければなかった。一方、2.6では0.5Kバイト単位に細分化されている。カーネル2.4でも利用可能だったが、2.6ではインゴー・モルナー氏のスケジューラパッチが取り込まれたことも挙げる。

 マルチプロセッサ搭載時には、2.4のCPUスケジューラ以上の拡張性を実現できたそうだ。またインタラクティブなタスク確認も実現され、ここ数週間でもかなりの改善が加わっていると報告する(10月10日時点)。

 現行でLinux標準となっているext2、ext3ファイルシステムにも触れられた。「ディレクトリ下にサブディレクトリを作成した場合、これまでは特に制御されていなかったため物理的に離れた位置に書き込まれていた。2.6では見直しを行い、親ディレクトリの直近に書き込むようアルゴリズムの改善をした」とモートン氏。「シークタイムが改善され、ext2では2〜3倍、ext3では10倍以上の高速化を実現した」と強調する。

さらにスワッププロセス見直しでディスクパフォーマンスの向上を

 「カーネル2.4では、稼働中のプロセスすべてを判別してページスワップアウトをしていた。これは特定のプロセスで厳しい条件だった。2.6では改善を考え、公平なプロセス利用にしている。個々のプロセスは同等に扱われる」とモートン氏。スワップ読み込みが激増するとパフォーマンス低下が顕著であった点に関係しており、さまざまなパッチが寄せられているという。しかし「現在はまだすべてに目を通せていない」とモートン氏。

 「IA-32環境では、システムクロックを1/10にしている」というコメントも聞かれた。タイムアウトのアギュメントをマルチメディア系のオーディオデータ再生に当てはめ、きめ細やかな分解能を得るために必要だという。しかし、割り込みが10倍に増えてしまうため処理が10%増になるデメリットにも触れる。

他ファイルシステムサポートには2.4からの新機能なし

 ext2、ext3以外のファイルシステムでも幾つかの状況が報告された。

 SGI「XFS」のLinuxサポートは、すでにカーネル2.4でもパッチが存在している。これは2.6でも同様にパッチとして公開される。「XFSはIOサポートの面からも優れたファイルシステムだが、Red Hatが正式サポートしていないのは技術者問題の点からだと思う」とモートン氏。

 WindowsのNTFSサポートは、これまでのリードオンリーのままであり進展はない。現状でも設定変更で書き込み可能だが問題があり、「開発は継続しているもののファイルシステムそのものの複雑さ、そして改変追尾のドキュメント不備も影響している」と語る。また、開発版カーネル2.5で積極的だった「Hugetblfs」も取り込まれた。

VMによるページサポートはAPIで吸収する

 VMは、64Gバイト超のメモリサポートとしてカーネル2.6でサポートされる。「IA-32環境では、2Mや4Mバイト単位のページサイズでアクセスするが、これはTLBリロードやスプールを最小限に済むよう考慮しているものだ」とモートン氏。ただし、Linuxでは4K、8K、16Kバイトいずれかを基本としてアクセスできるよう想定されている。リーナス氏は「VMを変更してまでさまざまなページサイズをサポートするべきではない」との見解だ、とモートン氏。「そのため、APIを利用してハードウェアの機能を生かすような対応をした」という。このような利用シーンはデータベースやJava、数値計算のアプリケーション想定に他ならない。

ディスクの予測型IOスケジューラ採用で100倍以上のスループットを記録

 カーネル2.4のディスクアクセスは、リクエストを整理してからデバイスドライバへと渡す構造になっていた。この仕組みについて、「シンプルながらかなりの問題が起きていた。これまでに3回程度コードの書き直しをしている」とモートン氏。IOのスケジューラとして2.6では2つが採用されており、デッドラインIOスケジューラと呼ばれるものがある。「個々のディスクリクエストには2つのキューが別々に入る。それぞれは、ソートキュー、タイムキューであり、重要な点はタイムアウトのデットラインを設けたことだ」と語る。過剰な待ちが解消されるとのことだ。

 ただし、デメリットもあり「通常のiノードを読むまではディスク上、どの点を目的としてデータを読むかが不明なため、1回ごとの読み込みで次の地点を予想することはできない」とモートン氏。そして、問題視されたのはディスクのシークヘッドが毎回始点へと物理的に戻る点だ。「これにより、同じような個所へ何度もシークヘッドが移動を繰り返してしまう」と指摘する。そこでカーネル2.6では「予測型IOスケジューラ」が採用された。ディスクのある点から読み出した際、ヘッドは物理的な停止、つまりアイドル状態を保ちこれに対応した。この効果をテストをしたところ、100倍以上のスループット改善を記録しており、採用に踏み切ったという。しかし、「必ずしも同じような位置にアクセスがあるとは限らず、何もしないということが誤った判断の場合もある」とも付け加える。

 次には、デバイス数倍増における複数ディスクサポートのコメントが続く。

      | 1 2 | 次のページ

[木田佳克,ITmedia]