On 6/6/22 13:40, Daniel P. Berrangé wrote: > On Thu, Jun 02, 2022 at 01:54:39PM +0200, Peter Krempa wrote: >> On Thu, Jun 02, 2022 at 09:18:04 +0200, Michal Privoznik wrote: >>> As of v7.0.0-877-g70ac26b9e5 QEMU exposes its main event loop as >>> an QMP object. In the very next commit (v7.0.0-878-g71ad4713cc) >>> it was extended for thread-pool-min and thread-pool-max >>> attributes. Expose them under new <mainloop/> element. >>> >>> Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> >>> --- >>> docs/formatdomain.rst | 5 ++ >>> src/conf/domain_conf.c | 57 +++++++++++++++++++ >>> src/conf/domain_conf.h | 8 +++ >>> src/conf/schemas/domaincommon.rng | 15 +++++ >>> src/conf/virconftypes.h | 2 + >>> .../iothreads-ids-pool-sizes.xml | 1 + >>> 6 files changed, 88 insertions(+) >>> >>> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst >>> index de085f616a..5e0019c574 100644 >>> --- a/docs/formatdomain.rst >>> +++ b/docs/formatdomain.rst >> >> [...] >> >>> @@ -699,6 +700,10 @@ host/guest with many LUNs. :since:`Since 1.2.8 (QEMU only)` >>> The element has two optional attributes ``pool_min`` and ``pool_max`` which >>> allow setting lower and upper boundary for number of worker threads for >>> given IOThread. :since:`Since 8.4.0` >>> +``mainloop`` >>> + The optional ``mainloop`` element contains two optional attributes >>> + ``pool_min`` and ``pool_max`` which allow setting lower and upper boundary >>> + for number of worker threads for the main event loop. :since:`Since 8.4.0` >> >> I don't think we should use the qemu term "main loop" here. In general >> we refer to the qemu process as emulator, including stuff like >> emulatorpin and similar. > > It isn't even especially part of the QEMU main loop IIUC. > > Rather it is setting up a pool of threads that are used > for serving I/O, when no specific I/O thread is configurd > for the guest. > > Perhaps it can be '<defaultiothread/>' or something along > those lines, to make it clear it is an I/O related tunable. Right, I'd rather avoid putting it as an attribute to <emulator/> since we have a whole section dedicated to performance tuning. Not to mention <emulator/> lives under <devices/> and I don't think we put performance related knobs there. I didn't object to Peter's suggestion because I don't have better idea. So are you suggesting that <defaultiothread/> would be at the same level as <iothreads/> and <iothreadids/> or it would be nested somewhere? <domain> <name/> <iothreads>4</iothreads> <iothreadids> <iothread id="1" thread_pool_min="2" thread_pool_max="8"/> <iothread id="2"/> <iothreadids> <defaultiothread thread_pool_min="8" thread_pool_max="8"/> <devices/> </domain> This looks relatively nice. Michal