PCI/GPU Passthrough with xen

Jim Fehlig jfehlig at suse.com
Wed Feb 5 18:13:18 UTC 2020


On 2/4/20 1:04 AM, Christoph wrote:
> this config does not work... why?

Without more details, I don't know why :-). In what way does it "not work"? Does 
'virsh create' fail with this config? If so, what is the error? Also check 
/var/log/libvirt/libxl/libxl-driver.log for any errors emitted during the create 
process.

> <domain type='xen'>
>    <name>marax.chao5.int</name>
>    <uuid>72f8f7cf-d538-41cd-828a-9945b9157719</uuid>
>    <memory unit='GiB'>32</memory>
>    <currentMemory unit='GiB'>32</currentMemory>
>    <vcpu placement='static'>16</vcpu>
>    <os>
>      <type arch='x86_64' machine='xenfv'>hvm</type>
>      <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
>      <boot dev='hd'/>
>    </os>
>    <features>
>      <acpi/>
>      <apic/>
>      <pae/>
>    </features>
>    <clock offset='localtime'/>
>    <on_poweroff>destroy</on_poweroff>
>    <on_reboot>restart</on_reboot>
>    <on_crash>destroy</on_crash>
>    <devices>
>      <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator>
>      <disk type='block' device='disk'>
>        <driver name='phy' type='raw'/>
>        <source dev='/dev/mapper/marax_c'/>
>        <target dev='hda' bus='ide'/>
>        <address type='drive' controller='0' bus='0' target='0' unit='0'/>
>      </disk>
>      <disk type='file' device='cdrom'>
>        <driver type='raw'/>
>        <target dev='hdb' bus='ide'/>
>        <readonly/>
>        <address type='drive' controller='0' bus='0' target='0' unit='1'/>
>      </disk>
>      <disk type='block' device='disk'>
>        <driver name='phy' type='raw'/>
>        <source dev='/dev/vg_lilith/lv_marax_d'/>
>        <target dev='hdc' bus='ide'/>
>        <address type='drive' controller='0' bus='1' target='0' unit='0'/>
>      </disk>
>      <controller type='ide' index='0'/>
>      <interface type='bridge'>
>        <mac address='00:16:3e:8c:97:27'/>
>        <source bridge='xenbr5'/>
>        <model type='e1000'/>
>      </interface>
>      <serial type='pty'>
>        <target port='0'/>
>      </serial>
>      <console type='pty'>
>        <target type='serial' port='0'/>
>      </console>
>      <input type='tablet' bus='usb'/>
>      <input type='mouse' bus='ps2'/>
>      <input type='keyboard' bus='ps2'/>
>      <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'
> keymap='de'>
>        <listen type='address' address='0.0.0.0'/>
>      </graphics>
>      <video>
>        <model type='xen' vram='16384' heads='1' primary='yes'/>
>      </video>
>      <hostdev mode='subsystem' type='pci' managed='yes'>
>        <driver name='xen'/>
>        <source>
>          <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
>        </source>
>      </hostdev>

For debugging purposes try to passthrough only one device. Once that is working 
you can add the other devices.

Another good debugging step would be to remove libvirt entirely and see if you 
can passthrough the device(s) using the xen tools

https://wiki.xenproject.org/wiki/Xen_PCI_Passthrough

Regards,
Jim

>      <hostdev mode='subsystem' type='pci' managed='yes'>
>        <driver name='xen'/>
>        <source>
>          <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
>        </source>
>      </hostdev>
>      <hostdev mode='subsystem' type='pci' managed='yes'>
>        <driver name='xen'/>
>        <source>
>          <address domain='0x0000' bus='0x01' slot='0x00' function='0x2'/>
>        </source>
>      </hostdev>
>      <hostdev mode='subsystem' type='pci' managed='yes'>
>        <driver name='xen'/>
>        <source>
>          <address domain='0x0000' bus='0x01' slot='0x00' function='0x3'/>
>        </source>
>      </hostdev>
>      <memballoon model='xen'/>
>    </devices>
> </domain>
> 
> 
> ---
> ------
> Greetz
> 
> Am 31.01.2020 23:07, schrieb Jim Fehlig:
>> On 1/30/20 1:24 AM, Christoph wrote:
>>> Hi All,
>>>
>>> it is possible to use pci/gpu passthrough with xen and libvirt?
>>> If yes, how is the syntax? Can I get an example?
>>
>> Yes, host PCI devices can be passed to xen guests using libvirt. Below
>> is example config of a "managed" PCI host device. For more details see
>> https://libvirt.org/formatdomain.html#elementsHostDevSubsys
>>
>>     <hostdev mode='subsystem' type='pci' managed='yes'>
>>       <driver name='xen'/>
>>       <source>
>>         <address domain='0x0000' bus='0x0a' slot='0x10'
>> function='0x1'/>
>>       </source>
>>     </hostdev>
>>
>> Regards,
>> Jim





More information about the libvirt-users mailing list