[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
Re: [Qemu-devel] Using aio_poll for timer carrier threads,
Paolo Bonzini <=