qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Using aio_poll for timer carrier threads


From: Paolo Bonzini
Subject: Re: [Qemu-devel] Using aio_poll for timer carrier threads
Date: Tue, 13 Aug 2013 16:45:18 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7

Il 13/08/2013 09:56, Jan Kiszka ha scritto:
> Hi Stefan,
> 
> in the attempt to use Alex' ppoll-based timer rework for decoupled,
> real-time capable timer device models I'm now scratching my head over
> the aio_poll interface. I'm looking at dataplane/virtio-blk.c, just finding
> 
> static void *data_plane_thread(void *opaque)
> {
>     VirtIOBlockDataPlane *s = opaque;
> 
>     do {
>         aio_poll(s->ctx, true);
>     } while (!s->stopping || s->num_reqs > 0);
>     return NULL;
> }
> 
> wondering where the locking is. Or doesn't this use need any at all? Are
> all data structures that this thread accesses exclusively used by it, or
> are they all accessed in a lock-less way?

There is some locking in aio_bh_poll.  It is pretty lightweight because
adding elements and deleting them is done under a lock, while the list
is walked without taking it (because deletion is only done by the thread
that walks).  We could do something similar for file descriptors; timers
are more complicated because insertions happen for every mod_timer.

Using an AioContext lock for timers is somewhat complicated for lock
ordering, because context A could try to modify a timer from context B,
at the same time when context B is modifying a timer from context A.
This would cause a deadlock.  So I agree with Stefan's usage of a
finer-grain lock for timer lists.

Paolo



reply via email to

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