xl list enumerate running domainsxl create cfg start a domU from configxl console N attach to guest consolexl info host + hypervisor factsxl top live per-domain CPU/memxl migrate D host live migrate a guestxenstore-ls dump the config/status treeWho I Am: The Hypervisor and Its Domains
I am a thin Type-1 layer booted before any OS, owning the physical CPU, the MMU, and the scheduler; everything else runs in a domain.
dom0domUdriver domainstub domainExecution Modes
| Mode | CPU/MMU | I/O | Notes |
|---|---|---|---|
PV | Paravirtualized, hypercalls, no VT-x needed | PV split drivers only | Legacy; no nested page tables, vulnerable to some speculative attacks. |
HVM | Full hardware virt (VT-x/AMD-V) + EPT/NPT | Emulated (QEMU) + optional PV | Runs unmodified OSes; uses stub/qemu for device emulation. |
PVH | HW virt for CPU/MMU, no emulated platform | PV drivers, virtual interrupts | Modern default — lean boot, smaller attack surface, no QEMU. |
CPU Scheduling
credit2nullxl sched-credit2 -d D -w 512xl vcpu-pin D vcpu pcpuxl cpupool-*xl vcpu-set D nMemory: Translation & Ballooning
Address layers
Guests see pseudo-physical frames; I map those to machine frames. HVM/PVH use hardware EPT/NPT for guest-physical→machine translation; classic PV used direct page-table validation via hypercalls.
Reclaim & share
The balloon driver inflates inside a guest to return frames to me; populate-on-demand backs HVM startup. Page sharing and paging let me oversubscribe carefully.
xl mem-set D 2048xl mem-max D 4096maxmem sensibly and never overcommit dom0.I/O: Split Drivers, Grants & Event Channels
Virtual I/O is a frontend/backend pair: the guest's frontend talks to a backend in dom0 or a driver domain over shared memory and signals.
grant referencesevent channelsvif / xen-netfrontvbd / xen-blkfrontRings carry requests/responses; grants move the bulk data; event channels wake the other side. Together they form the data path, not the whole architecture.
XenStore: The Control Plane
A small hierarchical, transactional key-value database that domains use for configuration discovery, device negotiation, and status — not a data path.
xenstore-ls -fxenstore-read /local/domain/N/namexenstore-write path valuexenstore-watch pathPCI Passthrough & IOMMU Isolation
xl pci-assignable-add 0000:03:00.0