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.
