Hi Michal, On Fri, May 09, 2025 at 03:30:21PM +0200, Michal Prívozník wrote: > On 4/2/25 10:25, Andrea Righi via Devel wrote: > > = Overview = > > > > This patch set introduces support for acpi-generic-initiator devices, > > supported by QEMU [1]. > > > > The acpi-generic-initiator object is required to support Multi-Instance GPU > > (MIG) configurations on NVIDIA GPUs [2]. MIG enables partitioning of GPU > > resources into multiple isolated instances, each requiring a dedicated NUMA > > node definition. > > > > = Implementation = > > > > This patch set implements the libvirt counterpart to the QEMU feature, > > enabling users to configure acpi-generic-initiator objects within libvirt > > domain XML. > > > > This includes: > > - adding XML syntax to define acpi-generic-initiator objects, > > - resolving the acpi-generic-initiator definitions into the proper QEMU > > command-line arguments, > > - ensuring compatibility with existing NUMA configuration. > > > > = Example = > > > > - Domain XML: > > ``` > > ... > > <cpu mode='host-passthrough' check='none'> > > <numa> > > <cell id='0' cpus='0-15' memory='8388608' unit='KiB'/> > > <cell id='1' memory='0' unit='KiB'/> > > <cell id='2' memory='0' unit='KiB'/> > > <cell id='3' memory='0' unit='KiB'/> > > <cell id='4' memory='0' unit='KiB'/> > > <cell id='5' memory='0' unit='KiB'/> > > <cell id='6' memory='0' unit='KiB'/> > > <cell id='7' memory='0' unit='KiB'/> > > <cell id='8' memory='0' unit='KiB'/> > > </numa> > > </cpu> > > ... > > <devices> > > ... > > <hostdev mode='subsystem' type='pci' managed='no'> > > <source> > > <address domain='0x0009' bus='0x01' slot='0x00' function='0x0'/> > > </source> > > <address type='pci' domain='0x0000' bus='0x03' slot='0x00' > > function='0x0'/> > > </hostdev> > > <acpi-generic-initiator> > > <alias name="gi1"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>1</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi2"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>2</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi3"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>3</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi4"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>4</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi5"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>5</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi6"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>6</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi7"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>7</numa-node> > > </acpi-generic-initiator> > > <acpi-generic-initiator> > > <alias name="gi8"/> > > <pci-dev>hostdev0</pci-dev> > > <numa-node>8</numa-node> > > </acpi-generic-initiator> > > </devices> > > ``` > > > > - Generated QEMU command line options: > > ``` > > ... /usr/bin/qemu-system-aarch64 \ > > ... > > -object > > '{"qom-type":"memory-backend-ram","id":"ram-node0","size":8589934592}' \ > > -numa node,nodeid=0,cpus=0-15,memdev=ram-node0 \ > > -numa node,nodeid=1 \ > > -numa node,nodeid=2 \ > > -numa node,nodeid=3 \ > > -numa node,nodeid=4 \ > > -numa node,nodeid=5 \ > > -numa node,nodeid=6 \ > > -numa node,nodeid=7 \ > > -numa node,nodeid=8 \ > > ... > > -device > > '{"driver":"vfio-pci","host":"0009:01:00.0","id":"hostdev0","bus":"pci.3","addr":"0x0"}' > > ... > > -object acpi-generic-initiator,id=gi1,pci-dev=hostdev0,node=1 \ > > -object acpi-generic-initiator,id=gi2,pci-dev=hostdev0,node=2 \ > > -object acpi-generic-initiator,id=gi3,pci-dev=hostdev0,node=3 \ > > -object acpi-generic-initiator,id=gi4,pci-dev=hostdev0,node=4 \ > > -object acpi-generic-initiator,id=gi5,pci-dev=hostdev0,node=5 \ > > -object acpi-generic-initiator,id=gi6,pci-dev=hostdev0,node=6 \ > > -object acpi-generic-initiator,id=gi7,pci-dev=hostdev0,node=7 \ > > -object acpi-generic-initiator,id=gi8,pci-dev=hostdev0,node=8 > > ``` > > > > = References = > > > > [1] https://lore.kernel.org/all/20231225045603.7654-2-ank...@nvidia.com/ > > [2] https://www.nvidia.com/en-in/technologies/multi-instance-gpu/ > > > > ChangeLog v2 -> v3: > > - replaced <text/> with proper types in the XML schema > > - avoid mixing g_free() and VIR_FREE() > > - use virXMLPropString() instead of looping all XML nodes > > - report proper errors with virReportError() > > - use virBufferEscapeString() to process strings passed by the user > > - fix broken formatting of function headers > > - misc coding style fixes > > > > ChangeLog v1 -> v2: > > - split parser and driver changes in separate patches > > - introduce a new qemu capability flag > > - introduce test in qemuxmlconftest > > > > Andrea Righi (6): > > schema: Introduce acpi-generic-initiator definition > > conf: Introduce acpi-generic-initiator device > > qemu: Allow to define NUMA nodes without memory or CPUs assigned > > qemu: capabilies: Introduce QEMU_CAPS_ACPI_GENERIC_INITIATOR > > qemu: support acpi-generic-initiator > > qemu: Add test case for acpi-generic-initiator > > > > src/ch/ch_domain.c | 1 + > > src/conf/domain_conf.c | 159 > > +++++++++++++++++++++ > > src/conf/domain_conf.h | 14 ++ > > src/conf/domain_postparse.c | 1 + > > src/conf/domain_validate.c | 37 +++++ > > src/conf/numa_conf.c | 3 + > > src/conf/schemas/domaincommon.rng | 19 +++ > > src/conf/virconftypes.h | 2 + > > src/libxl/libxl_driver.c | 6 + > > src/lxc/lxc_driver.c | 6 + > > src/qemu/qemu_capabilities.c | 2 + > > src/qemu/qemu_capabilities.h | 1 + > > src/qemu/qemu_command.c | 49 ++++++- > > src/qemu/qemu_domain.c | 2 + > > src/qemu/qemu_domain_address.c | 4 + > > src/qemu/qemu_driver.c | 3 + > > src/qemu/qemu_hotplug.c | 5 + > > src/qemu/qemu_postparse.c | 1 + > > src/qemu/qemu_validate.c | 1 + > > src/test/test_driver.c | 4 + > > .../caps_10.0.0_x86_64+amdsev.xml | 1 + > > tests/qemucapabilitiesdata/caps_10.0.0_x86_64.xml | 1 + > > tests/qemucapabilitiesdata/caps_9.0.0_x86_64.xml | 1 + > > tests/qemucapabilitiesdata/caps_9.1.0_riscv64.xml | 1 + > > tests/qemucapabilitiesdata/caps_9.1.0_x86_64.xml | 1 + > > .../caps_9.2.0_aarch64+hvf.xml | 1 + > > .../caps_9.2.0_x86_64+amdsev.xml | 1 + > > tests/qemucapabilitiesdata/caps_9.2.0_x86_64.xml | 1 + > > .../acpi-generic-initiator.x86_64-latest.args | 55 +++++++ > > .../acpi-generic-initiator.x86_64-latest.xml | 102 +++++++++++++ > > tests/qemuxmlconfdata/acpi-generic-initiator.xml | 102 +++++++++++++ > > tests/qemuxmlconftest.c | 1 + > > 32 files changed, 581 insertions(+), 7 deletions(-) > > create mode 100644 > > tests/qemuxmlconfdata/acpi-generic-initiator.x86_64-latest.args > > create mode 100644 > > tests/qemuxmlconfdata/acpi-generic-initiator.x86_64-latest.xml > > create mode 100644 tests/qemuxmlconfdata/acpi-generic-initiator.xml > > > > Sorry for late review. Normally, to make it up to you I'd fix all the > small nits and merge, but this is introducing new feature and yet not > updating documentation and that's a show stopper. Also, don't forget to > add a NEWS.rst entry ;-)
Thanks for taking a look at this. Do you think docs/formatdomain.rst is the appropriate place to document the new acpi-generic-initiator? I'll also make sure to add a proper entry in NEWS.rst. -Andrea