KVM (Kernel-based Virtual Machine) turns your Linux VPS into a Type-1 hypervisor, letting you run nested virtual machines with near-native performance. Whether you need to test different operating systems, isolate development environments, or run Docker containers that depend on hardware acceleration, enabling KVM is a foundational skill. If you are evaluating providers that support nested virtualization, compare VPS performance across the top hosting companies to find one that meets your needs. This guide walks through checking CPU support, loading the necessary kernel modules, verifying that KVM acceleration is active, and troubleshooting the most common errors.
Prerequisites
Before you begin, confirm you have root or sudo access to a Linux VPS running a modern kernel (5.x or newer). Most VPS providers use KVM as their underlying hypervisor, so nested KVM is typically available unless the provider explicitly disables it in their virtualization layer. Ubuntu 24.04 LTS, Debian 12, and Rocky Linux 9 are all well-supported options.
Step 1: Check CPU Virtualization Extensions
The first thing to verify is whether your CPU supports hardware virtualization. Run this command:
grep -E --color=auto '(vmx|svm)' /proc/cpuinfo
If you see vmx (Intel) or svm (AMD) in the flags section, your CPU supports virtualization. If nothing appears, either your CPU lacks hardware virtualization support — which is rare on modern VPS hardware — or the feature is disabled at the hypervisor level. In that case, contact your VPS provider and ask whether they support nested virtualization or custom kernel modules. Some providers like Hetzner, Vultr, and Linode allow nested KVM on specific plans.
You can also check with this one-liner:
kvm-ok
If kvm-ok is not installed, get it with sudo apt install cpu-checker (Debian/Ubuntu) or sudo dnf install cpu-checker (RHEL/Rocky). It will tell you in plain English whether KVM acceleration can be used.
Step 2: Load KVM Kernel Modules
Once you confirm virtualization support, load the KVM kernel modules:
sudo modprobe kvm
sudo modprobe kvm_intel # for Intel CPUs
sudo modprobe kvm_amd # for AMD CPUs
Load the one that matches your CPU architecture. Verify the modules are loaded:
lsmod | grep kvm
You should see output showing kvm and either kvm_intel or kvm_amd along with their usage counts. If the module fails to load with a “Operation not permitted” error, your VPS provider has disabled nested virtualization at the host level and you will need to use QEMU without KVM acceleration (slower but functional).
Step 3: Make KVM Modules Persistent Across Reboots
Add the KVM modules to your system’s module configuration so they load automatically on boot:
echo 'kvm' | sudo tee /etc/modules-load.d/kvm.conf
echo 'kvm_intel' | sudo tee -a /etc/modules-load.d/kvm.conf
# or for AMD:
# echo 'kvm_amd' | sudo tee -a /etc/modules-load.d/kvm.conf
Step 4: Install KVM and Management Tools
Install the full KVM stack along with management tools:
On Ubuntu/Debian:
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager -y
sudo usermod -aG libvirt $USER
On Rocky Linux/RHEL 9:
sudo dnf install qemu-kvm libvirt libvirt-daemon-kvm virt-install -y
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
Log out and back in for the group changes to take effect.
Step 5: Verify KVM Acceleration Is Working
After installation, confirm that KVM acceleration is active:
virt-host-validate
This command checks all aspects of virtualization readiness and reports PASS, WARN, or FAIL for each check. You want to see PASS for “QEMU: Checking for hardware virtualization” and “QEMU: Checking if device /dev/kvm exists.” You can also check for /dev/kvm directly:
ls -la /dev/kvm
If /dev/kvm exists with permissions crw-rw----, acceleration is active and your user has access to it.
Step 6: Create Your First KVM Guest
With KVM acceleration verified, create a test virtual machine using virt-install. This command launches a 2 GB RAM, 2 vCPU Debian 12 VM using KVM acceleration:
sudo virt-install \
--name debian-test \
--ram 2048 \
--vcpus 2 \
--disk size=10 \
--cdrom /path/to/debian-12.iso \
--os-variant debian12 \
--network default \
--graphics vnc \
--console pty,target_type=serial
If the guest boots successfully and runs without significant slowdown, KVM acceleration is working correctly. You can manage your guests with virsh list --all or through the Cockpit web interface if you prefer a GUI.
Troubleshooting Common Issues
- “KVM: disabled by BIOS”: Some VPS providers disable nested virtualization in the BIOS of the host machine. Check your provider’s documentation or open a support ticket asking if nested KVM is available on your plan.
- “/dev/kvm: Permission denied”: Your user is not in the libvirt group. Run
sudo usermod -aG libvirt $USERand re-login. - “Could not access KVM kernel module: No such file or directory”: The kvm module failed to load. Check
dmesg | grep kvmfor specific error messages. - Poor nested VM performance: Even with KVM acceleration, nested virtualization adds overhead. Allocate at least 2 vCPUs and 2 GB RAM to each guest for reasonable performance.
When to Use KVM vs Containers on Your VPS
KVM gives you full kernel isolation — each VM runs its own operating system kernel independently. This is ideal for testing different Linux distributions, running legacy software that requires specific kernel versions, or providing multi-tenant hosting where tenants need root access. For most web applications and microservices, Docker containers are more resource-efficient and faster to deploy. If you need both, run Docker on a KVM guest for maximum flexibility.
Enabling KVM on your VPS opens up server-grade virtualization capabilities on a budget. Before choosing a provider for this workload, check our provider benchmarks to ensure the plan delivers the CPU and memory performance your nested VMs require.




Leave a Reply
You must be logged in to post a comment.