problem casovani programu bylo Re: ioperm - program

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Středa Leden 28 23:12:08 CET 2004


On Wed, 28 Jan 2004, Ladislav Vaiz wrote:

> Pouzivejte radeji select misto usleep, chova se lepe (pri 100Hz casovaci
> ceka 10ms, usleep ceka 20ms).

To, proc se usleep() a spol. takhle chova, je to, ze musi byt zaruceno, ze
se ceka *nejmene* zadany interval. Nemusi to byt 20 ms, ale to vzdy
zbytek aktualniho "tiku" plus "tik" nasledujici. Uz se to tady jednou
resilo, takze zajemci si mohou najit detaily v archivu.

select() si s tim tak tezkou hlavu a pro kratke timeouty proste proces spi
do zacatku nasledujiciho "tiku" hodin. Coz muze byt 10 ms (- delta), ale
treba take 5 ms nebo take skoro nic.

Jinak pro intervaly < 2 ms a procesy majici SCHED_FIFO nebo SCHED_RR ceka
sys_nanosleep() (pomoci ktereho je ve skutecnosti ten userspacovy usleep()
implementovany) ve smycce a podava tedy pomerne presne vysledky. Ovsem to
cekani ve smycce blokuje CPU, se vsemi dusledky z toho plynoucimi.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux