LinuxCon Japan 2012を3倍楽しむための基礎知識

第3回進化し続けるKVM

はじめに

ここ数年、ハイパーバイザ方式の仮想化技術が普及し、商用システムに適用することが当たり前という時代になってきました。さらに最近では、クラウドサービスやデータセンタでオープンソースの仮想化技術を採用する動きも出ています。

図1 仮想化マシンの基本用語
図1 仮想化マシンの基本用語
仮想的なマシンを「VM(Virtual Machine:仮想マシン)と呼び、仮想化を実現しているソフトを「VMM」⁠Virtual Machine Monitor)あるいは「ハイパーバイザー」と呼びます。

オープンソースのハイパーバイザには何種類かの実装方式がありますが、中でもKVMが最も有望であると考えます。その理由は、開発-利用-要望-開発の好循環が実現されており、その好循環がKVMの進化に大きく貢献しているからです。開発者だけでなく、利用者も必要なコードを開発したりドキュメントを整備し、その貢献によりプロジェクトの一員と認められ、次の仕様検討に要望を出すということがすでに行われているのです。

図2 KVMの仮想化環境
図2 KVMの仮想化環境
基本となる制御は、次のとおりとなります。
①QEMUが仮想ハードウェアを初期化、実行を開始します。
②QEMUがカーネルに処理を移します。
③ゲストOSを直接実行します。
④VMMの制御が必要になった場合、カーネルに処理が戻ります。 CPUの仮想化支援機能の制御レジスタを見ることによって何が起きたかを知ります。
原因によって、カーネルまたは⑤QEMUで処理を実行し、再び③ゲストOSを実行します。これを繰り返します。
⑥性能向上を図るため、ゲストに物理ハードウェアを割り当てて直接アクセスさせることができます。
仮想マシンのさまざまなデバイスをエミュレートするために、 QEMUはLinuxが提供する充実した機能を駆使します。たとえば、
⑦仮想ネットワークを構築するためにゲストの仮想NICをLinuxのソフトウェアブリッジにつなげ、
⑧仮想イメージのストレージバックエンドとしてLVMを使う
ことが多いです。

実は、この好循環を支援する目的もあって、Linux Foundationが2010年から主催している国際カンファレンスLinuxCon Japanの中で、⁠仮想化ミニサミット」を開催し、KVMとその関連プロジェクトに関わる技術者および利用者が意見交換を行う、技術交流の場を提供しています。

仮想化ミニサミットでは、ハイパーバイザに限らず、ストレージ、ネットワーク、クラウド環境の運用・管理ツールまで議論をしています。各分野の主要開発者はそれぞれが関わるKVMの現状と最新の開発動向を、ユーザは利用状況を紹介しています。⁠こんな新しい技術があるんだけど、はたしてOSSの実装ができるのかわからない、本当に役に立つのか分からない」⁠こういうことができなくて困っている」と紹介された様々な機能が、翌年には実現され、各分野で正式採用されている実績もあります。このような進化の状況をいくつか紹介しましょう。

ネットワーク

第1回目(2010年)の仮想化ミニサミットで、Vyatta社のStephen Hemminger氏は仮想化に伴うネットワークの複雑化について解説しました。

まず、ブリッジ機能を持ったSR-IOV(Single Root I/O Virtualization)対応のNICが登場したものの、カーネルのブリッジ機能と統合されていないので、現実的に使えないという現状を説明しました。しかしその後、Hemminger氏が直接開発に関わったiproute2のツール群で、従来のカーネルのソフトウェアとSR-IOVデバイスのブリッジ機能を統一管理する取り組みが行われ、利用できる状況へと改善されつつあります。

さらに、最近では、ミニサミットで要望があがっていた、iptablesのルールをフィルタリング機能搭載のNICと共有する機能も開発され始めています。これができると、フィルタリングの処理を物理NICに任せられるので、CPU使用率が下がります。

また、同氏は、仮想化の普及とクラウドの登場によってネットワークの管理が非常に困難になったことにも触れ、これらの問題を解決、すなわち、ハイパーバイザの中にある仮想ブリッジと従来の物理ブリッジの統一管理を可能にするのは、IEEEで規格化が進んでいる「Edge Virtual Bridging」⁠802.1Qbg)「Bridge Port Extension」⁠802.1Qbh)であると語っていました。

そして、翌年のLinuxCon Japan 2011では、IEEEにおいて802.1Qbgの規格化を主導しているIBM社のVivek Kashyap氏が、Stephen Hemminger氏が紹介した機能がlibvirtで制御可能なレベルに到達したと発表しました。Linuxのコミュニティが先行開発した新しい技術が利用できる形になった、まさに進化を実感できる良い例だと思います。

また、第1回目のミニサミットでは、⁠OpenFlow」など最新のネットワークに関する研究結果を活かした「Open vSwitch」も話題になりました。2011年のミニサミットでは、LinuxカーネルへのOpen vSwitch移植を主導したSimon Horman氏がOpen vSwitchのセッションを持ち、新しい帯域幅の制御機能などについて紹介しました。

そして2012年3月には、Simon HormanをはじめOpen vSwitchの努力が実り、カーネル3.3にOpen vSwitchが取り込まれたのです! これも着実な進化です。現在は、libvirtのOpen vSwitchへの対応も進んでおり、近い将来には、主要ディストリビューションにも入るのではないでしょうか。

OpenFlowはSDN(Software Defined Networking)を代表する技術です。Linuxシステムにとっても重要な技術ですので、今年のLinuxCon Japanで紹介する予定です。

ストレージ

第1回目の仮想化ミニサミットにおいて、Christoph Hellwig氏は「Linux Storage and Virtualization」と題してゲストOSのディスクI/Oの性能と信頼性を向上させるためのKVMの工夫について紹介しました。

