4月版 乱立する仮想化技術を統合しよう


上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2006/4/28

linux-kernelメーリングリスト(以下LKML)かいわいで起きるイベントを毎月お伝えする、Linux Kernel Watch。2006年3月はどのようなことが起きたのか、見てみましょう。

カーネル2.6.16リリース

 3月20日にリリースされた安定版カーネルの2.6.16は、新しいunshareやppoll、*at(openatなど)といったシステムコールが追加されています。

 2.6.16のリリースを受けて、Andrew Mortonは「-mm merge plans」と題したメールを3月27日に出しました。1500行にわたる巨大なメールで、2.6.17へのマージに際して-mmツリーに入っているパッチを1つ1つ検討するというものです。これを受けて、「何を取り込んでいくべきか」「何を延期するべきか」という議論が盛り上がりました。

spliceシステムコール導入でコピーが速くなる

 カーネル2.6.17に向けて、spliceおよびteeシステムコールの導入が進んでいます。

 spliceシステムコールは、入力用と出力用のファイルディスクリプタをカーネル側でつないでくれるものです。これまでread()とwrite()のループを利用してユーザー空間で実施していたコピー処理を、カーネル側で実行します。read()/write()を利用すると、カーネル空間からユーザー空間へのメモリコピーと、ユーザー空間からカーネル空間へのメモリコピーが発生します。spliceシステムコールによりカーネル側で実施すれば、ゼロコピーが実現できます。

 また、Linuxカーネルには、これまでもファイルをネットワーク経由で送信するsendfileというシステムコールがありました。それより効率よく、使いやすいインターフェイスを目指して設計しているようで、最終的にはsendfileもspliceを利用して実装するつもりのようです。

 teeシステムコールは、spliceの「入力バッファを消費しない版」です。複数の出力ファイルに入力をコピーしたい場合に使えそうです。spliceとteeシステムコールの画期的な点は、メモリページをコピーしているのではなく、コピー元ファイルのメモリページの参照数を増やし、コピー先のファイルに所属させることでコピーを実現していることだそうです。

 現状では、Linuxカーネルのパイプの実装に依存している部分があり、ファイルデスクリプタの一部はパイプでなければならないという制約があります。また、引数のインターフェイスなどについての議論も展開しました。

 面白い機能なので、今後どのアプリケーションに実装されるか、見ものです。

参考:
Linuxカーネルソース内でspliceを実装している場所
fs/splice.c

メモリバリアのドキュメント完成

 以前お伝えした(編注)Linuxのメモリバリアの機構について、Stephen Hemmingerが解説をまとめてドキュメントとしてLKMLに投稿しました。記述の間違いや挙動の詳細などについての議論が展開し、結果としてLinuxカーネルで利用できるメモリバリア関連の命令について記述した2000行ほどの詳細なドキュメントが完成しました。

編注:1月版 GCC 4.0向け最適化開始で2.95はオシマイ」。

 CPUは、命令を順番に実行するわけでありません。例えば、メモリ書き込みの命令があってもすぐに書き込むのではなく、書き込みをバッファリングします。シングルCPU環境で普通のメモリに対するアクセスしかない場合は、バッファリングしていることを意識する必要はありません。しかし複数のCPUが1つのメモリを共有していたり、メモリマップドI/Oで外部デバイスとのやりとりがあると、問題は複雑になります。

 正しいタイミングで正しいメモリバリアの命令を利用するための情報がなかなか手に入らず、間違った書き方をされたデバイスドライバによってパフォーマンスが出なかったり、一部の構成で動かなくなるバグが入り込むということは十分あり得ます。

 このドキュメントの登場で、こうした状況が改善するとよいですね。

参考:
カーネルソース内部のドキュメント
Documentation/memory-barriers.txt

1/2

Index
Linux Kernel Watch 4月版
 乱立する仮想化技術を統合しよう
Page 1
 カーネル2.6.16リリース
 spliceシステムコール導入でコピーが速くなる
 メモリバリアのドキュメント完成
  Page 2
 仮想化技術統合の兆し?
 ext2にext3の機能をバックポート
 -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 記事ランキング

本日 月間