[libvirt] [RFC PATCH 00/16] Introduce vGPU mdev framework to libvirt

Erik Skultety eskultet at redhat.com
Mon Feb 6 12:19:42 UTC 2017


Finally. It's here. This is the initial suggestion on how libvirt might
interract with the mdev framework, currently only focussing on the non-managed
devices, i.e. those pre-created by the user, since that will be revisited once
we all settled on how the XML should look like, given we might not want to use
the sysfs path directly as an attribute in the domain XML. My proposal on the
XML is the following:

<hostdev mode='subsystem' type='mdev'>  
    <source>
        <!-- this is the host's physical device address -->
        <address domain='0x0000' bus='0x00' slot='0x00' function='0x00'>
        <uuid>vGPU_UUID<uuid>
    <source>
    <!-- target PCI address can be omitted to assign it automatically -->
</hostdev>

So the mediated device is identified by the physical parent device visible on
the host and a UUID which allows us to construct the sysfs path by ourselves,
which we then put on the QEMU's command line.

A few remarks if you actually happen to have a machine to test this on:
- right now the mediated devices are one-time use only, i.e. they have to be
recreated before every machine boot
- I wouldn't recommend assigning multiple vGPUs to a single domain

Once this series is sorted out, we can then continue with 'managed=yes' where
as Laine pointed out [1], we need to figure out how exactly should the
management layer hint libvirt which vGPU type should be used for device
instantiation.

[1] https://www.redhat.com/archives/libvir-list/2017-January/msg00287.html  

#pleaseshareyourfeedback

Thanks,
Erik

Erik Skultety (16):
  util: Introduce new module virmdev
  conf: Introduce new hostdev device type mdev
  docs: Update RNG schema to reflect the new hostdev type mdev
  conf: Adjust the domain parser to work with mdevs
  Adjust the formatter to reflect the new hostdev type mdev
  security: dac: Enable labeling of vfio mediated devices
  security: selinux: Enable labeling of vfio mediated devices
  conf: Enable cold-plug of a mediated device
  qemu: Assign PCI addresses for mediated devices as well
  hostdev: Maintain a driver list of active mediated devices
  hostdev: Introduce a reattach method for mediated devices
  qemu: cgroup: Adjust cgroups' logic to allow mediated devices
  qemu: namespace: Hook up the discovery of mdevs into the namespace
    code
  qemu: Format mdevs on the qemu command line
  test: Add some test cases for our test suite regarding the mdevs
  docs: Document the new hostdev device type 'mdev'

 docs/formatdomain.html.in                          |  40 ++-
 docs/schemas/domaincommon.rng                      |  17 +
 po/POTFILES.in                                     |   1 +
 src/Makefile.am                                    |   1 +
 src/conf/domain_conf.c                             |  81 ++++-
 src/conf/domain_conf.h                             |  10 +
 src/libvirt_private.syms                           |  19 ++
 src/qemu/qemu_cgroup.c                             |  35 ++
 src/qemu/qemu_command.c                            |  49 +++
 src/qemu/qemu_command.h                            |   5 +
 src/qemu/qemu_domain.c                             |  13 +
 src/qemu/qemu_domain_address.c                     |  12 +-
 src/qemu/qemu_hostdev.c                            |  37 ++
 src/qemu/qemu_hostdev.h                            |   8 +
 src/qemu/qemu_hotplug.c                            |   2 +
 src/security/security_apparmor.c                   |   3 +
 src/security/security_dac.c                        |  56 +++
 src/security/security_selinux.c                    |  55 +++
 src/util/virhostdev.c                              | 179 +++++++++-
 src/util/virhostdev.h                              |  16 +
 src/util/virmdev.c                                 | 375 +++++++++++++++++++++
 src/util/virmdev.h                                 |  85 +++++
 tests/domaincapsschemadata/full.xml                |   1 +
 ...qemuxml2argv-hostdev-mdev-unmanaged-no-uuid.xml |  37 ++
 .../qemuxml2argv-hostdev-mdev-unmanaged.args       |  25 ++
 .../qemuxml2argv-hostdev-mdev-unmanaged.xml        |  38 +++
 tests/qemuxml2argvtest.c                           |   6 +
 .../qemuxml2xmlout-hostdev-mdev-unmanaged.xml      |  41 +++
 tests/qemuxml2xmltest.c                            |   1 +
 29 files changed, 1239 insertions(+), 9 deletions(-)
 create mode 100644 src/util/virmdev.c
 create mode 100644 src/util/virmdev.h
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-hostdev-mdev-unmanaged-no-uuid.xml
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-hostdev-mdev-unmanaged.args
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-hostdev-mdev-unmanaged.xml
 create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-hostdev-mdev-unmanaged.xml

-- 
2.10.2




More information about the libvir-list mailing list