qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] posix-aio-compat: fix latency issues


From: Avi Kivity
Subject: Re: [Qemu-devel] [PATCH] posix-aio-compat: fix latency issues
Date: Mon, 08 Aug 2011 15:54:43 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20110707 Thunderbird/5.0

On 08/08/2011 03:49 PM, Frediano Ziglio wrote:
2011/8/8 Avi Kivity<address@hidden>:
>  In certain circumstances, posix-aio-compat can incur a lot of latency:
>    - threads are created by vcpu threads, so if vcpu affinity is set,
>     aio threads inherit vcpu affinity.  This can cause many aio threads
>     to compete for one cpu.
>    - we can create up to max_threads (64) aio threads in one go; since a
>     pthread_create can take around 30μs, we have up to 2ms of cpu time
>     under a global lock.
>
>  Fix by:
>    - moving thread creation to the main thread, so we inherit the main
>     thread's affinity instead of the vcpu thread's affinity.
>    - if a thread is currently being created, and we need to create yet
>     another thread, let thread being born create the new thread, reducing
>     the amount of time we spend under the main thread.
>    - drop the local lock while creating a thread (we may still hold the
>     global mutex, though)
>
>  Note this doesn't eliminate latency completely; scheduler artifacts or
>  lack of host cpu resources can still cause it.  We may want pre-allocated
>  threads when this cannot be tolerated.
>
>  Thanks to Uli Obergfell of Red Hat for his excellent analysis and 
suggestions.
>
>  Signed-off-by: Avi Kivity<address@hidden>

Why not calling pthread_attr_setaffinity_np (where available) before
thread creation or shed_setaffinity at thread start instead of telling
another thread to create a thread for us just to get affinity cleared?


The entire qemu process may be affined to a subset of the host cpus; we don't want to break that.

For example:

   taskset 0xf0 qemu ....
   (qemu) info cpus
<pin individual vcpu threads to host cpus>


--
error compiling committee.c: too many arguments to function




reply via email to

[Prev in Thread] Current Thread [Next in Thread]