翻訳 Xenブログのオリジナル 。
翻訳者から:現在、Xenハイパーバイザーの安定バージョンは2つの仮想化モードをサポートしています。 準仮想モード(PV)では、機器はエミュレートされず、そのような環境で動作するためにゲストOSを特別に変更する必要があります。 バージョン3.0以降、Linuxカーネルは、サードパーティのパッチで再コンパイルせずに準仮想モードでの起動をサポートしています。 PVモードの利点は、CPUからのハードウェア支援による仮想化を必要とせず、PCIバス上のハードウェアをエミュレートするためのリソース(非常に重要な場合もある)を使用しないことです。
ハードウェア仮想化(HVM)モードは、ハイパーバイザーのバージョン3.0以降、Xenで導入されており、ハードウェアサポートが必要です。 このモードでは、QEMUを使用して仮想デバイスをエミュレートします。これは準仮想ドライバーでも非常に低速です。 ただし、時間の経過とともに、機器でのハードウェア仮想化のサポートが非常に広くなり、ラップトップCPUでも使用されるようになりました。 そのため、開発者は、機器の機能を使用して、ハイパーバイザーとゲストOS間および準仮想モードで実行コンテキストの高速切り替えを使用することを望んでいました。 そのため、新しいモードが登場しました-バージョン4.4以降、Xenで利用できるハードウェア準仮想化。
Linux 3.14カーネルは、Mukesh Rathorが開発した新しいモードをサポートします
オラクル社から。 ハードウェア準仮想化(PVH)モードにより、ゲストOSはプラットフォームのハードウェア機能を使用できますが、QEMUを使用したハードウェアエミュレーションは不要です。 これは準仮想体制の進化における印象的なステップです。
PVHモードの実装の歴史と微妙な点については、準仮想化スペクトル、パート2:極からスペクトルまでで詳しく説明しています 。
つまり、XenのゲストOSはハードウェア仮想化(HVM)または準仮想化(PV)モードで動作できるようになりました。 PVモードでは、ゲストOSカーネルにより、ハイパーバイザーはメモリページテーブル、セグメントなどをプログラムできます。 プロセッサがEPT / NPT拡張をサポートしている場合、HVMモードでメモリを管理するコスト(ゲストOSがメモリを制御するとき)は、PVモードのハイパーバイザーがそれを行うときよりもはるかに低くなります。 そのため、新しいモードでは、ハイパーバイザーはゲストOS内のメモリとシステムコールを管理しません。これらはすべて、仮想マシンのコンテナー内で発生します。
この「ハイブリッド」準仮想化モードは「ハードウェア準仮想化」(PVH)と呼ばれます。
このアプローチの利点は、コードの量の削減、システムコールを行う際のパフォーマンスの向上(ゲストOSとハイパーバイザー間のコンテキスト切り替えがない)、さまざまな操作を実行する際の遅延が少ない、つまりゲストOSの応答が速いことです。
PVHモードを実装するコードは、バージョン4.4からXenで使用可能になります(このバージョンの3番目のリリース候補はすでにリリースされています)。 新しいモードを準仮想化モードと比較しますが、ゲストOSがHVMモードで(ただしPCIデバイスなしで)起動し、はるかに高速に動作することを除いて、実質的に違いはありません。 私たちはまだ新しいモードでABIの複雑さに取り組んでいるので、ABIはまだ不安定です。
つまり、Xenの次のバージョンでは、Linux ABIの現在のバージョンでも動作しない可能性があります(または動作する可能性があります)。 新しい体制は非常に実験的で不安定です。 私たちはそれを実用化のレベルに引き上げるつもりであり、どうしてもこの目標に向けて努力します。
ユーザーが新しいモードを使おうとすると、開発段階で想像できなかったエラーや問題を追跡できます。
ハードウェア準仮想化の使用方法
- Xenの最新バージョンをダウンロードしてビルドします。 詳細はwiki.xen.org/wiki/Compiling_Xen_From_Sourceおよびwiki.xen.org/wiki/Xen_4.4_RC3_test_instructionsで見つけることができます
- Linuxカーネルの最新バージョンをダウンロードします。 wiki.xenproject.org/wiki/Mainline_Linux_Kernel_Configs#Configuring_the_Kernelの詳細
cd $ HOME
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux - CONFIG_XEN_PVH = yオプションでカーネルを構築します
- ディストリビューションのカーネル設定に基づいた構成
cp / boot / config-`uname -r `$ HOME / linux / .config
menuconfigを作成します
次に、プロセッサのタイプと機能-> Linuxゲストサポート-> PVHゲストとして実行するためのサポート(新規)をメニューから選択します - .configファイルを編集する場合は、次を指定する必要があります。
CONFIG_HYPERVISOR_GUEST = y
CONFIG_PARAVIRT = y
CONFIG_PARAVIRT_GUEST = y
CONFIG_PARAVIRT_SPINLOCKS = y
CONFIG_XEN = y
CONFIG_XEN_PVH = y
また、ブロックおよびネットワークデバイス、コンソールなどを含める必要があります。
- ディストリビューションのカーネル設定に基づいた構成
- カーネルをコンパイルしてインストールする
modules_installを作成&&インストール
また、ブートイメージ(initrd)を作成し、それとカーネルを/ bootディレクトリにコピーして、ブートローダーを構成する必要があります。 - pvh = 1パラメーターでゲストOSを起動します。例:
extra = "console = hvc0 debug kgdboc = hvc0 nokgdbroundup initcall_debug debug"
kernel = "/ boot / vmlinuz-3.13 +"
ramdisk = "/ boot / initramfs-3.13 + .cpio.gz"
メモリ= 1024
vcpus = 4
name = "pvh"
vif = ['mac = 00:0F:4B:00:00:68']
vfb = ['vnc = 1、vnclisten = 0.0.0.0、vncunused = 1']
disk = ['phy:/ dev / sdb1、xvda、w']
pvh = 1
on_reboot = "preserve"
on_crash = "preserve"
on_poweroff = "保持 - xlユーティリティを使用します。xmユーティリティは新しいモードをサポートしていません。
ゲストOSは準仮想として起動しますが、xen-detectユーティリティは、ハードウェア仮想化モードで実行されていることを示します。
次の機能はテストされていません。
- 仮想マシンの移行
- ゲストモードの32ビットOS(PVHモードでも試さないでください)
- PCIデバイスの転送
- ハイパーバイザーモード(dom0)で動作します-このためのパッチは、メインのXenコードブランチにはまだ受け入れられていません。 試してみたい場合は、Mukesh Razorのブランチを使用できます。
cd $ HOME / xen
git pull git://oss.oracle.com/git/mrathor/xen.git dom0pvh-v7
この場合、ブート時に、パラメーターdom0pvh = 1をXenに渡します。 このモードのゲストOSはまだサポートされていません。
次の機能は機能しません。
- プロセッサ識別コマンド(CPUID)の出力のフィルタリング。 これで、コマンドの結果は変更されずにゲストに渡されます。
- AMDハードウェア仮想化
- 32ビットゲストOSを起動する
エラーが見つかった場合は、次の情報を電子メールxen-devel@lists.xenproject.orgで送信してください。
- xl dmesg
- xlリスト
- xenctx -s $ HOME / linux / System.map -f -a -C [ドメインID]
- ゲストOSコンソール出力
- あなたが重要だと思う他のすべて
カーネルイメージ(vmlinuz)を保存してください。 将来的には必要になるかもしれませんが、メールで送信するには大きすぎます。