mcpField
H
hypervisor-internals

hypervisor-internals

github.com/mohitmishra786開発269291 回インストール18 週間前に更新
リポジトリ

hypervisor-internals について

hypervisor-internalsは、エージェントや低レイヤー開発者向けにハードウェア仮想化を解説するスキルです。Intel VT-x、AMD SVM、ネストページング、割り込み、KVMインターフェースを扱い、障害調査や学習用ハイパーバイザーの開発に役立ちます。

主な機能

  1. 01Intel VT-xとAMD SVMの概念
  2. 02VMCS、VMCB、VMEXITの詳細
  3. 03EPTとNPTによるアドレス変換
  4. 04MSR、I/O、割り込みの仮想化
  5. 05KVM ioctlの利用法と参考資料

活用シーン

  1. 01VMEXITの多発やEPT違反の調査
  2. 02KVMやHyper-Vが使うハードウェア機能の理解
  3. 03ハイパーバイザーのセキュリティ問題の調査
  4. 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。

IntelAMD
VMCSVMCB
VMXON/VMXOFFEFER.SVME
VMLAUNCH/VMRESUMEVMRUN
EPTNPT(ネストされたページテーブル)
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. 最小限のハイパーバイザーの参考資料
プロジェクトプラットフォーム備考
SimpleVisorWindows教育用、数千行程度
hvppWindowsC++ ハイパーバイザーライブラリ
kvmmLinuxKVM の最小構成での学習用
barevisorx86_64Rust/ASM の教育用

学習手順:

  1. CPUID の検出と VMX の有効化
  2. VMCS を割り当て、ホスト/ゲストの状態を設定
  3. CPUID と HLT の VMEXIT を処理
  4. アイデンティティーマップを使用する EPT を追加
  5. 割り込みを注入
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 拡張による仮想化

コメント