Re: PCI/GPU Passthrough with xen

Paul O'Rorke
Thu, 06 Feb 2020 22:20:22 -0000

I know these are mostly gamers but they have a lot of experience doing
PCI pass though: https://discord.gg/du9ecG

I have found them extremely helpful in the past doing libvirt PCI
passthough.

*Paul O'Rorke*


On 2020-02-05 10:13 a.m., Jim Fehlig wrote:
> 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'/>
>>
>>        <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'/>
>>
>>        <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'/>
>>
>>        <model type='e1000'/>
>>      </interface>
>>      <serial type='pty'>
>>        <target port='0'/>
>>      </serial>
>>      <console type='pty'>
>>        <target type='serial' port='0'/>
>>      </console>
>>
>>
>>
>>      <graphics type='vnc' port='5900'
autoport='no' listen='0.0.0.0'
>> keymap='de'>
>>        <listen type='address' address='0.0.0.0'/>
>>      </graphics>
>>
>>        <model type='xen' vram='16384'
heads='1' primary='yes'/>
>>
>>      <hostdev mode='subsystem' type='pci'
managed='yes'>
>>        <driver name='xen'/>
>>
>>          <address domain='0x0000' bus='0x01'
slot='0x00'
>> function='0x0'/>
>>
>>      </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'/>
>>
>>          <address domain='0x0000' bus='0x01'
slot='0x00'
>> function='0x1'/>
>>
>>      </hostdev>
>>      <hostdev mode='subsystem' type='pci'
managed='yes'>
>>        <driver name='xen'/>
>>
>>          <address domain='0x0000' bus='0x01'
slot='0x00'
>> function='0x2'/>
>>
>>      </hostdev>
>>      <hostdev mode='subsystem' type='pci'
managed='yes'>
>>        <driver name='xen'/>
>>
>>          <address domain='0x0000' bus='0x01'
slot='0x00'
>> function='0x3'/>
>>
>>      </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'/>
>>>
>>>         <address domain='0x0000' bus='0x0a'
slot='0x10'
>>> function='0x1'/>
>>>
>>>     </hostdev>
>>>
>>> Regards,
>>> Jim
>
>