Re: Incorrect behavior of timer_settime() for absolute dates in the past

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

 



On Mon, 27 Nov 2006 15:32:21 +0100
John <[email protected]> wrote:

> 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?
> 

It hasn't been forgotten about.

This problem, plus the dynticks-makes-us-disable-the-TSC problem, plus
[email protected]'s-synaptics driver are all (IMO)
blocking a merge.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux