Re: What is the precision of usleep ?

george anzinger (george@mvista.com)
Sun, 22 Apr 2001 03:47:40 -0700


Marcus Ramos wrote:
>
> Hello,
>
> I am using usleep in an application under RH7 kernel 2.4.2. However,
> when I bring its argument down to 20 miliseconds (20.000 microseconds)
> or less, this seems to be ignored by the function (or the machine's hw
> timer), which behaves as if 20 ms where its lowest acceptable value. How
> can I measure the precision of usleep in my box ? I am currently using
> an Dell GX110 PIII 866 MHz.
>
> Thanks in advance.
> Marcus.

Well, first, your issue is resolution, not precision. Current
resolution on most all timers is 1/HZ. So this should get a min.
nanosleep of 10 ms.

So, could someone explain this line from sys_nanosleep() (
kernel/timer.c):

expire = timespec_to_jiffies(&t) + (t.tv_sec || t.tv_nsec);

It seems to me this should just be:

expire = timespec_to_jiffies(&t)

timespec_to_jiffies(&t) seems to do all the needed resolution round up
and such. Since || is logical, this seems to always add 1, except if
the requested value is 0. The net result is you always get 1 extra
jiffie (unless you ask for zero, in which case you get a timer that will
expire next tick (thru the wonders of add_timer).

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