While at it you can update the summary ^^ On Tue, Jun 07, 2022 at 14:52:50 +0200, Michal Privoznik wrote: > At least in case of QEMU an IOThread is actually a pool of > threads (see iothread_set_aio_context_params() in QEMU's code > base). As such, it can have minimal and maximal number of worker > threads. Allow setting them in domain XML. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > docs/formatdomain.rst | 5 +- > src/conf/domain_conf.c | 34 ++++++++++- > src/conf/domain_conf.h | 3 + > src/conf/schemas/domaincommon.rng | 10 +++ > .../iothreads-ids-pool-sizes.xml | 61 +++++++++++++++++++ > ...iothreads-ids-pool-sizes.x86_64-latest.xml | 1 + > tests/qemuxml2xmltest.c | 1 + > 7 files changed, 111 insertions(+), 4 deletions(-) > create mode 100644 tests/qemuxml2argvdata/iothreads-ids-pool-sizes.xml > create mode 120000 tests/qemuxml2xmloutdata/iothreads-ids-pool-sizes.x86_64-latest.xml > > diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst > index 312b605a8b..2aa39b2f63 100644 > --- a/docs/formatdomain.rst > +++ b/docs/formatdomain.rst > @@ -675,7 +675,7 @@ host/guest with many LUNs. :since:`Since 1.2.8 (QEMU only)` > <iothread id="2"/> > <iothread id="4"/> > <iothread id="6"/> > - <iothread id="8"/> > + <iothread id="8" thread_pool_min="2" thread_pool_max="32"/> > </iothreadids> > ... > </domain> > @@ -696,6 +696,9 @@ host/guest with many LUNs. :since:`Since 1.2.8 (QEMU only)` > any predefined ``id``. If there are more ``iothreadids`` defined than > ``iothreads`` defined for the domain, then the ``iothreads`` value will be > adjusted accordingly. :since:`Since 1.2.15` > + The element has two optional attributes ``thread_pool_min`` and > + ``hread_pool_max`` which allow setting lower and upper boundary for number 'thread' ^^ > + of worker threads for given IOThread. :since:`Since 8.5.0` [...] > @@ -27607,8 +27620,23 @@ virDomainDefIOThreadsFormat(virBuffer *buf, > return; > > for (i = 0; i < def->niothreadids; i++) { > - virBufferAsprintf(&childrenBuf, "<iothread id='%u'/>\n", > - def->iothreadids[i]->iothread_id); > + virDomainIOThreadIDDef *iothread = def->iothreadids[i]; > + virBuffer attrBuf = VIR_BUFFER_INITIALIZER; Commonly we use 'g_auto(virBuffer)', not a problem here, just a convention. > + > + virBufferAsprintf(&attrBuf, " id='%u'", > + iothread->iothread_id); Reviewed-by: Peter Krempa <pkrempa@xxxxxxxxxx>