Re: nanosleep() accuracy

From: Michal Schmidt
Date: Fri Aug 17 2007 - 07:08:56 EST


GolovaSteek wrote:
> 2007/8/17, Michal Schmidt <xschmi00@xxxxxxxxxxxxxxxxxx>:
>
>> GolovaSteek skrev:
>>
>>> Hello!
>>> I need use sleep with accurat timing.
>>> I use 2.6.21 with rt-prempt patch.
>>> with enabled rt_preempt, dyn_ticks, and local_apic
>>> But
>>>
>>> req.tv_nsec = 300000;
>>> req.tv_sec = 0;
>>> nanosleep(&req,NULL)
>>>
>>> make pause around 310-330 microseconds.
>>>
>> How do you measure this?
>> If you want to have something done every 300 microseconds, you must not
>> sleep for 300 microseconds in each iteration, because you'd accumulate
>> errors. Use a periodic timer or use the current time to compute how long
>> to sleep in each iteration. Take a look how cyclictest does it.
>>
>
> no. I just want my programm go to sleep sometimes and wake up in correct time.
>

What does your program do that it has such a strict requirement on the
exact length of sleeping?

>>> I tried to understend how work nanosleep(), but it not depends from
>>> jiffies and from smp_apic_timer_interrupt.
>>>
>>> When can accuracy be lost?
>>> And how are process waked up?
>>>
>>>
>>> GolovaSteek
>>>
>> Don't forget the process will always have non-zero wakeup latency. It
>> takes some time to process an interrupt, wakeup the process and schedule
>> it to run on the CPU. 10-30 microseconds is not unreasonable.
>>
>
> But 20000 operations can be done in 10 microseconds?
> and why is there that inconstancy? Why sametimes 10 and sometimes 30?
> In which points of implementation it happens?
>
> GolovaSteek
>

If a jitter of 20 microseconds is unacceptable for your application,
don't use PC hardware. Consider using a microcontroller.

Michal

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