Bug 1030793
Summary: | snapshot-revert fails if cpu mode=passthrough -- XML error: Non-empty feature list specified without CPU model | ||
---|---|---|---|
Product: | [Community] Virtualization Tools | Reporter: | Georg Meier <meiergeorg74> |
Component: | libvirt | Assignee: | Ján Tomko <jtomko> |
Status: | CLOSED NEXTRELEASE | QA Contact: | |
Severity: | unspecified | Docs Contact: | |
Priority: | unspecified | ||
Version: | unspecified | CC: | eblake, jtomko, kchamart, rbalakri, shyu |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2014-12-11 11:15:01 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
Georg Meier
2013-11-15 07:14:06 UTC
I can confirm that I see the same behavior of what you noticed with versions: $ rpm -q libvirt-daemon-kvm qemu libvirt-daemon-kvm-1.2.5-2.fc21.x86_64 qemu-2.0.0-4.fc21.x86_64 $ virsh snapshot-revert devstack2 snap1 error: XML error: Non-empty feature list specified without CPU model Here's the dump XML of the above guest: ------------------------------------------------------------------ <domain type='kvm' id='15'> <name>devstack2</name> <uuid>f87a9d7a-7964-419c-b77f-dd99cd809930</uuid> <memory unit='KiB'>10485760</memory> <currentMemory unit='KiB'>10485760</currentMemory> <vcpu placement='static'>1</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-2.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <cpu mode='host-passthrough'> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/kashyapc/vmimages/devstack2.qcow2'/> <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <alias name='usb0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <alias name='usb0'/> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <alias name='usb0'/> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <alias name='usb0'/> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/> </controller> <controller type='pci' index='0' model='pci-root'> <alias name='pci.0'/> </controller> <interface type='network'> <mac address='52:54:00:f3:b6:06'/> <source network='default'/> <target dev='vnet3'/> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/8'/> <target port='0'/> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/8'> <source path='/dev/pts/8'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </memballoon> </devices> <seclabel type='dynamic' model='selinux' relabel='yes'> <label>system_u:system_r:svirt_t:s0:c135,c265</label> <imagelabel>system_u:object_r:svirt_image_t:s0:c135,c265</imagelabel> </seclabel> </domain> ------------------------------------------------------------------ Other info ---------- `qemu-img info` indicating an internal snapshot of the guest: $ qemu-img info --backing-chain /home/kashyapc/vmimages/devstack2.qcow2 image: /home/kashyapc/vmimages/devstack2.qcow2 file format: qcow2 virtual size: 80G (85899345920 bytes) disk size: 4.1G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 snap1 821M 2014-06-27 14:06:20 00:38:04.922 Format specific information: compat: 1.1 lazy refcounts: false Haven't yet done more investigation of libvirt -> QEMU interactions. I did another test, by removing CPU passthrough, but added capabilities from cpu-baseline as below: -------- $ virsh capabilities | virsh cpu-baseline /dev/stdin <cpu mode='custom' match='exact'> <model fallback='forbid'>Haswell</model> <vendor>Intel</vendor> <feature policy='require' name='abm'/> <feature policy='require' name='pdpe1gb'/> <feature policy='require' name='rdrand'/> <feature policy='require' name='f16c'/> <feature policy='require' name='osxsave'/> <feature policy='require' name='pdcm'/> <feature policy='require' name='xtpr'/> <feature policy='require' name='tm2'/> <feature policy='require' name='est'/> <feature policy='require' name='smx'/> <feature policy='require' name='vmx'/> <feature policy='require' name='ds_cpl'/> <feature policy='require' name='monitor'/> <feature policy='require' name='dtes64'/> <feature policy='require' name='pbe'/> <feature policy='require' name='tm'/> <feature policy='require' name='ht'/> <feature policy='require' name='ss'/> <feature policy='require' name='acpi'/> <feature policy='require' name='ds'/> <feature policy='require' name='vme'/> </cpu> -------- And, tried to revert: $ virsh snapshot-revert devstack2 snap1 error: XML error: Non-empty feature list specified without CPU model That's the QEMU invocation -------------------------- /usr/bin/qemu-kvm -name devstack2 -S -machine pc-i440fx-2.0,accel=kvm,usb=off -cpu host -m 10240 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid f87a9d7a-7964-419c-b77f-dd99cd809930 -nographic -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/devstack2.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x3.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x3 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x3.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x3.0x2 -drive file=/home/kashyapc/vmimages/devstack2.qcow2,if=none,id=drive-virtio-disk0,format=qcow2 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=23,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:f3:b6:06,bus=pci.0,addr=0x2 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 Hmm, just recently hit this, some debugging information below: Versions: $ rpm -q libvirt-daemon-kvm qemu-system-x86 libvirt-daemon-kvm-1.2.9-3.fc21.x86_64 qemu-system-x86-2.1.2-4.fc21.x86_64 When I attempt to revert to an internal snapshot: $ virsh snapshot-list node1 Name Creation Time State ------------------------------------------------------------ snap1 2014-06-03 14:07:28 -0400 running $ virsh snapshot-revert node1 snap1 error: XML error: Non-empty feature list specified without CPU model Contextual guest XML: $ virsh dumpxml node1 | grep features -A3 <features> <acpi/> <apic/> <pae/> </features> <cpu mode='host-passthrough'> </cpu> <clock offset='utc'> I see it's thrown from here, src/conf/cpu_conf.c, from function: virCPUDefParseXML:371 [. . .] 367 if (n > 0) { 368 if (!def->model && def->mode != VIR_CPU_MODE_HOST_MODEL) { 369 virReportError(VIR_ERR_XML_ERROR, "%s", 370 _("Non-empty feature list specified without " 371 "CPU model")); 372 goto error; 373 } [. . .] Additional info --------------- Comment from Eric Blake on IRC: Sounds like yet another incarnation of us not outputting correct information in our dumpxml output Proposed upstream patch: https://www.redhat.com/archives/libvir-list/2014-October/msg01120.html Fixed upstream by: commit 15abebdecb35308ddd4d2967efa6dffa4842fac9 Author: Ján Tomko <jtomko> CommitDate: 2014-12-11 12:03:36 +0100 Ignore CPU features without a model for host-passthrough This fixes reverting to snapshots created by older libvirt and allows libvirt not to lose track of a domain that has this in its live status XML (such as a domain restored from managedsave) https://bugzilla.redhat.com/show_bug.cgi?id=1030793 https://bugzilla.redhat.com/show_bug.cgi?id=1151885 commit dd324bb2703b9cf619c521b2a04f186cd9734f0a Author: Ján Tomko <jtomko> CommitDate: 2014-12-11 12:03:36 +0100 Do not format CPU features without a model For host-passthrough CPU we don't honor the CPU features specified in the XML, but we allow outputting them via the UPDATE_CPU flag for dumpxml, this gives user a rough idea of what features the CPU might have. After restoring a managedsave'd domain, the features might end up in the live status XML (in /var/run) without the model. This XML cannot be parsed by the daemon after restart and the domain might disappear. This fix skips formatting the features for HOST_PASSTHROUGH when UPDATE_CPU is not specified, so the newly restored domains and newly created snapshots won't be affected. Note: this doesn't fix existing snapshots or already restored running domains. https://bugzilla.redhat.com/show_bug.cgi?id=1030793 https://bugzilla.redhat.com/show_bug.cgi?id=1151885 git describe: v1.2.11-rc2-5-g15abebd |