Messages in this thread | | | Date | Fri, 17 Aug 2007 13:08:16 +0200 | From | Michal Schmidt <> | Subject | Re: nanosleep() accuracy |
| |
GolovaSteek wrote: > 2007/8/17, Michal Schmidt <xschmi00@stud.feec.vutbr.cz>: > >> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |