仮想化とは、他のオペレーティングシステム (ゲスト仮想マシン) をホストのオペレーティングシステム (ホスト) の内側で動作させることのできる技術を意味します。
openSUSE Leap には Xen および KVM と呼ばれる、最新のオープンソース仮想化技術が含まれています。これらはハイパーバイザとも呼ばれ、 openSUSE Leap では、単一の物理システム内に複数の仮想マシン (VM ゲスト) を配置/廃止/インストール/監視/管理することができます (詳しくは ハイパーバイザ をお読みください) 。また openSUSE Leap では、仮想化向けに高度なチューニングを施した準仮想化オペレーティングシステムのマシンと、何も修正していない完全仮想化オペレーティングシステムのマシンの両方を作成することができます。
仮想化を有効化するオペレーティングシステムで、最も重要なコンポーネントはハイパーバイザ (もしくは仮想マシンマネージャ) です。これはサーバのハードウエア内で直接動作するソフトウエアで、プラットフォームのリソースを制御したり、 VM ゲスト や VM ゲスト 内で動作するオペレーティングシステムの間で、仮想化されたハードウエアインターフェイスを提示して、リソースを共有したりするための仕組みです。
openSUSE は Linux サーバオペレーティングシステムであり、 2 種類のハイパーバイザ (Xen および KVM) に対応しています。
さらに Xen や KVM を動作させた openSUSE Leap は、仮想化ホストサーバ ( VHS, VHS) としても動作させることができます。これは VM ゲスト 側で、独自のゲストオペレーティングシステムを動作させることができるものです。また、 SUSE の VM ゲスト アーキテクチャには、多数のアプリケーションをホスティングする VM ゲスト を動作させることのできる、 VHS 向けのハイパーバイザと管理コンポーネントが含まれています。
Xen では管理コンポーネントを特権下の VM ゲスト 内で動作させる仕組みであり、これはしばしば Dom0 と呼ばれます。 KVM では Linux カーネルがハイパーバイザとして動作し、管理コンポーネントは VHS 内で直接動作します。
仮想化技術を使用することで、物理的なサーバでのサービス提供と同じ状態を維持したまま、さまざまな利点を得ることができるようになります。
まずはインフラストラクチャのコスト削減があげられます。サーバは主にユーザに対してサービスを提供するために使用するものですが、仮想化されたオペレーティングシステムを使用することで、同じサービス提供を維持したまま下記を実現することができます:
メンテナンスコストの削減: 1 つのホストで複数のオペレーティングシステムを動作させることができますので、ハードウエアのメンテナンスにかかるコストも減らすことができます。
電力コスト/空調コストの削減: ハードウエアを 1 台にまとめることができることから、省電力に繋がるだけでなく、予備電力の用意や空調の用意などを、より少なくすることができるようになります。
占拠空間の削減: サーバの台数を減らすことができれば、データセンター内の占拠空間も削減することができます。
管理コストの削減: VM ゲスト を使用することで、インフラストラクチャの管理にかかる手間も減らすことができます。
運用性と生産性の改善: 仮想化には 移行 移行だけでなく、 ライブマイグレーション や スナップショット 機能も含まれています。これらの機能を使用することで、サーバの停止時間を減らすだけでなく、サービスの停止を伴うことなく一方から他方にサービスを移動させることができるようになります。
仮想マシン内でゲストオペレーティングシステムを動作させる際、完全仮想化 (FV) モードと準仮想化 (PV) モードのいずれかを選択することができます。それぞれの仮想化モードには、それぞれ利点と欠点が存在しています。
完全仮想化モードでは、 Windows* Server など、何も変更していないオペレーティングシステムをそのまま仮想マシンとして動作させることができます。バイナリ変換を行うか、もしくは AMD* Virtualization や Intel* Virtualization Technology などのハードウエア支援型 (ハードウエア支援) 仮想化技術のいずれかを使用します。ハードウエア支援型の仕組みは、対応するプロセッサを使用することで、よりよい性能を提供できる仕組みです。
準仮想化モードで動作させる場合、一般にゲスト側のオペレーティングシステムを仮想化環境に合わせて修正する必要があります。その代わり、完全仮想化でオペレーティングシステムを動作させる場合に比べて準仮想化は、より高速にオペレーティングシステムを動作させることができます。
準仮想化に対応するよう修正されたオペレーティングシステムは、 準仮想化対応済みオペレーティングシステム と呼ばれ、 openSUSE Leap がそれに該当します。
VM ゲスト はホストシステム内の CPU やメモリリソースを共有するだけでなく、 I/O サブシステムを共有することもできます。ソフトウエアによる I/O 仮想化技術はベアメタル (物理的なサーバ) に比べると性能が落ちますが、ハードウエアによる技術を使用すると、ほぼ 「ネイティブ」 に近い性能を発揮できるようになっています。 openSUSE Leap では、下記のような I/O 仮想化技術に対応しています:
完全仮想化 (Fully Virtualized (FV)) ドライバでは、幅広く使用されている実在デバイスを擬似する仕組みであるため、 VM ゲスト 内でも既存のドライバを使用することができます。ゲストは ハードウエア仮想マシン (Hardware Virtual Machine; HVM) と呼ぶこともあります。 VM ホストサーバ 内の物理デバイスは擬似されているデバイスとは異なるため、ハイパーバイザはゲスト側からの全ての I/O 操作を物理デバイスに渡す際、それらを正しく処理しなければならないことを意味します。そのため、全ての I/O 操作はソフトウエア層にまで引き上げて処理を行うことになりますので、 I/O 性能がかなり落ちてしまうだけでなく、 CPU 側にも負荷がかかることになります。
準仮想化 (Paravirtualization (PV)) ではハイパーバイザと VM ゲスト の間で直接的な通信を行います。オーバーヘッドの少ない仕組みであることから、性能は完全仮想化に比べてずっと良好になります。しかしながら、準仮想化ではゲスト側のオペレーティングシステムを修正し、準仮想化 API に対応させるようにするか、準仮想化用のドライバを使用する必要があります。
この種類の仮想化では、 HVM (完全仮想化 をお読みください) でありながら、準仮想化 (PV) ドライバと PV による割り込みやタイマー処理を使用します。
VFIO は Virtual Function I/O の略で、 Linux 向けの新しいユーザレベルドライバのフレームワークです。従来の KVM PCI パススルー デバイス割り当てを置き換えるものです。 VFIO ドライバはユーザスペースに対して、メモリの機密を保持 ( IOMMU ) しながら、保護環境下で直接のデバイスアクセス機能を提供するものです。 VFIO を利用することで、 VM ゲスト は VM ホストサーバ 内のハードウエアデバイスに、性能面のクリティカルパスの擬似による性能劣化を引き起こすことなく、直接アクセスできるようになります。ただし、この方式はデバイスの共有には使用できません。各デバイスは単一の VM ゲスト にのみ割り当てることができます。また、 VFIO は VM ホストサーバ の CPU やチップセット、 BIOS/EFI でそれぞれ対応している必要があります。
従来型の KVM PCI デバイス割り当てと比較して、 VFIO には下記のような利点があります:
リソースへのアクセスは UEFI Secure Boot との互換性があります。
デバイスは孤立した存在になり、メモリアクセスも保護されます。
より柔軟なデバイス所有者モデルを採用した、ユーザスペースのデバイスドライバが提供されています。
KVM 技術とは独立しているほか、 x86 アーキテクチャのみに固有のものでもありません。
openSUSE Leap では、 USB と PCI のパススルーによるデバイスの割り当ては廃止予定とされ、 VFIO モデルで置き換えられています。
最新の I/O 仮想化技術で、 Single Root I/O Virtualization の略です。 SR-IOV では前述の技術の利点を組み合わせて作られています。性能を強化しているだけでなく、複数の VM ゲスト でデバイスを共有する機能を備えています。 SR-IOV では、リソースを複製して複数のデバイスとしてアクセスすることのできる、特殊な I/O デバイスが必要となります。この場合、それぞれの 「擬似」 デバイスは 1 台のゲストからアクセスすることになります。しかしながら、たとえばネットワークカードなどの場合、同時に使用することのできるキュー数は制限されているため、準仮想化に比べると VM ゲスト の性能が落ちる可能性があることになります。 VM ホストサーバ 側としては、 SR-IOV が I/O デバイス側と CPU 、チップセットと BIOS/EFI 、そしてハイパーバイザでそれぞれ対応していなければなりません。詳しい設定手順については、 13.12項 「VM ゲスト に対するホスト側の PCI デバイスの割り当て」 をお読みください。
VFIO や SR-IOV の機能を使用できるようにするには、 VM ホストサーバ 側が下記の要件を満たす必要があります:
BIOS や EFI で IOMMU が有効化されていること。
Intel CPU の場合、カーネルのコマンドライン内のパラメータに intel_iommu=on
を追加する必要があります。詳しくは https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt#L1951 (英語) をお読みください。
VFIO インフラストラクチャを利用できるようにする必要があります。こちらはカーネルモジュールである vfio_pci
を読み込むことで、利用できるようになります。詳しくは 10.6.4項 「カーネルモジュールの読み込み」 をお読みください。