Fast Virtio VM

This page KVM using Virtio and mdev.]]

Use a fast computer
No really, this is probably the most important thing of all, don't expect a 2 second booting VM if you are on a P3 with a slow IDE disk. This tutorial is Build on a CentOS 6.2 KVM HypverVisor on a Dual QuadCore Xeon 2.4Ghz with 8 (v)CPU's and 2GB RAM assigned to the VM. The disk file is on an SSD (old Intel x25-M 80GB, so there is more to gain if you use a faster SSD).

Use ext2
It has the fastest mount time.

Kernel
Compile the kernel with:


 * VirtIO support
 * Hugetlb support


 * NO usb support (Unless planning to passthrough USB from the host).
 * NO HID support (see above).
 * NO extended video/device drivers/filesystem drivers that will not be used. (duh)
 * NO fuse support (Slow...)
 * NO modules (Slower...)

Kernel boot options

 * noapic (APIC is for hardware management, and since we are in VM and the hardware is managed by our host, we don't need it).
 * notsc (TSC is CPU clock synchronization, not needed in a VM).

Because they cannot be removed from the kernel itself, no need these as kernel boot options.

Use a static IP
DHCP is slow.

Use mdev
Replace udev with mdev (BusyBox), udev is dead slow vs mdev.

Configure mdev
Remove useless mdev devices (tun,tap, all sound, hd*, sd*, fd*, md*, grsec(*), zap, dvb, v4l stuff)

Prelink
Prelink all binaries:

OpenRC
Use rc-update to delete all non-essential daemons (git, consolefont, devfs, keymaps, modules, sysfs, swclock, staticroute)

tmpfs
Use tmpfs for and  (will not necessarily speedup boot, but for startup services that  heavily, it might help).

Results
I created my own boo ttime init script, which echoes the current kernel uptime.

Please keep in mind that all of this is without *any* dirty tricks like initrd or initramfs. It's just static sequential boot. Even using parallel start of services (thru ) would slow down the system.