Il 23/08/2012 14:10, Jan Kiszka ha scritto:
>> Can you expand on this?
> 
> Well, this patch removes an indirection from timer event deliveries. So
> it reduces overhead, though only noticeable if you have high-rate timers.

Actually, timers (and bottom halves) are always run after iohandlers.
So the qemu_notify_event should already be completely useless for Unix,
even if we leave the host_alarm_handler indirection.

But this leaves out Windows, where your next task of (IIUC) having
multiple instances of struct qemu_alarm_timer would be complicated by
the qemu_notify_event.  I guess this is the original reason for your patch.

So, in order to remove the qemu_notify_event completely, what about not
using signals anymore for timers?  You could just tweak the select
timeout and drop all the -clock madness.  Zero syscalls, practically no
overhead.  If this is not precise enough, use timerfd on Linux only
(BTW, switching to an absolute deadline would be useful too).

>> The Win32 bits look fine, but it's a bit scary to make the Unix and
>> Win32 paths so different.  It works well until we have a BQL for timers,
>> but would this complicate shrinking the scope of the BQL?
> 
> Nope, not yet. We continue to hold the BQL across qemu_run_all_timers.
> Under Unix, this happens as qemu_iohandler_poll->sigfd_handler->
> host_alarm_handler runs under BQL, under win32 due to explicit locking.
> The plan is to only pull specifically marked alarm timers out of this
> standard path, in the future.

Ok, thanks for clarifying.

Paolo

Reply via email to