custom-allocators
Custom allocator skill for memory allocation strategies. Use when implementing…
Hardware virtualization internals skill for Intel VT-x and AMD-V. Use when studying VMCS/VMCB, EPT/NPT page tables, VMEXIT handling, APIC virtualization, or building minimal hypervisors. Activates on queries about VMX, SVM, VMCS, EPT, NPT, VMEXIT, or type-1 hypervisor.
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill hypervisor-internals --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/hypervisor-internalsContext preview
The summary Claude sees to decide when to auto-load this skill.
Hardware virtualization internals skill for Intel VT-x and AMD-V. Use when studying VMCS/VMCB, EPT/NPT page tables, VMEXIT handling, APIC virtualization, or building minimal hypervisors. Activates on queries about VMX, SVM, VMCS, EPT, NPT, VMEXIT, or type-1 hypervisor.
name: hypervisor-internals description: Hardware virtualization internals skill for Intel VT-x and AMD-V. Use when studying VMCS/VMCB, EPT/NPT page tables, VMEXIT handling, APIC virtualization, or building minimal hypervisors. Activates on queries about VMX, SVM, VMCS, EPT, NPT, VMEXIT, or type-1 hypervisor.
Explain hardware virtualization internals for agents: Intel VT-x (VMXON, VMCS, VMLAUNCH/VMRESUME, VMEXIT reasons), AMD SVM (VMCB, #VMEXIT), Extended/Nested Page Tables (EPT/NPT), APIC virtualization, MSR bitmaps, virtual interrupt injection, and references for building minimal type-1 hypervisors.
Type 1 (bare metal) Type 2 (hosted) ├── Hyper-V ├── KVM + QEMU ├── Xen ├── VirtualBox ├── VMware ESXi └── Parallels └── Runs directly on HW Runs on host OS
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
Key structures:
// Simplified VMX enable check (kernel/driver context)
#include <linux/cpufeature.h>
if (boot_cpu_has(X86_FEATURE_VMX))
// VT-x supported| Category | Examples | |----------|----------| | Guest state | GPRs, CR0/3/4, segment selectors, RIP, RSP | | Host state | Host RIP (VMEXIT handler), host CR3 | | Control | Pin-based, proc-based, VMEXIT/entry controls | | Exit info | Exit reason, qualification, guest-linear-address |
VMEXIT reasons (common):
Exit reason codes (Intel) ├── 10 — CPUID ├── 28 — CR access ├── 30 — I/O instruction ├── 48 — EPT violation ├── 0 — External interrupt └── 1 — Triple fault
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 control area: intercept vectors (CPUID, MSR, IO), nested paging enable, ASID.
| Intel | AMD | |-------|-----| | VMCS | VMCB | | VMXON/VMXOFF | EFER.SVME | | VMLAUNCH/VMRESUME | VMRUN | | EPT | NPT (Nested Page Tables) |
Guest virtual (GVA) → Guest physical (GPA) [guest page tables] GPA → Host physical (HPA) [EPT/NPT, managed by hypervisor]
EPT violation VMEXIT: guest accessed unmapped GPA or violated permissions.
# KVM EPT stats (if available) # Nested virtualization adds second EPT walk — perf cost
Mitigations for side channels: flush L1D on VMEXIT (MDS), cache partitioning.
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
Hypervisors intercept `MSR_IA32_FEATURE_CONTROL`, `MSR_IA32_EFER`, etc.
APIC virtualization ├── Virtual interrupt delivery — reduce VMEXIT on EOI ├── Posted interrupts — hardware-assisted injection └── TPR shadowing — avoid exit on priority changes
Reduces overhead for interrupt-heavy guests (network I/O).
Intel: inject via VM-entry interruption-information field. AMD: V_IRQ, V_INTR_PRIO in VMCB.
Device interrupt → host IRQ handler → hypervisor
→ inject virtual IRQ to guest IDT
→ guest ISR runs| Project | Platform | Notes | |---------|----------|-------| | SimpleVisor | Windows | Educational, few thousand lines | | hvpp | Windows | C++ hypervisor library | | kvmm | Linux | Minimal KVM study | | barevisor | x86_64 | Rust/ASM educational |
Study path: 1. CPUID detection and VMX enable 2. Allocate VMCS, set host/guest state 3. Handle VMEXIT for CPUID and HLT 4. Add EPT with identity map 5. Inject interrupts
// 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| Symptom | Cause | Fix | |---------|-------|-----| | VMEXIT storm on MSR | MSR bitmap intercepts all | Fine-tune bitmap; pass-through safe MSRs | | EPT misconfiguration | Mismatched GPA→HPA | Verify EPT PTE permissions | | Nested virt slow | Double page walk | Hardware assist; limit nesting depth | | VMXON fails | CR0/CR4 fixed bits | Set required CR bits per Intel SDM | | Guest triple fault | Bad IDT or unhandled exception | Check guest interrupt setup | | I/O intercept overhead | All ports trapped | Shrink I/O bitmap |
A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.
Repo: mohitmishra786/low-level-dev-skills
Custom allocator skill for memory allocation strategies. Use when implementing…
NUMA programming skill for multi-socket memory locality. Use when detecting NUMA topology,…
AF_XDP skill for high-performance XDP sockets. Use when creating AF_XDP sockets, configuring…
DPDK skill for userspace packet I/O. Use when initializing EAL, configuring PMD drivers,…
io_uring skill for Linux async I/O. Use when building high-performance servers with liburing,…
Bare-metal ADC and DAC skill. Use when configuring analog sampling, DMA-driven ADC,…