Hi Peter,
Sorry for the incomplete description of the issue, we are working on a virtualization use
case and trying to automate the VM creation and management using libvirt-python.
Since Libvirt is basically XML oriented, we wanted to convert the existing tested QEMU
commands into Libvirt XML for VM management.
Below is the QEMU command - its SRIOV based GPU pass-thru in our system with KVM
hypervisor
qemu-system-x86_64 \
-m 4096 \
-enable-kvm \
-cpu host \
-smp cores=6 \
-drive file=/usr/share/qemu/OVMF.fd,format=raw,if=pflash \
-drive id=ubuntu_drive,if=virtio,file=/home/ubuntu/ubuntu_1.qcow2,format=qcow2,cache=none
\
-usb \
-device usb-tablet \
-device virtio-vga,max_outputs=1,blob=true \
-display gtk,gl=on \
-object memory-backend-memfd,id=mem1,size=4096M \
-machine memory-backend=mem1 \
-device vfio-pci,host=0000:00:02.2
Libvirt XML (Memory backing added)
<domain type='kvm'
xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'
<name>ubuntu-vm-test</name
<memory unit="KiB">4194304</memory
<currentMemory
unit="KiB">4194304</currentMemory
<memoryBacking
<source
type='memfd'/
</memoryBacking
<vcpu>6</vcpu
<os
<loader>/usr/share/qemu/OVMF.fd</loader
<type arch="x86_64"
machine="pc">hvm</type
<boot dev="hd" /
<boot dev="cdrom"
/
</os
<features
<acpi /
<apic /
</features
<cpu
mode='host-passthrough'
</cpu
<clock offset="utc"
</clock
<on_poweroff>destroy</on_poweroff
<on_reboot>restart</on_reboot
<on_crash>destroy</on_crash
<devices
<emulator>/usr/bin/qemu-system-x86_64</emulator
<disk type="file" device="disk"
<driver name="qemu" type="qcow2" /
<source file="=/home/ubuntu/ubuntu_1.qcow2" /
<target dev="vda" bus="virtio" /
</disk
<serial
type="pty"
<target port="0"
/
<target type="serial" port="0"
</target
<alias name="serial0" /
</serial
<console
type="pty"
<target
type="serial" port="0" /
<alias name="serial0" /
</console
<hostdev
mode="subsystem" type="pci" managed="yes"
<driver name='vfio'/
<source
<address domain="0x0000" bus="0x00" slot="0x02"
function="0x03" /
</source
</hostdev
<video
<model type='virtio'
virgl='off'/
<driver
name='qemu'/
</video
</devices
<qemu:commandline
<qemu:arg
value='-set'/
<qemu:arg
value='device.video0.blob=false'/
</qemu:commandline
<qemu:commandline
<qemu:arg value='-display'/
<qemu:arg value='gtk,gl=on'/
</qemu:commandline
</domain
When we check the Libvirt logs, we noticed that converted XML to QEMU args are almost
similar to the original
LC_ALL=C \
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin \
HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test \
XDG_DATA_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.local/share \
XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.cache \
XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.config \
DISPLAY=:1.0 \
MESA_LOADER_DRIVER_OVERRIDE=i965 \
/usr/bin/qemu-system-x86_64 \
-name guest=ubuntu-vm-test,debug-threads=on \
-S \
-object
'{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/master-key.aes"}'
\
-machine pc-i440fx-6.0,usb=off,dump-guest-core=off,memory-backend=pc.ram \
-accel kvm \
-cpu host,migratable=on \
-bios /usr/share/qemu/OVMF.fd \
-m 4096 \
-object
'{"qom-type":"memory-backend-memfd","id":"pc.ram","x-use-canonical-path-for-ramblock-id":false,"size":4294967296}'
\
-overcommit mem-lock=off \
-smp 6,sockets=6,cores=1,threads=1 \
-uuid 25e70b21-5dc9-44ff-9e7a-026ba637f521 \
-display none \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,fd=32,server=on,wait=off \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc \
-no-shutdown \
-boot strict=on \
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
-blockdev
'{"driver":"file","filename":"/home/ubuntu/ubuntu_1.qcow2","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}'
\
-blockdev
'{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2","file":"libvirt-1-storage","backing":null}'
\
-device
virtio-blk-pci,bus=pci.0,addr=0x3,drive=libvirt-1-format,id=virtio-disk0,bootindex=1 \
-chardev pty,id=charserial0 \
-device isa-serial,chardev=charserial0,id=serial0 \
-audiodev
'{"id":"audio1","driver":"none"}' \
-device virtio-vga,id=video0,max_outputs=1,bus=pci.0,addr=0x2 \
-device vfio-pci,host=0000:00:02.3,id=hostdev0,bus=pci.0,addr=0x4 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 \
-set device.video0.blob=false \
-display gtk,gl=on \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on
Our goal is to have GTK window enabled using libvirt-Python API, and we are seeing below
issues with the lIbvirt but same commands working thgrough QEMU args.
[cid:image001.png@01D813BA.46F75A10]
2022-01-22T10:49:08.685664Z qemu-system-x86_64: egl: eglGetDisplay failed
2022-01-22T10:49:08.685792Z qemu-system-x86_64: OpenGL is not supported by the display
2022-01-22 10:49:08.688+0000: shutting down, reason=failed
I assume there must be some security policies set at the Libvirt side to access the OpenGL
, please help us to resolve it .
Thanks,
Shiv
-----Original Message-----
From: Peter Krempa <pkrempa(a)redhat.com
Sent:
Thursday, January 27, 2022 3:37 PM
To: M, Shivakumar <shivakumar.m(a)intel.com
Cc:
libvirt-users(a)redhat.com; libvir-list(a)redhat.com
Subject: Re: Backend memory object creation - query
On Thu, Jan 27, 2022 at 04:05:19 +0000, M, Shivakumar wrote:
Hello,
Hi,
note that there's no need to CC both libvir-list and libvirt-users maling lists.
For our use-case with Libvirt we want to create the Memory backend
object ,
Expected QEMU args would be
-object memory-backend-memfd,id=mem1,size=4096M
Your description is a bit vague. Do you want to use it to back the guest memory?
As by itself a memory object itself is useless without being attached somewhere
In case you want to configure qemu to back the default memory of the VM by a memfd:
Per
https://www.libvirt.org/formatdomain.html#memory-backing
<domain type='kvm'
...
<memoryBacking
<source type='memfd'/
</memoryBacking
...
</domain
Results into invoking qemu with:
-machine pc-i440fx-2.9,usb=off,vmport=off,dump-guest-core=off,memory-backend=pc.ram \ ...
-object
'{"qom-type":"memory-backend-memfd","id":"pc.ram","x-use-canonical-path-for-ramblock-id":false,"size":1048576000,"host-nodes":[0],"policy":"bind"}'
\
Request you to please help us to specify this arg in the libvirt XML.
Thanks,
Shiv