qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH] [RFC] aio/async: Add timed bottom-halves
Date: Mon, 15 Jul 2013 16:25:01 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6

Il 06/07/2013 18:24, Alex Bligh ha scritto:
> Add timed bottom halves. A timed bottom half is a bottom half that
> will not execute until a given time has passed (qemu_bh_schedule_at)
> or a given interval has passed (qemu_bh_schedule_in).

... and may be delayed arbitrarily past that given interval if you are
running in qemu-img or in other synchronous I/O APIs.  I'm especially
worried that this will not have any effect if bdrv_aio_cancel is calling
qemu_aio_wait.  bdrv_aio_cancel is presumably one place where you want
timeout/reconnect functionality to trigger.

I would really prefer to have a TimeEventNotifier or something like
that, which is API-compatibile with EventNotifier (so you can use the
regular aio-*.c APIs) but triggers when a given time has passed.
Basically an "heavyweight" QEMUTimer; that would be a timerfd on Linux,
and a queue timer on Windows.  No idea on other POSIX systems,
unfortunately.

Even better would be to remove the whole timer stuff (POSIX timers,
setitimer, and the Win32 equivalents), and just make the timers use a
shorter timeout for the main loop.  If you do this, I suspect adding
timer support to AioContext would be much simpler.

BTW, note that qemu-nbd (and qemu-io too) does call timers.

Paolo

> Any qemu
> clock can be used, and times are specified in nanoseconds.
> 
> Timed bottom halves can be used where timers cannot. For instance,
> in block drivers where there is no mainloop that calls timers
> (qemu-nbd, qemu-img), or where (per address@hidden) the
> aio code loops internally and thus timers never get called.
> 
> Signed-off-by: Alex Bligh <address@hidden>




reply via email to

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