# ハードウェア仮想化 ## 定義 ハードウェア仮想化(hardware virtualization)とは、自前のカーネルを含むOS全体を実行できる仮想マシン(VM)を、ハイパーバイザー(hypervisor、VMM: Virtual Machine Managerとも呼ぶ)が作成・管理する仮想化方式である。従来のタイプ1(プロセッサ上で直接実行されるネーティブ/ベアメタルハイパーバイザー、例: Xen)・タイプ2(ホストOS上で実行、例: KVM)という分類は、ハイパーバイザー技術の進歩によって厳密には適用できなくなっている。『詳解 システム・パフォーマンス 第2版』の著者は、実態に即した構成A(ネーティブハイパーバイザー、特権ドメインが他ドメインを管理。例: Xen)・構成B(ホストOSカーネル内でカーネルレベルモジュール+ユーザーレベルプロセスとして実行。例: KVM)という分類を提案している。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]] §11.2) 技術発展の系譜は、(1) VMwareが1998年に先駆的に開発したバイナリ変換(特権命令を実行時に書き換える)、(2) 2005〜2006年のAMD-V/Intel VT-xによるプロセッサのハードウェア仮想化サポート、(3) ゲストOSがハイパーコールで直接ハイパーバイザーを呼び出す準仮想化(paravirtualization)、(4) SR-IOV等のハードウェアデバイスによる仮想化サポート、という順に進んだ。オーバーヘッドの主な発生源はCPU(ゲスト終了=guest exitの頻度と処理時間)・メモリマッピング(ゲスト物理→ホスト物理の2段階変換。EPT/NPTがハードウェアで高速化)・I/O(歴史的に最大の要因。I/Oプロキシの有無、SR-IOV/PCIパススルーの有無で大きく変わる)の3つに整理される。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]] §11.2, §11.2.2) 代表的な実装として、VMware ESX(エンタープライズ向け、1998年)、Xen(タイプ1、dom0が管理、EC2が初期に採用)、Hyper-V(Windows Server 2008〜)、KVM(タイプ2、QEMUとペア、GCEが採用)、Nitro(AWSが2017年発表、QEMUのようなI/Oプロキシを一切使わずハードウェアサポートに全面依拠しベアメタルに近い性能を提供)がある。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]] §11.2.1) ## 横断的知見 - (このconceptは現時点で『詳解 システム・パフォーマンス 第2版』第11章のみを出典とする。他ソースとの突き合わせによる横断的知見は、他のハイパーバイザー関連ソースがingestされ次第、蓄積する。) ## 未解決の問い - Nitroハイパーバイザーはハードウェアサポートに全面依拠しI/Oプロキシを排除しているが、AmazonがNitro上でホスト側の可観測性(SR-IOV経由でバイパスされるI/Oの計測)をどう実現しているかは公開情報になっていない([Gregg 17e]の時点)。その後(2020年代)に何らかの解決策が公開されているか。 - Xenのネットワークパフォーマンス分離の弱点([Adamczyk 12])は、その後のXenバージョンやクラウドプロバイダの実装でどの程度改善されたか。 - 2006年時点の「KVMはXenの半分のステップ数でI/Oを実行できる」という比較([Qumranet 06])は準仮想化を使わない条件下でのものであり、PVHVM構成のXenとの再比較はどうなるか。 - ハードウェア仮想化の可観測性の3視点(特権的ゲスト/ホスト、ハードウェアサポート型ホスト、ゲスト)のうち、ハードウェアサポート型ホスト(Nitro等)からの可観測性はどのような具体的手法(PMCによる推定等)で補えるか、実例の蓄積がまだ薄い。 ## 関連 - ソース: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]] - 概念: [[コンテナ仮想化]] / [[クラウドコンピューティング]] / [[USE メソッド]] - エンティティ: [[Brendan Gregg]] / [[Amazon Web Services]] / [[Firecracker]] / [[Kubernetes]] ## 出典 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 11 クラウドコンピューティング]](§11.2 ハードウェア仮想化、§11.2.1 実装、§11.2.2 オーバーヘッド、§11.2.3 リソースコントロール、§11.2.4 可観測性)