When diagnosing QuantaVirt issues, follow this general approach: check system logs first, run the built-in self-test, verify hardware requirements are met, then narrow down to the specific subsystem. Most issues fall into one of the categories below.
Quick Health Check: Run quantavirt system self-test to validate all subsystems in one pass. The self-test checks CPU virtualization, IOMMU, memory, storage paths, PQC crypto, QUAC 100 connectivity, and API responsiveness.
"Failed to create VMCS" / "VMCB allocation failed"
Cause: Insufficient contiguous physical memory for the 4 KB VMCS/VMCB structure, or VMX/SVM context limit reached.
# Check available memory
quantavirt system show | grep -i memory
# Check running VM count vs limits
quantavirt vm list --all | wc -l
# Free memory by stopping unused VMs
quantavirt vm stop <unused-vm>
"EPT/NPT setup failed"
Cause: Unable to allocate 4-level page tables for VM memory mapping. Typically caused by memory fragmentation or insufficient hugepages.
# Check hugepage availability
cat /proc/meminfo | grep -i huge
# Allocate more hugepages (2 MB pages)
echo 4096 > /proc/sys/vm/nr_hugepages
# Or use kernel parameter for boot-time allocation# quantavirt.hugepages=4096
VM stuck in STOPPING state
Cause: Guest not responding to ACPI power button event. Guest agent may be hung or ACPI not installed in guest.
# Force stop (equivalent to power cut)
quantavirt vm stop <vm-name> --force
# If still stuck, destroy and recreate
quantavirt vm destroy <vm-name>
# Prevent in future: install ACPI support in guest# Ubuntu/Debian: apt install acpid# RHEL/Fedora: dnf install acpid
Cause: Guest using CPU instructions not exposed through CPUID masking. Common when migrating VMs between hosts with different CPU generations.
# Check CPU features exposed to guest
quantavirt vm show <vm-name> --cpu-features
# Use compatible CPU model instead of host passthrough
"cpu": { "model": "Skylake-Server", "count": 4 }
# Or explicitly disable problematic features
"cpu": { "model": "host", "features": ["-avx512f", "-avx512bw"] }
Poor vCPU performance / high steal time
Cause
Diagnostic
Fix
vCPU overcommit
quantavirt stats --host — check CPU utilization >80%
Reduce total vCPU count across VMs or add physical cores
No CPU pinning
Guest vCPUs floating across physical cores
quantavirt vm set <vm> --cpu-pin 0:4,1:5,2:6,3:7
Cross-NUMA scheduling
numactl --hardware — vCPUs scheduled on remote NUMA node
quantavirt vm set <vm> --numa-node 0
Wrong scheduler
quantavirt system show | grep sched
Use Credit2 (default) for mixed workloads; RT for latency-critical
Nested virtualization not working
# Verify nested virt is enabled (must be set at hypervisor boot)
quantavirt system show | grep nested
# nested_virtualization: enabled (beta)# If disabled, add kernel parameter:# quantavirt.nested=on# Expose VMX/SVM to guest
"cpu": { "model": "host", "features": ["+vmx"] }
Note: Nested virtualization is beta in QuantaVirt 0.1.0. Performance overhead is approximately 15–30% for L2 guests. AMD SVM nesting is generally more mature than Intel VMX nesting.
# Check host memory
quantavirt system show | grep -A5 memory
# Check per-VM memory allocation
quantavirt vm list --format wide
# NAME STATE vCPUs RAM DISK# database running 16 64G 500G# webserver running 4 8G 50G# new-vm created 2 32G ↠won't fit if only 20G free# Enable memory balloon to reclaim unused guest memory
"memory": { "size": "8G", "balloon": true }
# Reduce balloon in running VM (give memory back to host)
quantavirt vm set <vm-name> --memory-balloon 4G
Hugepage allocation failures
# Check hugepage stats
cat /proc/meminfo | grep Huge
# HugePages_Total: 2048# HugePages_Free: 128# HugePages_Rsvd: 0# Hugepagesize: 2048 kB# If Free is too low, allocate more (must be done early after boot)
echo 4096 > /proc/sys/vm/nr_hugepages
# For 1 GB pages (best for large VMs), use kernel param:# quantavirt.hugepages=64 quantavirt.hugepagesz=1G# Fall back to non-hugepage if needed
"memory": { "size": "16G", "hugepages": false }
Cause: Another VM or process holds an exclusive lock on the disk image. QuantaVirt prevents concurrent write access to the same image to avoid corruption.
# Check which VM holds the lock
quantavirt storage show <disk-name>
# locked_by: database (pid 4521)# Force-release a stale lock (use with extreme caution!)
quantavirt storage unlock <disk-name> --force
# Step 1: Verify network exists and is active
quantavirt network show default
# Step 2: Check VM NIC configuration
quantavirt vm show <vm-name> | grep -A10 network
# Step 3: Check DHCP lease was assigned
quantavirt network dhcp-list default
# Step 4: Verify bridge interface is up on host
ip link show qvbr0
# Step 5: Check firewall rules aren't blocking
quantavirt network rule list default
Symptom
Likely Cause
Fix
No IP from DHCP
DHCP service not running or range exhausted
quantavirt network restart default or expand DHCP range
Can ping gateway but not internet
NAT masquerade not configured
Check host IP forwarding: sysctl net.ipv4.ip_forward
Can't reach other VMs
VMs on different networks
Attach both VMs to the same virtual network
Bridged VM has no IP
Physical switch blocking unknown MACs
Enable promiscuous mode on bridge interface or configure MAC allow-list on switch
# Check PCIe bus
lspci | grep 1DB7
# Should show: XX:XX.0 Encryption controller: Dyber Inc. QUAC 100 (rev 01)# If not found:# 1. Verify card is seated in PCIe x8/x16 slot# 2. Check PCIe power connector (if applicable)# 3. Try different PCIe slot# 4. Update motherboard BIOS# Check driver loaded
quantavirt system show | grep -i quac
# quac100: online, firmware 1.0.0, BAR0 0xfb000000# If driver not loaded:
quantavirt quac100 probe
QUAC 100 firmware update failures
# Check current firmware version
quantavirt quac100 info
# Vendor: Dyber, Inc. (0x1DB7)# Device: QUAC 100 (0x0100)# Firmware: 1.0.0# Serial: QV-100-XXXXXX# Firmware update (requires no running VMs using PQC)
quantavirt quac100 firmware-update /path/to/quac100-fw-1.1.0.bin
# If update fails mid-flight, the QUAC 100 has dual-bank firmware:# it will revert to the previous working firmware on next reboot.# Power cycle the host if the device becomes unresponsive.
PQC crypto self-test failures
Test Failure
Cause
Fix
ML-KEM keygen failed
QUAC 100 hardware error or firmware bug
Fall back to software: "pqc": { "backend": "software" } and report to Dyber support
# Check which backend is active
quantavirt pqc status
# Backend: software (QUAC 100 not available)# ML-KEM-768: 2.1 ms/op (software)# ML-DSA-65: 4.3 ms/op (software)# Diagnose why QUAC 100 is unavailable
quantavirt quac100 info
# If "device not found" → see QUAC 100 not detected above# If "firmware error" → update firmware# If "busy" → another process has exclusive access# Force hardware backend (will error if device unavailable)
"pqc": { "backend": "quac100" }
# Check API is listening
quantavirt system show | grep -i api
# api.rest: 127.0.0.1:8400 (active)# api.grpc: 127.0.0.1:8401 (active)# If remote GUI, ensure API binds to accessible address:# /etc/quantavirt/quantavirt.conf# api.listen = 0.0.0.0:8400# Test connectivity from GUI machine
curl -s http://<hypervisor-ip>:8400/api/v1/system | jq .
# Firewall may block — allow port 8400/8401 on host
# CLI communicates with hypervisor via Unix socket or REST API# Check if hypervisor is running
systemctl status quantavirt-hypervisor
# Check socket exists
ls -la /var/run/quantavirt/quantavirt.sock
# Try explicit API endpoint
quantavirt --api http://127.0.0.1:8400 system show
# If managing remote host
export QUANTAVIRT_API=http://192.168.1.100:8400
quantavirt system show
API authentication errors
# Generate new API token
quantavirt auth token-create --name admin-token --role admin
# Token: qvt_a1b2c3d4e5f6...# Use token with CLI
export QUANTAVIRT_TOKEN=qvt_a1b2c3d4e5f6...
quantavirt vm list
# Use token with REST API
curl -H "Authorization: Bearer qvt_a1b2c3d4e5f6..." \
http://127.0.0.1:8400/api/v1/vms
Cause: Source and destination hosts cannot establish a PQC-encrypted channel for VM transfer. Both hosts must have compatible PQC backends.
# Verify PQC on both hosts
quantavirt pqc status # source
ssh dest-host quantavirt pqc status # destination# Both must support the same KEM algorithm# If one has QUAC 100 and other doesn't, both will use software fallback# Force software backend for compatibility
quantavirt vm migrate <vm> --dest <host> --pqc-backend software
"CPU incompatible" migration error
# Check CPU feature delta
quantavirt migrate check <vm> --dest <host>
# [FAIL] Destination missing features: avx512f, avx512bw# [PASS] Memory: 64 GB available on destination# [PASS] Storage: shared NFS mount verified# Fix: use a compatible CPU model instead of host passthrough
quantavirt vm set <vm> --cpu-model Skylake-Server
# Then retry migration
Migration stalls / never completes
Cause
Diagnostic
Fix
VM dirtying pages faster than transfer
quantavirt migrate status — dirty rate > transfer rate
Increase bandwidth: --bandwidth 10G; or use auto-converge to throttle guest CPU
Network bottleneck
Transfer speed well below link capacity
Use dedicated migration network; check for TCP offload issues