hypervisor-internals について
hypervisor-internalsは、エージェントや低レイヤー開発者向けにハードウェア仮想化を解説するスキルです。Intel VT-x、AMD SVM、ネストページング、割り込み、KVMインターフェースを扱い、障害調査や学習用ハイパーバイザーの開発に役立ちます。
主な機能
- 01Intel VT-xとAMD SVMの概念
- 02VMCS、VMCB、VMEXITの詳細
- 03EPTとNPTによるアドレス変換
- 04MSR、I/O、割り込みの仮想化
- 05KVM ioctlの利用法と参考資料
活用シーン
- 01VMEXITの多発やEPT違反の調査
- 02KVMやHyper-Vが使うハードウェア機能の理解
- 03ハイパーバイザーのセキュリティ問題の調査
- 04学習用の最小ハイパーバイザーの構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill hypervisor-internalsインストール後、Claude Code で/hypervisor-internalsを入力して読み込まれたか確認します。
詳細
ハイパーバイザーの内部構造
目的
エージェント向けにハードウェア仮想化の内部構造を説明します。Intel VT-x(VMXON、VMCS、VMLAUNCH/VMRESUME、VMEXIT の理由)、AMD SVM(VMCB、#VMEXIT)、拡張/ネストされたページテーブル(EPT/NPT)、APIC 仮想化、MSR ビットマップ、仮想割り込みの注入、および最小限のタイプ 1 ハイパーバイザーを構築するための参考資料を扱います。
使用する場面
- KVM、Hyper-V、VMware がハードウェア機能にどう対応するかを理解するとき
- VMEXIT ストームや EPT 違反のデバッグ
- ハイパーバイザーのセキュリティ研究(CVE のトリアージ)
- 教育用ハイパーバイザー(SimpleVisor、hvpp)の構築
- ネストされた仮想化のパフォーマンス調整
- VM エスケープやサイドチャネル対策の分析
ワークフロー
1. 仮想化の種類
Type 1 (bare metal) Type 2 (hosted)
├── Hyper-V ├── KVM + QEMU
├── Xen ├── VirtualBox
├── VMware ESXi └── Parallels
└── Runs directly on HW Runs on host OS
2. Intel VT-x の概要
VMX operation
├── VMXON — enter VMX root mode
├── VMCS setup — guest/host state fields
├── VMLAUNCH / VMRESUME — enter guest
├── Guest runs until VMEXIT
└── VMXOFF — exit VMX operation
主要な構造体:
- VMCS(仮想マシン制御構造体)— ゲスト/ホストの状態、制御フィールド
- VMEXIT — ハイパーバイザーへの強制終了(I/O、MSR、EPT フォールト、割り込み)
// Simplified VMX enable check (kernel/driver context)
#include <linux/cpufeature.h>
if (boot_cpu_has(X86_FEATURE_VMX))
// VT-x supported
3. VMCS フィールド(概念)
| カテゴリー | 例 |
|---|---|
| ゲストの状態 | GPR、CR0/3/4、セグメントセレクター、RIP、RSP |
| ホストの状態 | ホスト RIP(VMEXIT ハンドラー)、ホスト CR3 |
| 制御 | ピンベース、プロセッサーベース、VMEXIT/エントリー制御 |
| 終了情報 | 終了理由、修飾情報、ゲスト線形アドレス |
よくある VMEXIT の理由:
Exit reason codes (Intel)
├── 10 — CPUID
├── 28 — CR access
├── 30 — I/O instruction
├── 48 — EPT violation
├── 0 — External interrupt
└── 1 — Triple fault
4. AMD SVM(AMD-V)
SVM operation
├── EFER.SVME = 1
├── VMCB setup — guest save area + control area
├── VMRUN — enter guest
├── #VMEXIT — exit to host handler
└── Guest state in VMCB
VMCB 制御領域:インターセプトするベクター(CPUID、MSR、IO)、ネストされたページングの有効化、ASID。
| Intel | AMD |
|---|---|
| VMCS | VMCB |
| VMXON/VMXOFF | EFER.SVME |
| VMLAUNCH/VMRESUME | VMRUN |
| EPT | NPT(ネストされたページテーブル) |
5. EPT / NPT — 第 2 レベルのページング
Guest virtual (GVA) → Guest physical (GPA) [guest page tables]
GPA → Host physical (HPA) [EPT/NPT, managed by hypervisor]
EPT 違反による VMEXIT:ゲストがマップされていない GPA にアクセスしたか、権限に違反しました。
# KVM EPT stats (if available)
# Nested virtualization adds second EPT walk — perf cost
サイドチャネル対策:VMEXIT 時に L1D をフラッシュする(MDS)、キャッシュをパーティション分割する。
6. MSR および I/O ビットマップ
MSR bitmap (4KB)
├── Per-MSR read/write intercept control
└── Avoid VMEXIT on common MSRs for performance
I/O bitmap
├── Intercept specific port I/O
└── Pass-through unlisted ports
ハイパーバイザーは MSR_IA32_FEATURE_CONTROL、MSR_IA32_EFER などをインターセプトします。
7. APIC 仮想化
APIC virtualization
├── Virtual interrupt delivery — reduce VMEXIT on EOI
├── Posted interrupts — hardware-assisted injection
└── TPR shadowing — avoid exit on priority changes
割り込みの多いゲスト(ネットワーク I/O など)のオーバーヘッドを低減します。
8. 仮想割り込みの注入
Intel:VM-entry 割り込み情報フィールドを介して注入します。 AMD:VMCB の V_IRQ、V_INTR_PRIO を使用します。
Device interrupt → host IRQ handler → hypervisor
→ inject virtual IRQ to guest IDT
→ guest ISR runs
9. 最小限のハイパーバイザーの参考資料
| プロジェクト | プラットフォーム | 備考 |
|---|---|---|
| SimpleVisor | Windows | 教育用、数千行程度 |
| hvpp | Windows | C++ ハイパーバイザーライブラリ |
| kvmm | Linux | KVM の最小構成での学習用 |
| barevisor | x86_64 | Rust/ASM の教育用 |
学習手順:
- CPUID の検出と VMX の有効化
- VMCS を割り当て、ホスト/ゲストの状態を設定
- CPUID と HLT の VMEXIT を処理
- アイデンティティーマップを使用する EPT を追加
- 割り込みを注入
10. KVM ioctl インターフェース(実践)
// Userspace KVM (how QEMU talks to KVM)
int kvm = open("/dev/kvm", O_RDWR);
int vm = ioctl(kvm, KVM_CREATE_VM, 0);
int vcpu = ioctl(vm, KVM_CREATE_VCPU, 0);
ioctl(vcpu, KVM_RUN, 0); // runs until VMEXIT
よくある問題
| 症状 | 原因 | 対処方法 |
|---|---|---|
| MSR による VMEXIT ストーム | MSR ビットマップがすべてをインターセプトしている | ビットマップを細かく調整し、安全な MSR はパススルーする |
| EPT の設定ミス | GPA→HPA の不一致 | EPT PTE の権限を確認する |
| ネストされた仮想化が遅い | ページウォークが二重に発生する | ハードウェア支援を利用し、ネストの深さを制限する |
| VMXON が失敗する | CR0/CR4 の固定ビット | Intel SDM に従って必要な CR ビットを設定する |
| ゲストでトリプルフォールトが発生する | IDT の不備、または未処理の例外 | ゲストの割り込み設定を確認する |
| I/O インターセプトのオーバーヘッド | すべてのポートをトラップしている | I/O ビットマップの範囲を縮小する |
関連スキル
skills/virtualization/qemu-kvm— KVM/QEMU の実践的な使い方skills/virtualization/containers-internals— VM 全体を使わない、より軽量な分離skills/kernel/kernel-internals— ホストカーネルのスケジューラー/メモリskills/kernel/os-dev-scratch— ゲスト OS 開発の背景知識skills/security/kernel-security— ハイパーバイザーの CVE 対策skills/platform/riscv-privileged— RISC-V H 拡張による仮想化