9月版 IDEハードディスクが「/dev/hda」ではなくなる日


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

実ハードでも仮想化環境でも動くカーネル

 Rusty Russelはparavirtパッチを提案しました。これは、VMwareやXenなどで仮想化されるOSとしてLinuxを実行する際に必要な機構を統合するべく登場した仕組みです。彼の目指すところは、カーネルが起動された環境を自動で検出して挙動を切り替え、同じカーネルのバイナリが仮想化環境でも実ハードウェア環境でも使えるようにしたいということのようです。

 仮想化環境で実行する場合は、OSから見てハードウェアが直接利用できる状況ではありません。そのまま実行してはまずい命令がいくつかあり、それらはハイパーバイザー呼び出しなどで仮想的に実現されます。

 仮想化した場合の問題について、割り込み禁止命令を例に説明しましょう。まず、割り込み禁止命令を1つの仮想OSが実行したからといって、実ハードウェアシステム全体で割り込み禁止になってしまうと、その仮想OSに無関係な割り込みまで禁止されてしまうので問題です。そのため、その命令をハードウェア的にトラップし、仮想マシンモニタ側で割り込み処理を実施させないようにフラグを立てるなどの処理をします。疑似仮想化の場合はOS自体を変更し、ハイパーバイザーを呼び出すように変更します。しかし、割り込み禁止は、タイミング的に重要な部分で頻繁に使われる処理です。オーバーヘッドが大きいと、全体的なパフォーマンスに影響が出ます。

 Linuxカーネル自身が、自分が仮想化環境で実行されているのかそうでないのかを検知して、条件分岐してハイパーバイザーコールを発行するか、通常の命令を呼び出すかを判断すればいい。その仕組みを実装するのがparavirt_opsです。仮想化環境向けに置き換えが必要だと思われる関数について、関数ポインタを提供します。Linuxカーネルで呼び出しが必要な場合は、直接そのマシン語命令を呼び出すのではなく、関数ポインタを利用して関数を呼びます。

 「VMwareやXenなどの仮想マシンモニタとのインターフェイスをどう実装するのか」という点については議論が続いており、なかなか同意は取れません。しかし、この部分の実装を統一するためのフレームワークについては、両陣営とも前向きなようです。

 Rusty Russelは、一連のパッチのついでに「lhype」という仮想マシンモニタのサンプル実装を作り始めたと発表しました。既存の仮想マシンモニタであるXenもVMwareも、Linuxカーネルのツリーにマージされるようなものではありません。そのため、議論の内容が抽象的になりがちでした。実際にカーネルハッカーたちが触りやすいように、カーネルツリーにマージできるような小さな実装を目指したとのことです。XenやVMwareとは別の、さらなる選択肢を提供することを目標としているわけではないようです。これが開発に良い影響を与えるとよいですね。

参考:
paravirtのmercurialリポジトリ
http://ozlabs.org/~rusty/paravirt/?cl=tip
仮想化メーリングリストログ
http://lists.osdl.org/pipermail/virtualization/

-stableの進ちょく

 2.6.17がリリースされ、しばらくは2.6.16系の-stableリリースもGreg KHらがメンテナンスしていました。しかし、2.6.16.27が7月17日にリリースされてからは、新しいリリースが出ていません。従来と同様、Greg KHたちはそもそも並行してメンテナンスを継続し続ける予定ではなかったのです。

 これを受けて、2.6.16系統の-stableリリースをAdrian Bunkが引き継ぐという発表がありました。彼は、8月12日の2.6.16.28-rc1をはじめとする3回のRCリリースを出した後、8月26日に2.6.16.28をリリースしました。パッチの出し方がGreg KHのやり方と違うなど戸惑いもありましたが、今後安定してリリースを出せるとよいですね。

  • 2.6.16.28(8月25日)
      ・sctpにあった特権の昇格の問題の修正(CVE-2006-3745)
      ・デッドロック問題があるため、UDFは現状1Gbyte以上のextentをサポートしていないことにする(CVE-2006-4145)
      ・PPC970のHID0 attention enableを起動時にオフにする(CVE-2006-4093)
      ・cdrom:cgc.buflenの不正な割り当て(CVE-2006-2935)
      ほか22パッチ

  • 2.6.17.8(8月6日)
      ・ALSA:互換性のためPCM OSSデバイスが読み込み専用/書き込み専用であってもO_RDWRでのopenを受け付ける
      ・stableブランチをMAINTAINERSファイルに追記
      ・ext3:NFS経由で不正なファイルハンドルを与えられたときにext3_errorを発動しないように修正
      ほか23パッチ

  • 2.6.17.9(8月18日)
      ・PPC970のHID0 attention enableを起動時にオフにする(CVE-2006-4093)
  • 2.6.17.10(8月22日)
      ・デッドロック問題があるため、UDFは現状1Gbyte以上のextentをサポートしていないことにする(CVE-2006-4145)
      ・sctpにあった特権の昇格の問題の修正(CVE-2006-3745)
      ・elv_unregisterがモジュールアンロード時にクラッシュする可能性があるのを修正

  • 2.6.17.11(8月23日)
      ・IEEE1394がppcで動作しないのを修正
      ・mdドライバのいくつかの修正
      ・swuspで最初のswapデバイスしか利用できなかった問題の修正
      ・ia64とsparcにて、不正なELFファイルでシステムがクラッシュするバグの修正
      ほか20パッチ
(以上、敬称略)

2/2

Index
Linux Kernel Watch 9月版
 IDEハードディスクが「/dev/hda」ではなくなる日
  Page 1
 2.6.18の開発進ちょく
 2.4系列のメンテナンスをどうするか
 libata移行でデバイスファイル名変更
 仮想OS上のリソース制限に待った!
Page 2
 実ハードでも仮想化環境でも動くカーネル
 -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 記事ランキング

本日 月間