CPUの仮想化支援機能
前回は、CPUのHyper-Threadingの機能とLinuxの関係について解説しました。Hyper-Threadingを有効にするとCPUの論理コア数が増えるため、仮想化基盤などでは必須の機能です。多くの企業において、仮想化基盤を実現するためにハイパーバイザー型の仮想化ソフトウェアが採用されていますが、このハイパーバイザー型の仮想化ソフトウェアによる仮想化基盤(ここでは、完全仮想化を想定)を実現するには、ハードウェアに搭載された物理CPUの仮想化支援機能が必要です。今回は、CPUの仮想化支援機能とLinuxの関係について簡単に解説します。
Intel社のCPUやAMD社のCPUでは、仮想化支援機能が搭載されています。Intel社のCPUに搭載されている仮想化支援機能は、Intel VT、あるいは、Intel VT-xと呼ばれます。一方、AMD社のCPUに搭載されている仮想化支援機能は、AMD-Vと呼ばれます。
CPUにおける仮想化支援機能は、Linuxに実装されているKVM(Kernel Virtual Machine)などを利用する際に必要になります。KVMは、VMwareやHyper-Vなどと同様に、ハイパーバイザー型の仮想化ソフトウェアに分類されます。仮想化基盤やKVMを利用したクラウド基盤などでは、ゲストOSが稼働するサーバーのハードウェア設定で、仮想化支援機能を有効にしておきます。
Linux環境で広く利用されているKVMは、Linuxカーネルに含まれるドライバーとして稼働しますが、CPU側の仮想化支援機能を必要とします。当然、KVM上で稼働する仮想マシンは、KVMホストOSが稼働するハードウェア側のCPU仮想化支援機能の搭載が必要条件になります。
仮想化環境においては、メンテナンスの都合などにより、ゲストOSを他の物理マシンに移動させるライブマイグレーションなどの機能が利用されますが、当然、移動先の物理マシンでも同様の仮想化支援機能が必要になるため、そのような運用上の要件がある場合は、物理サーバー側での仮想化支援機能の設定を事前に適切に行う必要があります。また、サーバーに搭載されている物理CPUの世代や種類によって、仮想マシンの設定ファイルの中身が異なりますので、仮想化基盤を検討している場合は、CPUの仮想化機能の設定の有無だけでなく、CPUの世代や種類に注意が必要です。
図1.KVMのアーキテクチャ
仮想化支援機能をオフにするケース
Linuxに標準搭載されているKVMを使ったハイパーバイザー型の仮想化基盤やクラウド基盤においては、CPUの仮想化支援機能が必須といっても過言ではありませんが、逆に仮想化支援機能をオフにするケースもあります。
例えば、低遅延アプリケーションを物理サーバー上で稼働させる場合には、仮想化支援機能を無効にする場合もあります。また、Hadoopなどのビッグデータ分析基盤といった、CPUパワーを必要とするシステムでは、計算サーバーのCPUの仮想化支援機能をオフにすることが推奨されています。
CPUの仮想化支援機能と最近話題のDocker
近年、ハイパーバイザー型の仮想化ソフトウェアのライセンス削減という観点から、軽量のコンテナ環境を実現する次世代型の仮想環境として、Dockerが注目を浴びています。Dockerは、軽量なアプリケーション環境(コンテナ)を管理するソフトウェアとして、Linux OS上で稼働します。
Dockerエンジンが稼働するOS環境を「ホストOS」といい、ホストOSの上で複数のDockerコンテナが同時に稼働できます。あたかも仮想化基盤におけるゲストOSが複数同時に稼働しているかのように、Dockerコンテナが複数同時に稼働します。このLinuxで稼働するDockerエンジン、および、Dockerコンテナは、物理CPUの仮想化支援機能を利用しません。当然、Linux上で稼働するDocker環境では、ハイパーバイザー型の仮想化ソフトウェアも不要です。
ハイパーバイザー型の仮想化基盤では、CPUの仮想化支援機能が必須であるのに対し、Linux上で稼働するDocker環境は、CPUの仮想化支援機能が不要であるため、ハイバーバイザー型の仮想化基盤に比べると、ハードウェアとの結合度が非常に低いという特徴があります。そのため、例えば、Dockerエンジンが動くパソコンから、Dockerエンジンが動く別のLinuxサーバー、あるいは、Dockerエンジンが稼働する異なるLinuxディストリビューション間で、CPUの種類や世代、仮想化支援機能の有無を一切意識することなく、Dockerコンテナを移植できます。
近年、欧米のインターネットサービスプロバイダーや、ホスティング事業者において、省電力のカートリッジ型の物理サーバー上でDockerコンテナを稼働させる事例が散見されます。CPUの仮想化支援機能の有無に関わらず、カートリッジ型サーバーを導入し、ハイパーバイザー型の仮想化ソフトウェアを排除しつつ、Dockerコンテナを稼働させるといったIT基盤を採用しているのです。
彼らがDocker環境を採用する狙いの一つとしてあげられるのが、ハイパーバイザー型の仮想化ソフトウェアのライセンス削減です。有償のハイパーバイザー型の仮想化ソフトウェアは、ゲストOSの数などによって費用が異なります。仮想化ソフトウェアにかかる費用をできるだけ抑えつつも、仮想環境を実現するには、Dockerなどの選択肢が候補にあがります。カートリッジ型のサーバーに搭載されたCPUの仮想化支援機能を一切使用しない、すなわち、有償の仮想化ソフトウェアを排除し、Dockerによって複数のアプリケーション環境(ユーザー環境)を提供します。また、Dockerコンテナ自体も軽量であるため、ハイパーバイザー型の仮想化基盤に比べて、集約率を高めることができます。
ただし、1台の物理サーバー上で、ハイパーバイザー型の仮想化環境とDocker環境を混在させる場合もあります。例えば、従来のハイパーバイザー型の仮想化基盤のゲストOSでDockerエンジンを稼働させるといったシステムの場合、ハイパーバイザー型の仮想化ソフトウェア上でゲストOSを稼働させるために、当然、CPUの仮想化支援機能が必要です。
図2.Dockerでは、CPUの仮想化支援機能が不要
以上で、CPUの仮想化支援機能とLinuxを取り巻く環境などについて簡単に解説しました。
CPUの仮想化支援機能を有効にすれば、Linuxのハイパーバイザー型の仮想化ソフトウェアであるKVMなどが利用可能になります。しかし、低遅延アプリケーションやビッグデータ分析基盤ソフトウェアのHadoopを稼働させる場合には、仮想化支援機能を無効に設定することもあるため、前回のCPUのHyper Threading機能と同様に、用途によってハードウェアの設定が異なる点に注意しなければなりません。
また、一言で「仮想環境」といっても、ライセンス等の理由から、仮想化ソフトウェアを利用せずに、Dockerを利用するケースもあります。仮想化ソフトウェア上で、大量の仮想マシンを動かすには非力なカートリッジ型のサーバーであっても、Dockerコンテナを使えば高い集約率を実現する仮想環境を手に入れることができるため、「仮想環境=仮想化支援機能が必須」と言い切れない点にも留意しておく必要があります。
次回は、電源管理の仕組みとLinuxの関係について解説します。お楽しみに。
【筆者プロフィール】
古賀政純(こが・まさずみ)
日本ヒューレット・パッカード株式会社
オープンソース・Linuxテクノロジーエバンジェリスト
兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレット・パッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。
現在は、日本ヒューレット・パッカードにて、Hadoop、Spark、Docker、OpenStack、Linux、FreeBSDなどのサーバー基盤のプリセールスSE、文書執筆を担当。日本ヒューレット・パッカードが認定するオープンソース・Linuxテクノロジーエバンジェリストとして、メディアでの連載記事執筆、講演活動なども行っている。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「Mesos実践ガイド」「Docker 実践ガイド」「CentOS 7実践ガイド」「OpenStack 実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。