<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoPlainText">Hi Peter,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">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.
<o:p></o:p></p>
<p class="MsoPlainText">Since Libvirt is basically XML oriented, we wanted to convert the existing tested QEMU commands into Libvirt XML for VM management.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Below is the QEMU command – its SRIOV based GPU pass-thru in our system with KVM hypervisor<o:p></o:p></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoPlainText"><b><i><span style="color:#0070C0">qemu-system-x86_64 \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-m 4096 \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-enable-kvm \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-cpu host \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-smp cores=6 \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-drive file=/usr/share/qemu/OVMF.fd,format=raw,if=pflash \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-drive id=ubuntu_drive,if=virtio,file=/home/ubuntu/ubuntu_1.qcow2,format=qcow2,cache=none \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-usb \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-device usb-tablet \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-device virtio-vga,max_outputs=1,blob=true \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-display gtk,gl=on \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-object memory-backend-memfd,id=mem1,size=4096M \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-machine memory-backend=mem1 \<o:p></o:p></span></i></b></p>
<p class="MsoPlainText"><b><i><span style="color:#0070C0">-device vfio-pci,host=0000:00:02.2</span><o:p></o:p></i></b></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Libvirt XML (Memory backing added) <o:p></o:p></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="623" valign="top" style="width:467.5pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal"><domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'><o:p></o:p></p>
<p class="MsoNormal">  <name>ubuntu-vm-test</name><o:p></o:p></p>
<p class="MsoNormal">  <memory unit="KiB">4194304</memory><o:p></o:p></p>
<p class="MsoNormal">  <currentMemory unit="KiB">4194304</currentMemory><o:p></o:p></p>
<p class="MsoNormal">   <memoryBacking><o:p></o:p></p>
<p class="MsoNormal">    <source type='memfd'/><o:p></o:p></p>
<p class="MsoNormal">  </memoryBacking><o:p></o:p></p>
<p class="MsoNormal">   <o:p></o:p></p>
<p class="MsoNormal">  <vcpu>6</vcpu><o:p></o:p></p>
<p class="MsoNormal">  <os><o:p></o:p></p>
<p class="MsoNormal">    <loader>/usr/share/qemu/OVMF.fd</loader><o:p></o:p></p>
<p class="MsoNormal">    <type arch="x86_64" machine="pc">hvm</type><o:p></o:p></p>
<p class="MsoNormal">    <boot dev="hd" /><o:p></o:p></p>
<p class="MsoNormal">    <boot dev="cdrom" /><o:p></o:p></p>
<p class="MsoNormal">  </os><o:p></o:p></p>
<p class="MsoNormal">  <features><o:p></o:p></p>
<p class="MsoNormal">    <acpi /><o:p></o:p></p>
<p class="MsoNormal">    <apic /><o:p></o:p></p>
<p class="MsoNormal">  </features><o:p></o:p></p>
<p class="MsoNormal">  <cpu mode='host-passthrough'><o:p></o:p></p>
<p class="MsoNormal">  </cpu><o:p></o:p></p>
<p class="MsoNormal">  <clock offset="utc"><o:p></o:p></p>
<p class="MsoNormal">  </clock><o:p></o:p></p>
<p class="MsoNormal">  <on_poweroff>destroy</on_poweroff><o:p></o:p></p>
<p class="MsoNormal">  <on_reboot>restart</on_reboot><o:p></o:p></p>
<p class="MsoNormal">  <on_crash>destroy</on_crash><o:p></o:p></p>
<p class="MsoNormal">  <devices><o:p></o:p></p>
<p class="MsoNormal">    <emulator>/usr/bin/qemu-system-x86_64</emulator><o:p></o:p></p>
<p class="MsoNormal">    <disk type="file" device="disk"><o:p></o:p></p>
<p class="MsoNormal">       <driver name="qemu" type="qcow2" /><o:p></o:p></p>
<p class="MsoNormal">       <source file="=/home/ubuntu/ubuntu_1.qcow2" /><o:p></o:p></p>
<p class="MsoNormal">       <target dev="vda" bus="virtio" /><o:p></o:p></p>
<p class="MsoNormal">  </disk><o:p></o:p></p>
<p class="MsoNormal">    <serial type="pty"><o:p></o:p></p>
<p class="MsoNormal">      <target port="0" /><o:p></o:p></p>
<p class="MsoNormal">      <target type="serial" port="0"><o:p></o:p></p>
<p class="MsoNormal">        </target><o:p></o:p></p>
<p class="MsoNormal">      <alias name="serial0" /><o:p></o:p></p>
<p class="MsoNormal">    </serial><o:p></o:p></p>
<p class="MsoNormal">    <console type="pty"><o:p></o:p></p>
<p class="MsoNormal">      <target type="serial" port="0" /><o:p></o:p></p>
<p class="MsoNormal">      <alias name="serial0" /><o:p></o:p></p>
<p class="MsoNormal">    </console><o:p></o:p></p>
<p class="MsoNormal">    <hostdev mode="subsystem" type="pci" managed="yes"><o:p></o:p></p>
<p class="MsoNormal">    <driver name='vfio'/><o:p></o:p></p>
<p class="MsoNormal">      <source><o:p></o:p></p>
<p class="MsoNormal">              <address domain="0x0000" bus="0x00" slot="0x02" function="0x03" /><o:p></o:p></p>
<p class="MsoNormal">      </source><o:p></o:p></p>
<p class="MsoNormal">        </hostdev><o:p></o:p></p>
<p class="MsoNormal">     <video><o:p></o:p></p>
<p class="MsoNormal">    <model type='virtio' virgl='off'/><o:p></o:p></p>
<p class="MsoNormal">     <driver name='qemu'/><o:p></o:p></p>
<p class="MsoNormal">     </video><o:p></o:p></p>
<p class="MsoNormal"></devices><o:p></o:p></p>
<p class="MsoNormal"><qemu:commandline><o:p></o:p></p>
<p class="MsoNormal">    <qemu:arg value='-set'/><o:p></o:p></p>
<p class="MsoNormal">    <qemu:arg value='device.video0.blob=false'/><o:p></o:p></p>
<p class="MsoNormal"></qemu:commandline><o:p></o:p></p>
<p class="MsoNormal"><qemu:commandline><o:p></o:p></p>
<p class="MsoNormal">    <qemu:arg value='-display'/><o:p></o:p></p>
<p class="MsoNormal">    <qemu:arg value='gtk,gl=on'/><o:p></o:p></p>
<p class="MsoNormal">  </qemu:commandline><o:p></o:p></p>
<p class="MsoNormal"></domain><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>When we check the Libvirt logs, we noticed that converted XML to QEMU args are almost similar to the original
<o:p></o:p></b></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="1019" valign="top" style="width:764.6pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal">LC_ALL=C \<o:p></o:p></p>
<p class="MsoNormal">PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin \<o:p></o:p></p>
<p class="MsoNormal">HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test \<o:p></o:p></p>
<p class="MsoNormal">XDG_DATA_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.local/share \<o:p></o:p></p>
<p class="MsoNormal">XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.cache \<o:p></o:p></p>
<p class="MsoNormal">XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/.config \<o:p></o:p></p>
<p class="MsoNormal">DISPLAY=:1.0 \<o:p></o:p></p>
<p class="MsoNormal">MESA_LOADER_DRIVER_OVERRIDE=i965 \<o:p></o:p></p>
<p class="MsoNormal">/usr/bin/qemu-system-x86_64 \<o:p></o:p></p>
<p class="MsoNormal">-name guest=ubuntu-vm-test,debug-threads=on \<o:p></o:p></p>
<p class="MsoNormal">-S \<o:p></o:p></p>
<p class="MsoNormal">-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain-7-ubuntu-vm-test/master-key.aes"}' \<o:p></o:p></p>
<p class="MsoNormal">-machine pc-i440fx-6.0,usb=off,dump-guest-core=off,memory-backend=pc.ram \<o:p></o:p></p>
<p class="MsoNormal">-accel kvm \<o:p></o:p></p>
<p class="MsoNormal">-cpu host,migratable=on \<o:p></o:p></p>
<p class="MsoNormal">-bios /usr/share/qemu/OVMF.fd \<o:p></o:p></p>
<p class="MsoNormal">-m 4096 \<o:p></o:p></p>
<p class="MsoNormal">-object '{"qom-type":"memory-backend-memfd","id":"pc.ram","x-use-canonical-path-for-ramblock-id":false,"size":4294967296}' \<o:p></o:p></p>
<p class="MsoNormal">-overcommit mem-lock=off \<o:p></o:p></p>
<p class="MsoNormal">-smp 6,sockets=6,cores=1,threads=1 \<o:p></o:p></p>
<p class="MsoNormal">-uuid 25e70b21-5dc9-44ff-9e7a-026ba637f521 \<o:p></o:p></p>
<p class="MsoNormal">-display none \<o:p></o:p></p>
<p class="MsoNormal">-no-user-config \<o:p></o:p></p>
<p class="MsoNormal">-nodefaults \<o:p></o:p></p>
<p class="MsoNormal">-chardev socket,id=charmonitor,fd=32,server=on,wait=off \<o:p></o:p></p>
<p class="MsoNormal">-mon chardev=charmonitor,id=monitor,mode=control \<o:p></o:p></p>
<p class="MsoNormal">-rtc base=utc \<o:p></o:p></p>
<p class="MsoNormal">-no-shutdown \<o:p></o:p></p>
<p class="MsoNormal">-boot strict=on \<o:p></o:p></p>
<p class="MsoNormal">-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \<o:p></o:p></p>
<p class="MsoNormal">-blockdev '{"driver":"file","filename":"/home/ubuntu/ubuntu_1.qcow2","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \<o:p></o:p></p>
<p class="MsoNormal">-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2","file":"libvirt-1-storage","backing":null}' \<o:p></o:p></p>
<p class="MsoNormal">-device virtio-blk-pci,bus=pci.0,addr=0x3,drive=libvirt-1-format,id=virtio-disk0,bootindex=1 \<o:p></o:p></p>
<p class="MsoNormal">-chardev pty,id=charserial0 \<o:p></o:p></p>
<p class="MsoNormal">-device isa-serial,chardev=charserial0,id=serial0 \<o:p></o:p></p>
<p class="MsoNormal">-audiodev '{"id":"audio1","driver":"none"}' \<o:p></o:p></p>
<p class="MsoNormal">-device virtio-vga,id=video0,max_outputs=1,bus=pci.0,addr=0x2 \<o:p></o:p></p>
<p class="MsoNormal">-device vfio-pci,host=0000:00:02.3,id=hostdev0,bus=pci.0,addr=0x4 \<o:p></o:p></p>
<p class="MsoNormal">-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 \<o:p></o:p></p>
<p class="MsoNormal">-set device.video0.blob=false \<o:p></o:p></p>
<p class="MsoNormal">-display gtk,gl=on \<o:p></o:p></p>
<p class="MsoNormal">-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \<o:p></o:p></p>
<p class="MsoNormal">-msg timestamp=on<o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">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.<o:p></o:p></p>
<table class="MsoTableGrid" border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;border:none">
<tbody>
<tr>
<td width="1001" valign="top" style="width:751.1pt;border:solid windowtext 1.0pt;padding:0in 5.4pt 0in 5.4pt">
<p class="MsoNormal"><img width="929" height="131" style="width:9.677in;height:1.3645in" id="Picture_x0020_1" src="cid:image001.png@01D813BA.46F75A10"><o:p></o:p></p>
<p class="MsoNormal"><i>2022-01-22T10:49:08.685664Z qemu-system-x86_64: egl: eglGetDisplay failed<o:p></o:p></i></p>
<p class="MsoNormal"><i>2022-01-22T10:49:08.685792Z qemu-system-x86_64: OpenGL is not supported by the display<o:p></o:p></i></p>
<p class="MsoNormal"><i>2022-01-22 10:49:08.688+0000: shutting down, reason=failed</i><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I assume there must be some security policies set at the Libvirt side to access the OpenGL , please help us to resolve it .<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thanks,<o:p></o:p></p>
<p class="MsoPlainText">Shiv<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-----Original Message-----<br>
From: Peter Krempa <pkrempa@redhat.com> <br>
Sent: Thursday, January 27, 2022 3:37 PM<br>
To: M, Shivakumar <shivakumar.m@intel.com><br>
Cc: libvirt-users@redhat.com; libvir-list@redhat.com<br>
Subject: Re: Backend memory object creation - query</p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">On Thu, Jan 27, 2022 at 04:05:19 +0000, M, Shivakumar wrote:<o:p></o:p></p>
<p class="MsoPlainText">> Hello,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Hi,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">note that there's no need to CC both libvir-list and libvirt-users maling lists.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> For our use-case with Libvirt we want to create the Memory backend
<o:p></o:p></p>
<p class="MsoPlainText">> object ,<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Expected QEMU args would be<o:p></o:p></p>
<p class="MsoPlainText">> -object memory-backend-memfd,id=mem1,size=4096M<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Your description is a bit vague. Do you want to use it to back the guest memory?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">As by itself a memory object itself is useless without being attached somewhere<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">In case you want to configure qemu to back the default memory of the VM by a memfd:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Per <a href="https://www.libvirt.org/formatdomain.html#memory-backing">
<span style="color:windowtext;text-decoration:none">https://www.libvirt.org/formatdomain.html#memory-backing</span></a><o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><domain type='kvm'><o:p></o:p></p>
<p class="MsoPlainText">...<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><memoryBacking><o:p></o:p></p>
<p class="MsoPlainText">   <source type='memfd'/><o:p></o:p></p>
<p class="MsoPlainText"></memoryBacking><o:p></o:p></p>
<p class="MsoPlainText">...<o:p></o:p></p>
<p class="MsoPlainText"></domain><o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Results into invoking qemu with:<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-machine pc-i440fx-2.9,usb=off,vmport=off,dump-guest-core=off,memory-backend=pc.ram \ ...<o:p></o:p></p>
<p class="MsoPlainText">-object '{"qom-type":"memory-backend-memfd","id":"pc.ram","x-use-canonical-path-for-ramblock-id":false,"size":1048576000,"host-nodes":[0],"policy":"bind"}' \<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Request you to please help us to specify this arg in the libvirt XML.<o:p></o:p></p>
<p class="MsoPlainText">> <o:p></o:p></p>
<p class="MsoPlainText">> Thanks,<o:p></o:p></p>
<p class="MsoPlainText">> Shiv<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
</div>
</body>
</html>