qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] qemu-clock: add an alarm timer based on timerfd


From: Peter Portante
Subject: Re: [Qemu-devel] [PATCH] qemu-clock: add an alarm timer based on timerfd
Date: Thu, 20 Sep 2012 01:51:31 -0400

On Wed, Sep 19, 2012 at 10:27 AM, Jan Kiszka <address@hidden> wrote:
> Please turn of HTML in you mailer. It's very hard to parse your reply.
>
> On 2012-09-19 16:15, Peter Portante wrote:
>> On Wed, Sep 19, 2012 at 3:44 AM, Jan Kiszka 
>> <address@hidden<mailto:address@hidden>> wrote:
>> On 2012-09-19 09:26, Paolo Bonzini wrote:
>>> Il 18/09/2012 22:37, Anthony Liguori ha scritto:
>>>> Unfortunately, there's a lot of Windows code in qemu-timer.c and 
>>>> main-loop.c
>>>> right now otherwise the refactoring would be trivial.  I'll leave that for
>>>> another day.
>>>>
>>>> Cc: Paolo Bonzini <address@hidden<mailto:address@hidden>>
>>>> Cc: Jan Kiszka <address@hidden<mailto:address@hidden>>
>>>> Signed-off-by: Anthony Liguori <address@hidden<mailto:address@hidden>>
>>>> ---
>>>> Please note, this is lightly tested.  Since this is such a fundamental 
>>>> change,
>>>> I'd like to do some performance analysis before committing but wanted to 
>>>> share
>>>> early.
>>>
>>> Looks good.  I think Peter Portante tested something similar, and found no 
>>> big
>>> difference between the two.  But it's a good thing and, in my opinion, for
>>> non-timerfd OSes we should simply adjust the select() timeout and not bother
>>> with signals.
>>
>> What would be the advantage of timerfd over select? On Linux, both use
>> hrtimers (and low slack for RT processes).
>>
>> I am not sure the comparison is timerfd v. select, but timerfd v signal 
>> based timer (setitimer). The timerfd path allows you to integrate with 
>> select/poll/epoll loops, where as signal based timers make that more 
>> difficult. One can do the same thing with signalfd, but only for one signal, 
>> where as you can setup multiple timers at the expense of file descriptors.
>>
>> Additionally, FWIW, select() has a resolution capped by its use of struct 
>> timeval, which is microseconds, where timerfd_settime allows for nanosecond 
>> resolution.
>
> < 1us resolution is pointless, even on RT-hardened kernels with fast
> hardware underneath and when running natively.

Perhaps.

Under Linux, we have been unable to demonstrate sub-50us resolution
for timeouts outside of RT scheduling classes. We have been able to
get around 1us resolution using SCHED_RR or SCHED_FIFO.

However, if native clocks return timer values at nanosecond
resolution, why would you not want to maintain those units to avoid
rounding errors or simple logic errors during conversions? Not sure
how pointless all the work has been to create software APIs and
hardware interfaces that use nanosecond resolution.

>>
>> I'm starting to like the
>> select/WaitForMultipleObjects pattern as it would allow to consolidate
>> over basically two versions of timers and simplify the code.
>>
>> With timerfd, signalfd and eventfd, Linux seems to have provided all the 
>> coverage needed to make that happen.
>
> The advantage is that timers based on select/poll timeouts will allow to
> unify a lot of code for _all_ host platforms, i.e. even Windows. We
> still need to evaluate the precise impact and look for potentially
> missed limitations (aka: someone has to write patches and test them).
> But if there are no relevant ones, it should be the better architecture.
>
> That said, a timerfd based solution for Linux may be an intermediate
> step of the select-based work takes longer.
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
> Corporate Competence Center Embedded Linux



reply via email to

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