I have no idea what HZ is used on my kernel, but i think
i understand the problem now.
I still can reproduce it with this:
double t, ct, ts;
ct = nsec()*1e-6;
t = ct + msec;
for(;;){
ts = t - ct;
sleep(ts);
ct = nsec()*1e-6;
if(t <= ct){
t += msec;
}
}
The problem is that when sleep is a little bit too fast on every round,
t will never catch up with ct. so it sleeps shorter and shorter until
t - ct < 1.
It all works when changing t += msec to t = ct + msec. It may still
do a zero sleep, but the error will not add up.
making new kernel...
--
cinap
--- Begin Message ---
what is your HZ set at? after chasing a few bugs like this,
i've set HZ=1000. actually i first saw the idea in sam hopins'
work there's no performance drag and 1 ms
sleeps do actually sleep.
- erik
--- End Message ---