From: John <me@privacy.net>
To: linux-kernel@vger.kernel.org
Cc: tglx@timesys.com, mingo@elte.hu, johnstul@us.ibm.com
Subject: Re: Incorrect behavior of timer_settime() for absolute dates in the past
Date: Mon, 27 Nov 2006 15:32:21 +0100 [thread overview]
Message-ID: <456AF6F5.7050201@privacy.net> (raw)
In-Reply-To: <455D7CDD.9000202@privacy.net>
John wrote:
> I'm playing with the POSIX timers API. My platform is x86 running Linux
> 2.6.18.1 patched with the high-resolution timer subsystem.
>
> http://www.tglx.de/hrtimers.html
>
> I'm seeing unexpected behavior from timer_settime().
>
> int timer_settime(timer_t timerid, int flags,
> const struct itimerspec *value, struct itimerspec *ovalue);
>
> timer_settime() is used to arm a timer. If the TIMER_ABSTIME flag is
> set, then the timer should fire when the appropriate clock reaches the
> date specified by value. If that date is in the past, the timer should
> fire immediately.
>
> The Open Group Base Specifications Issue 6 states:
> http://www.opengroup.org/onlinepubs/009695399/functions/timer_getoverrun.html
>
>
> "If the flag TIMER_ABSTIME is set in the argument flags, timer_settime()
> shall behave as if the time until next expiration is set to be equal to
> the difference between the absolute time specified by the it_value
> member of value and the current value of the clock associated with
> timerid. That is, the timer shall expire when the clock reaches the
> value specified by the it_value member of value. If the specified time
> has already passed, the function shall succeed and the expiration
> notification shall be made."
>
> In my tests, when timer_settime() is called with an expiration date in
> the past, the timer still takes some time to fire.
>
> Here's a run-down of the code provided as an attachment:
>
> I switch to a SCHED_RR scheduling policy. In other words, whenever my
> process wants the CPU, it gets it. (No other SCHED_RR or SCHED_FIFO
> processes on the system.) I mask the signal that will be delivered on
> timer expiration. I then arm a timer with an expiration date in the
> past, check whether the signal is pending, and block waiting for the
> signal. I then print how long I've had to wait.
>
> # ./a.out
> RESOLUTION=1 ns
> NOW=969.735545919
> SLEEPING 1 SECOND...
> NOW=970.735581398
> NOW=970.735613525
> NOW=970.735749017
> nsdiff=135492 ns i.e. 135.5 µs
>
> Any ideas?
Is there a better forum to discuss this matter?
Regards.
next prev parent reply other threads:[~2006-11-27 14:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-17 9:11 Incorrect behavior of timer_settime() for absolute dates in the past John
2006-11-27 14:32 ` John [this message]
2006-11-28 2:09 ` Andrew Morton
2006-11-30 13:26 ` Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=456AF6F5.7050201@privacy.net \
--to=me@privacy.net \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@timesys.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.