virtioのブロックデバイス(virtio-blk)で性能改善が期待できることや、ゲストOSに仮想ディスクI/Oトポロジー(最適のブロックサイズやアラインメントなど)を見せることで性能改善を図っていることが語られました。その反面、virtio-blkに以下の問題があることが報告されました。

  • x86では1virtio-blkデバイスあたり1LUNしか使えず、PCIデバイスの最大数によってvirtio-blkデバイス数が制限される
  • 従来のSCSIストレージが持つ機能を実現するためには、ゲスト側のvirtio-blkのフロントエンド、ハイパーバイザ側のvirtio-blkのバックエンド、virtio-blkの規格を変更する必要がある
  • SCSIパススルーに関して、ゲストがストレージのバックエンドを意識しなければならないため、管理が複雑で安全性が担保できない

しかし、第2回目のミニサミットで、IBM社のStefan Hajnoczi氏が、QEMUのコミュニティはこれらの問題を解決するために、virtio-scsiの開発を始めたと報告しました。そして、多少の紆余曲折はありましたが、2012年2月には、virtio-scsiのバックエンドはQEMUに、virtio-scsiのフロントエンドはLinuxカーネルに入りました。

運用の面では、ストレージのバックエンドとしてQCOW2のイメージフォーマットあるいはスパース・ファイルを使うことによって、シン・プロビジョニングを実現できます。しかし、仮想マシンがデータを書き込んでいくに従ってイメージが拡大する一方で、ゲストが必要としないデータができても(つまりゲスト上でファイルを消しても)イメージを縮小できないという課題があります。

この課題を解決する手段の開発状況も、2010年と2011年のミニサミットで報告されました。それは、ゲストにSCSIの「UNMAP」コマンドまたはATAの「TRIM」コマンドを使って必要がなくなったセクターを通知してもらい、ホスト側でそのセクタが格納されているイメージファイルの領域を開放する、という方法でした。

ファイルの任意の領域を開放するためには、ファイルに穴を空けることができるファイルシステムが必要です。しかし、当時のLinuxのファイルシステムには、そういう機能が標準では搭載されていませんでした(OCFSとXFSは専用のioctlを提供していました⁠⁠。幸運にも、2011年7月にその機能がhole punchingという名前でVFSレイヤーに実装され、ext4などから使える標準的なAPI(fallocateの拡張)が提供されました。近い将来、QEMU-KVMもこの新APIに対応できるようになり、従来のディスクイメージが伸縮可能なイメージになると考えられます。

2010年のミニサミットで紹介されたもう1つの機能は、cgroupsによるディスクI/Oの制御(I/O controller)です。最初は、プロセスグループごとにウェイトを付けてその比重に応じた帯域幅を割り当てることでI/Oを制御していましたが、その制御方法で予測可能な性能が得られないという問題があったため、最大の帯域幅を指定できるスロットリング方式が開発されました。

I/O controllerの用途の1つとして、仮想化環境での仮想マシンのI/Oの制御があります。しかし、ストレージの構成によっては効果がなかったり、想定どおりの挙動を示さないことがあります。ウェイトを付けると物理ディスクに対する制御を行うのですが、ソフトウェアRAIDやmultipathのような複雑なストレージ構成を組んでいると、個々の末端でのI/Oスケジューリングの決定が親のRAIDデバイスやmultipathでどんな結果をもたらすかが予測できず、仮想マシンから見た帯域幅も簡単に予測できません。実は、スロットリング方式も、ウェイト方式と同様にブロックデバイスを制御するものであり、NASストレージ(NFSなど)や分散ファイルシステムにおいては、何の効果も期待できませんでした。

このように、I/O controllerでは、全てのストレージ構成に対応できないことがわかったため、翌年にはQEMUにI/O throttlingの機能が実装されました。これは、ゲストと(QEMUがエミュレートする)仮想ストレージの間に組み込まれる機能であり、ゲストが発行したI/Oを直接絞ることができますので、ストレージ構成に依存しなく汎用です。

LinuxCon Japan 2012で、上記の機能をはじめストレージの最新動向について報告される予定です。

運用・管理

運用・管理に関しては、KVMの仮想化環境の管理ツールのコア技術であるlibvirtの現状と最新動向を、第1回目から2年連続でRed Hat社のChris Wright氏とlibvirtのメンテナの一人であるDaniel Veillard氏が紹介しました。

技術的な詳細については割愛しますが、上記の「ネットワーク⁠⁠、⁠ストレージ」の項で説明した機能に加えて、大規模なデータセンタやクラウドを管理するには欠かせない、ストレージのライブスナップショットやQEMU-KVMライブマイグレーション機能を管理するためのAPIが提供されるようになりました。後者のライブマイグレーションに関しては、現在もコミュニティでさまざまな技術が提案され、活発に開発されています。詳細は次回の記事でご紹介します。

libvirtが安定した今、一番注目を浴びているのは、ハイパーバイザや物理ノードではなくもっと大きい単位でデータセンタ全体の管理を可能にするクラウド管理ソフトです。OSSでは先行者としてEucalyptusが有名ですが、最近ではITの大手企業が後押ししているOpenStackやoVirtが注目を浴びています。LinuxCon Japan 2012では、これらも話題になることは必須です。お楽しみに!

LinuxCon Japan 2011仮想化ミニサミット パネルのひとコマ、左端は筆者
LinuxCon Japan 2011仮想化ミニサミット パネルのひとコマ、左端は筆者

今も進化し続けるKVM。基盤技術からHAやクラウドの運用・管理まで、毎日いろいろな機能が開発されています。それらの技術がより多くの場面で利用できるように、今後もLinuxCon Japanなどで紹介していきたいと思います。

おすすめ記事

記事・ニュース一覧