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(a)redhat.com>
>> ---
>> 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