[pve-devel] [PATCH many v3] add cluster-wide hardware device mapping

DERUMIER, Alexandre Alexandre.DERUMIER at groupe-cyllene.com
Tue Sep 20 18:12:29 CEST 2022


Hi Dominik,

I will try to test it this week.

Le mardi 20 septembre 2022 à 14:50 +0200, Dominik Csapak a écrit :
> this series aims to add a cluster-wide device mapping for pci and usb
> devices.
> so that an admin can configure a device to be availble for migration
> and
> configuring for uses that are non-root
> 
> this version is mostly the same as v2, aside from some bugfixes,
> rebase
> and preventing from having mdev: 1 set for multifunction devices.
> i would appreciate if somebody could take a look at this series
> again ;) (below is the old cover letter + changelog)
> 
> built-in are some additional safety checks in contrast to current
> passthrough, e.g. if pci addresses shift, with the mapping
> we can detect that and prevent a vm to boot with the wrong device
> (in most cases, there are some edge cases when one has multiple
> of the same device, e.g. the same gpu, that we cannot detect)
> 
> new in this version is the ability to specify multiple devices for
> each host mapping, such that we can select the first free one on
> starting the vm (this fixes #3574). That makes using vGPUs and SR-IOV
> much more useful as a user does not have to hardcode the pci ids
> anymore
> 
> i left that feature seperated in a patch for pve-common(3/3) and in
> qemu-server ({12,13}/13) in the backend for easier review, but did
> not bother
> to do it for the gui (if we really don't want it, i can just send a
> different
> version for the ui)
> 
> also pve-common 1/3 and qemu-server 1-4/13 are general cleanups that
> would even make sense without the remaining patches
> (qemu-server 1/13 depends on pve-common 1/3)
> 
> changes from v2:
> * some bug fixes (e.g use of unitialized variable)
> * don't set mdev for multifunction devices
>   -> this should fix alexandres issue, since it's not possible
> anymore
>   to select a mediated device when having a multifunction device
>   selected
> 
> changes from v1:
> * dropped 'check_hw_perm' (just use 'check_full' now)
> * added some cleanups
> * renamed the buttons in the ui (hopefully better now)
> * added multi device mapping for each host
>   this includes a new 'multi pci' selector for that window, which
>   automatically adds entries for the whole slots which, when
> selected,
>   disabled the selection of the individual functions
> * fixed some issues (e.g. missing entries in the 'caps' object, wrong
>   usb config parsing, etc.)
> 
> changes from the rfc:
> * new cluster wide gui instead of node-local one (removed that, since
>   it's not necessary when we have a cluster-wide one)
> * uses json instead of a section config
> * api is quite different overall, i split the type into its own level
>   for configuring, similar to what we do in pbs
>   (e.g. /nodes/NODENAME/hardware/mapping/usb/)
> * fixed quite some bugs the rfc had
> * added patch for handling the gui with limited permissions better
> * added a 'comment' field for mappings
> 
> dependencies:
>     pve-common (1) breaks current qemu-server
>     pve-common (2,3) depends on pve-cluster
>     qemu-server (1-4) depends on pve-common (1)
>     qemu-server (5-11) depends on qemu-server(<5), pve-access-
> control,pve-common (2)
>     qemu-server (12,13) depends on qemu-server(<12), pve-common (3)
>     manager depends on qemu-server,pve-access-control,pve-common
> 
> pve-cluster:
> 
> Dominik Csapak (1):
>   add nodes/hardware-map.conf
> 
>  data/PVE/Cluster.pm | 1 +
>  data/src/status.c   | 1 +
>  2 files changed, 2 insertions(+)
> 
> pve-access-control:
> 
> Dominik Csapak (1):
>   PVE/AccessControl: add Hardware.* privileges and /hardware/ paths
> 
>  src/PVE/AccessControl.pm  | 13 +++++++++++++
>  src/PVE/RPCEnvironment.pm |  3 ++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
> 
> pve-common:
> 
> Dominik Csapak (3):
>   SysFSTools: make mdev cleanup independent of pciid
>   add PVE/HardwareMap
>   HardwareMap: add support for multiple pci device paths per mapping
> 
>  src/Makefile           |   1 +
>  src/PVE/HardwareMap.pm | 378
> +++++++++++++++++++++++++++++++++++++++++
>  src/PVE/SysFSTools.pm  |   6 +-
>  3 files changed, 381 insertions(+), 4 deletions(-)
>  create mode 100644 src/PVE/HardwareMap.pm
> 
> qemu-server:
> 
> Dominik Csapak (13):
>   cleanup pci devices in more situations
>   PCI: make mediated device path independent of pci id
>   PCI: refactor print_pci_device
>   PCI: reuse parsed info from print_hostpci_devices
>   PVE/QemuServer: allow mapped usb devices in config
>   PVE/QemuServer: allow mapped pci deviced in config
>   PVE/API2/Qemu: add permission checks for mapped usb devices
>   PVE/API2/Qemu: add permission checks for mapped pci devices
>   PVE/QemuServer: extend 'check_local_resources' for mapped resources
>   PVE/API2/Qemu: migrate preconditions: use new check_local_resources
>     info
>   PVE/QemuMigrate: check for mapped resources on migration
>   fix #3574: enable multi pci device mapping from config
>   add tests for mapped pci devices
> 
>  PVE/API2/Qemu.pm                              | 109 +++++++++++--
>  PVE/QemuMigrate.pm                            |  13 +-
>  PVE/QemuServer.pm                             | 137 +++++++++++-----
>  PVE/QemuServer/PCI.pm                         | 149 +++++++++++++---
> --
>  PVE/QemuServer/USB.pm                         |  21 ++-
>  test/MigrationTest/Shared.pm                  |   7 +
>  test/cfg2cmd/q35-linux-hostpci-mapping.conf   |  17 ++
>  .../q35-linux-hostpci-mapping.conf.cmd        |  36 +++++
>  test/run_config2command_tests.pl              |  76 +++++++++
>  9 files changed, 473 insertions(+), 92 deletions(-)
>  create mode 100644 test/cfg2cmd/q35-linux-hostpci-mapping.conf
>  create mode 100644 test/cfg2cmd/q35-linux-hostpci-mapping.conf.cmd
> 
> pve-manager:
> 
> Dominik Csapak (13):
>   PVE/API2/Hardware: add Mapping.pm
>   PVE/API2/Cluster: add Hardware mapping list api call
>   ui: form/USBSelector: make it more flexible with nodename
>   ui: form: add PCIMapSelector
>   ui: form: add USBMapSelector
>   ui: qemu/PCIEdit: rework panel to add a mapped configuration
>   ui: qemu/USBEdit: add 'mapped' device case
>   ui: form: add MultiPCISelector
>   ui: add window/PCIEdit: edit window for pci mappings
>   ui: add window/USBEdit: edit window for usb mappings
>   ui: add dc/HardwareView: a CRUD interface for hardware mapping
>   ui: window/Migrate: allow mapped devices
>   ui: improve permission handling for hardware
> 
>  PVE/API2/Cluster.pm                   |   8 +
>  PVE/API2/Cluster/Hardware.pm          | 117 +++++
>  PVE/API2/Cluster/Makefile             |   1 +
>  PVE/API2/Hardware.pm                  |   6 +
>  PVE/API2/Hardware/Makefile            |   1 +
>  PVE/API2/Hardware/Mapping.pm          | 708
> ++++++++++++++++++++++++++
>  www/css/ext6-pve.css                  |   4 +
>  www/manager6/Makefile                 |   6 +
>  www/manager6/data/PermPathStore.js    |   1 +
>  www/manager6/dc/Config.js             |  18 +-
>  www/manager6/dc/HardwareView.js       | 324 ++++++++++++
>  www/manager6/form/MultiPCISelector.js | 289 +++++++++++
>  www/manager6/form/PCIMapSelector.js   | 102 ++++
>  www/manager6/form/PCISelector.js      |  18 +-
>  www/manager6/form/USBMapSelector.js   |  73 +++
>  www/manager6/form/USBSelector.js      |  33 +-
>  www/manager6/qemu/HardwareView.js     |  17 +-
>  www/manager6/qemu/PCIEdit.js          | 314 ++++++++----
>  www/manager6/qemu/USBEdit.js          |  36 +-
>  www/manager6/window/Migrate.js        |  37 +-
>  www/manager6/window/PCIEdit.js        | 283 ++++++++++
>  www/manager6/window/USBEdit.js        | 248 +++++++++
>  22 files changed, 2513 insertions(+), 131 deletions(-)
>  create mode 100644 PVE/API2/Cluster/Hardware.pm
>  create mode 100644 PVE/API2/Hardware/Mapping.pm
>  create mode 100644 www/manager6/dc/HardwareView.js
>  create mode 100644 www/manager6/form/MultiPCISelector.js
>  create mode 100644 www/manager6/form/PCIMapSelector.js
>  create mode 100644 www/manager6/form/USBMapSelector.js
>  create mode 100644 www/manager6/window/PCIEdit.js
>  create mode 100644 www/manager6/window/USBEdit.js
> 



More information about the pve-devel mailing list