Dr. Adrian Botescu-Fianu wrote:
> Linuxul meu Slack 10.0 pe un Sempron la 2800, 512MB RAM si kernel 2.4.29 Nu 
> are de loc precizie la folosirea nanosleep() din C. Daca dau prioritate 
> maxima procesului pauza este in sfarsit cea pe care o doresc dar apar alte 
> belele. Sistemul devine neutilizabil pe toata perioada rularii programului.Am 
> compilat 2.6.13 si daca ii dau prioritate maxima procesului in loc de 2ms 
> doarme in jur de 8 dar constant, fara ca sistemul sa se blocheze, dar tot nu 
> ma ajuta cu nimic
 >
> Pe un Athlon XP 2400 parca, tot cu slack dar cu kernel 2.6.0 recompilat din 
> surse se mai apropie de pauza pe care o vreau de 2milisecunde dar variaza 
> totusi ajungand si la 4ms. 
> 
> Chiar nu pot face in nici un fel sa obtin o precizie buna pt un sleep de 2 
> milisecunde? Exista o solutie mai buna decat cea aplicata? Cum de s-a putut 
> face asa ceva in dos acum 12 ani si in C sub Linux nu se poate?

rezolutia nanosleep() depinde de frecventa PIT (pe 2.4 era 100Hz, pe 2.6 
mai vechi era 1000Hz acum e configurabil - 100/250/1000Hz).

ceea ce vrei tu se cheama (soft) real-time si te-ar putea ajuta:

- un 2.6.13 cu HZ=1000 (default e 250, probabil de acolo si rezultatele 
tale ceva mai bune) + CONFIG_PREEMPT_RT (vezi si 
http://www.kerneltraffic.org/kernel-traffic/kt20050828_319.html#9 pentru 
detalii)

- un RTAI (http://www.rtai.org/) <- daca esti suparat pe viata si vrei 
hard real-time

ceva mai multe sanse ai avea sa implementezi toata tarasenia aia cu un 
timer in kernel care pentru HZ=1000 ti-ar oferi o rezolutie mult mai 
apropiata de teoreticul 1ms.

Raspunde prin e-mail lui