RHEL 7で追加されたKVMの新機能
2015年 仮想化プラットフォームの新事情
VMware vSphere 6.0、Microsoft Hyper-V、RHEV 3.5の仮想化プラットフォームについて、新機能と機能拡張を中心にその最新動向を探る。 この特集のまとめPDFを無料でダウンロードできるようになりました!KVMの登場から現在までの経緯をたどりつつ、最新のRHEL 7に標準機能として搭載されるKVMの最新バージョンの機能について解説します。
KVMの開発経緯
Linux KVM(Kernel-based Virtual Machine)は、Linuxカーネルをハイパーバイザーとして、ユーザーランドのQEMUと組み合わせて、全体として仮想化ソフトウェアとして振る舞う実装だ。RHEL(Red Hat Enterprise Linux)では、RHEL 5.4のリリース時に初めてKVMが搭載された。KVMは、Intel VT-xや、AMD-VなどのCPUに実装された仮想化支援命令を使うことで、完全仮想化型の仮想マシンを作り出すことができる。また、KVMはXen HypevisorやVMware vSphereと同様に、ハイパーバイザータイプの仮想化技術である。なお、仮想化技術の分類については、以下のURLに示す筆者の過去の記事を参考にして頂きたい。
【参考】
オープンソースXenによるサーバー仮想化 — 第1回:仮想マシンとサーバー仮想化について
KVMは、もともとイスラエルのQumranet社(Red Hatが2008年に買収)が開発したオープンソースの仮想化ソフトウェアで、2006年10月に公開された後、同年12月にLinuxカーネルにマージされ、Linuxカーネル 2.6.20から標準機能として利用できるようになった。実体としては、1MBにも満たないカーネルモジュールとして実装されている。取材などで、「KVMのロードマップを教えてください」と言われたこともあったが、このカーネルモジュールについて、ロードマップを語るのは非常に難しい。
公開当初は、QEMUに対するCPUエミュレーション処理を高速化する程度の実装であったが、IBM社のエンジニアが寄与したVirtIOというパラバーチャリゼーション(準仮想化)によるI/O高速化の実装により、仮想ブロックデバイスと仮想ネットワークの性能が飛躍的に向上した。
VirtIOは、仮想PCIバスを作り、VirtIO Ringと呼ばれるリングバッファを仮想マシンと仮想化ホスト上のQEMUの間で構成して共有する。ストレージコントローラーやネットワークカードなどの仮想デバイスをQEMU側で完全にエミュレーションを行う必要がなくなるため、効率の良いI/O処理が行えるようになり、他のハイパーバイザーと性能面で遜色ないレベルまで向上した。それどころか、現在では世界最速の仮想化ソフトウェアのポジションを数年間キープしており、その地位を確固たるものにしている(※SPECvirt_sc2010の計測結果に基づく)。
【参考】SPECvirt_sc2010
https://www.spec.org/virt_sc2010/
現在のKVMには、ライブマイグレーション機能やストレージライブマイグレーション機能、スナップショット機能など、多くの高付加価値な機能が加わっており、大企業のミッションクリティカルな仮想環境や、パブリッククラウド/プライベートクラウドなどに幅広く適用可能なレベルに仕上がっている。もちろん、Intel VT-x/AMD-Vの仮想化支援機能を持つCPUを搭載したノートPCでも簡単に試すことができる。繰り返すが、KVMは「Linuxの標準機能」なのだ。
KVMはいかに普及したのか?
KVMが最初に普及していった要因としては、クラウドコンピューティングの登場が1つの要因として考えられる。通信キャリアが提供するパブリッククラウド環境では、2010年ぐらいから本格的に採用されてきた。その時期は、クラウド環境を構築するための代名詞ともいえる「OpenStack」がやっと誕生したばかりで、パブリッククラウドにKVMを採用する会社は、各社独自のクラウド管理ポータルのソフトウェアを自社開発していたのだ。
【参考】OpenStack
その後、VMwareのvSphereやMicrosoftのHyper-Vからの乗り換え先として、KVMベースの仮想化ソフトウェアへの注目が集まった。ネットサービス事業者や、通信事業者、製造業、流通業、教育機関などの業態を問わず、仮想環境の第二の選択肢(セカンドチョイス)としてKVMの採用が増えてきた。
身近な例を挙げると、日本のあるスーパーマーケットでは、全国約300店舗の店舗サーバー計600台で、RHELのKVMで複数の店舗システムを稼働させている。また、日本のある研究機関では、RHELのKVM上の仮想マシンに40コアのCPUと1TBのメモリを割り当て、その上で地震による建物の倒壊や、津波による水害のシミュレーションを行っている。海外のある研究機関では、RHELのKVM上の仮想マシンで、エボラ出血熱の抗体開発のためにエボラウイルスのゲノム解析を行っている。このように、KVMは身近なところでも社会に大きく貢献している。
また、現在OpenStack環境を中心にKVMのさらなる採用が進んでおり、特に大規模なパブリッククラウドでの採用例が多い。最近では、Intel/AMDなどのx86_64 アーキテクチャ以外にも、IBM Powerのppc64アーキテクチャに対するKVMの実装がRHELにも取り込まれた。しかしながら、KVMはLinuxカーネルの中に、もれなく含まれており、使われていたとしても、調査会社がトラッキングしにくく、調査結果には出てこないことも多いが、着実に普及している。
RHEL 7で追加されたKVMの新機能
RHEL 7では、性能向上に対する実装改善がほとんどを占めている。KVM本体の基本実装としては、RHEL 6の頃にほぼ完了しているためだ。キーとなるのが、仮想化ホスト側の数多くのCPUを使って、仮想環境のI/O処理を高速化するという取り組みと、ロック処理や割り込み処理にかかるオーバーヘッドを最小限化する取り組みだ。
ストレージ関連
ストレージ関連では、仮想ブロックデバイスに対するブロックディスカード(Block Discard、SSDではTRIMと呼ばれる)やマルチキュー(Multiqueue)の実装追加がある。ブロックディスカード機能は、SSDなどのデバイスだけではなく、シンプロビジョニング機能を持つストレージに対しても有効だ。仮想マシンの中から確保していた領域を利用しなくなったという通知が行えるようになり、シンプロビジョニングされた未使用領域の回収ができるようになる。この仕組みにより、ストレージの利用率が改善される。
マルチキューは、仮想化ホストの複数のCPUコアを効率よく使い処理が行えるため、バックエンドのストレージが高速NANDフラッシュなどの並列I/O性能が高いストレージだった場合に、性能向上が見込まれる。
ロックの改善(PV ticketlock)の採用
RHEL7上のKVMでは、ゲストOSとしてRHEL7を動かした場合のロックの改善(PV ticketlock)が加わっている。PV ticketlockは、Linuxカーネル 3.3以降から利用ができるロックの仕組みだ。スピンロックは、ロック待ちの場合にCPUを無駄に消費してしまい、仮想環境で発生した場合に効率が悪い。特にその中でも、ticket spinlockとは相性が悪い。そこで、仮想マシンの中でゲストOSがPV ticketlockを利用することで、この点を改善することができる。
Windows Server向けの改善
Windows Server向けの実装強化としては、KVM側の仮想マシンの実装にHyper-V向けのタイマや割り込み、ロックの実装をエミュレーションさせるという、新しく面白い試みがある。Hyper-Vと同じ仕組みをQEMU側に実装し、KVM上の仮想環境であってもWindows Serverが効率よく動く。詳細は、以下のURLを参照していただきたい。
Cole Robinson: Enabling Hyper-V enlightenments with KVM
http://blog.wikichoon.com/2014/07/enabling-hyper-v-enlightenments-with-kvm.html
RASの実装
仮想マシンの中のゲストOSに対するRASの実装も注目すべき点だ。ハイエンドサーバー(Xeon E7ファミリなどを搭載したモデル)で、メモリ障害時にメモリ縮退して稼働し続ける仕組みを持つシステムでのみ有用な仕組みだが、回復不可能なメモリエラーが発生した場合に、該当のメモリのページを使っているのが仮想マシンだったとき、仮想マシンの中のゲストOSに対しても、MCE(Machine Check Exception)として通知することができる。