From Fedora Project Wiki

See Test_Day:2009-05-07_Virtualization.

This test area is concerned with testing the KVM PCI Device Assignment feature added in Fedora 11.

Known bugs include:

  • 499259 - svirt denials breaks KVM PCI device assignment
  • 499708 - SELinux blocks libvirtd sysfs writes for virNodeDeviceDettach()/Reattach()/Reset()
Until this is fixed, all but the nodedev ops test case requires you to run SELinux in permissive mode
  • 499352 - Re-enable CONFIG_DMAR_DEFAULT_ON
You will need to boot the host with intel_iommu=on until this is fixed
  • 499267 - Assigning a PCI device using virt-manager/virt-install fails
Fixed in python-virtinst-0.400.3-8.fc11
  • 499386 - libvirt's qemu driver interprets the <hostdev> "managed" attribute incorrectly
Fixed in libvirt-0.6.2-6.fc11
  • 499561 - libvirt does not automatically re-attach an assigned device in the host after guest shutdown
Workaround is to run virsh nodedev-reattach after the guest has shut down
  • 499637 - IOMMU: no free domain ids
This may happen after a lot of testing; workaround is to reboot the host
  • 499678 - libvirt should be able to reset a PCI function even if it causes other unused devices/functions to be reset
multi-function PCI devices without Function Level Reset (FLR) can't currently be used; more code to handle this case is required in libvirt

Prerequisites[edit]

In order to test KVM PCI device assignment, you need:

  1. a host machine which has Intel VT-d or AMD IOMMU support
  2. the host booted with intel_iommu=on in order to enable VT-d support
  3. The virt_manage_sysfs selinux boolean enabled - setsebool virt_manage_sysfs on
  4. At least libvirt-0.6.2-6.fc11 and python-virtinst-0.400.3-8.fc11 installed

Please upload your smolt profile using smoltSendProfile and add its URL to the table below.

Also, it would be useful to post your PCI bus topology - e.g. post the output of lspci -t -v to Fedora's pastebin.

Tests[edit]

The first thing you need to do is choose which PCI device on your KVM host that you will use for testing. Probably the most obvious to test with is a NIC. You'll need the device's nodedev name, and you can find this with

  $> virsh nodedev-list --tree
  computer
    |
    ...
    +-pci_8086_10bd
    |   |
    |   +-net_00_13_20_f5_f9_5a
    ...
  $> virsh nodedev-dumpxml pci_8086_10bd
  <device>
    <name>pci_8086_10bd</name>
    <parent>computer</parent>
    <capability type='pci'>
      <domain>0</domain>
      <bus>0</bus>
      <slot>25</slot>
      <function>0</function>
      <product id='0x10bd'>82566DM-2 Gigabit Network Connection</product>
      <vendor id='0x8086'>Intel Corporation</vendor>
    </capability>
  </device>

Follow each of these test cases:

  1. libvirt nodedev operations
  2. assigning a device using libvirt
  3. assigning a device using virt-manager
  4. virt-install --host-device

Results[edit]

If you have problems with any of the tests, file a bug report in bugzilla.

Once you have completed the tests, add your results to the table below.

User Smolt lspci Nodedev Ops libvirt virt-manager virt-install Comments
Mark McLoughlin smolt lspci PASS PASS PASS PASS Perfect score! Apart from the known bugs listed above, of course :-)
Charles Rose FAIL reset of multi-function device fails. 499678
Stanley Merkx smolt lspci PASS FAIL Assignment of the device fails. 499259