仮想リソースの概要
今回はKVMの仮想マシンに割り当てるさまざまな仮想リソースについて解説します。
はじめに仮想CPUの仕組みです。KVMでは仮想マシンはホストLinux上のプロセスとして実行されます。Linuxカーネルのプロセス・スケジューラによって、仮想マシンが持つ仮想CPUに対して、定期的にCPUの実行時間が割り当てられます。複数の仮想CPUを割り当てた場合は、1つのプロセス内で複数の処理を平行して行うマルチスレッドの仕組みによって、複数の仮想CPUによる並列処理を実現します。また、Intel VTやAMD-Vなどのプロセッサが提供する仮想化支援機能を利用することで、一般ユーザ権限のプロセスとして仮想マシンを効率的に実行することが可能です。
仮想メモリについては、2段階のアドレス変換が行われます(図1 ) 。
図1 KVMの仮想メモリアクセス
KVMのハイパーバイザは、各仮想マシンに「仮想的な物理メモリ」を割り当てます。このとき本物の物理メモリの位置を指定するMPFN(Machine Page Frame Number)と、仮想マシンごとの「仮想的な物理メモリ」の位置を指定するGPFN(Guest Page Frame Number)の対応をEPT(Extended Page Table/拡張ページテーブル)に記録して管理します。各仮想マシン上のゲストOSは、「 仮想的な物理メモリ」を本物の物理メモリと思い込んでいますので、ゲストOSは、各プロセスの論理アドレスとGPFNの対応をページテーブルに記録します。仮想マシン上のプロセスが論理アドレスを指定してメモリにアクセスすると、「 論理アドレス→GPFN→MPFN」というアドレスの変換が行われて、実際にデータが存在する物理メモリにアクセスすることになります。
仮想ディスクと仮想NICについては、KVMではQEMUを利用しています。もともとQEMUはソフトウェア的なエミュレーションで仮想マシンを実行するソフトウェアですが、この中でCPUの仮想化やメモリの仮想化などについて、CPUの仮想化支援機能を利用するように置き換えたものがKVMです。したがって、KVMでも仮想ディスクなどのデバイスは、QEMUのエミュレーションによって提供されています。
仮想NICについては第3回 で解説しましたので、ここでは、virt-managerによる仮想CPU/仮想メモリ/仮想ディスクの操作を説明します。ゲストOSの種類によっては、動的なリソース変更に対応したものもありますが、現状ではまだ十分に対応されているとはいえません。仮想リソースの変更は、基本的には仮想マシンを停止(シャットダウン)した状態で実施します。
仮想CPU/仮想メモリの操作
virt-managerの仮想マシン一覧画面で操作対象の仮想マシンをダブルクリックして、仮想マシンの管理画面を開きます。「 表示」 →「 詳細」メニューで仮想デバイスの管理画面を開いて、[Processor]を選択します(図2 ) 。
図2 virt-managerの仮想CPU管理画面
この画面で仮想マシンに割り当てる仮想CPUの個数が変更できます。物理CPUの個数とは無関係に、1つの仮想マシンに対して最大64個までの仮想CPUを割り当てることができます。ただし、パフォーマンスの観点では、物理CPUの個数以上の仮想CPUを割り当てる意味はありません。「 CPUピニング」はこの仮想マシンが使用する物理CPUの範囲を制限する際に指定します。「 0,3-5,7」のように指定します。これは、「 0,3,4,5,7番目」の物理CPUを使用するという指定になります。
同じ画面で[Memory]を選択すると、仮想CPUに割り当てるメモリ量の変更ができます。「 割り当てを変更」と「最大割り当て」の2種類の指定があります。「 最大割り当て」は動的なメモリの増減を行う際に関連する設定ですが、基本的には両方に同じ値を設定しておきます。
仮想ディスクの操作
新たな仮想ディスクを追加する際は、図2 の画面で「ハードウェアを追加」をクリックして、「 ハードウェアタイプ」に「Storage」を選択します。この時、図3 の画面が表示されます。
図3 virt-managerの仮想ディスク追加画面
ここで作成する仮想ディスクの容量を指定します。仮想ディスクのアクセス速度が向上しますので、「 すぐにディスク全体を割り当てる」にはチェックを入れたままにしておくことをお勧めします。また、Red Hat Enterprise Linuxなど、virtioに対応したゲストOSを使用する場合は、デバイスタイプに「Virtio Disk」を指定すると、仮想化環境に最適化された仮想ディスクのエミュレーションが行われます。
既存の仮想ディスクを削除する場合は、図2 の画面で削除対象の仮想ディスクを選択して「削除」ボタンをクリックします。
この他に、virt-managerでは既存の仮想マシンの複製(クローン)を行うことも可能です。ただし、IPアドレスなど、ゲストOS内部の設定は複製後に手動で変更する必要があります。このような変更を自動化するスクリプトのサンプルが公開されていますので、こちらも参考にしてください。
Linux at IBM - KVM 仮想マシンの自動複製
http://www.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-0004E0BB