kernel: don't cap the minimum sleep time to TK2MS(1) for syssleep()
on HZ 100 systems like pc and pc64, the minium sleep time was 10ms, which is quite high. the cap isnt really needed as arch specific timerset() enforces its own limit, but on a higher resolution. background: from Charles Forsyth: I haven't really got an opinion on it. The 10ms interval was first used on machines that were much slower. I thought someone did set HZ to a bigger value, partly to support better in-kernel timing. I haven't done it because I never had a need for it. If I were doing (say) protocol implementation in user mode, I'd certainly reconsider. Sleep itself forces at best ms granularity, and for some applications that's too big. initial mail from qwx raising the issue: > Hello, > > I found out recently that sleep(2)'s resolution on 386 and 9front's amd64 > kernel is 10 ms rather than 1 ms. The reason is that on those kernels, > HZ is set to 100 rather than say 1000. In syssleep, we get 1 tich every > 10 ms. > > What is unclear is why. > > To paraphrase cinap_lenrek's answer to my question: > > In syssleep: > if(ms < TK2MS(1)) > ms = TK2MS(1); > tsleep(&up->sleep, return0, 0, ms); > > "TK2MS(1)" can be replaced with just "1", and the arch specific > timerset() routine would do its own capping of the period if it's too > small for the timer resolution, and make better decisions based on what > the minimum timer period should be given the latency overhead of the > given arch's interrupt handling and performance characteristics. > > Alternatively, HZ could be raised to 500 or 1000. > > It seems it's just trying to prevent excessive context switches and > interrupts, but it seems somewhat arbitrary. A ton of syscalls can be > done in 1 ms, and it's the lowest we can go without changing the unit. > > > What do you think? > > Thanks in advance, > > qwx
This commit is contained in:
parent
ce9d09a965
commit
eed90aa0ad
1 changed files with 0 additions and 2 deletions
|
@ -602,8 +602,6 @@ syssleep(va_list list)
|
|||
else
|
||||
yield();
|
||||
} else {
|
||||
if(ms < TK2MS(1))
|
||||
ms = TK2MS(1);
|
||||
tsleep(&up->sleep, return0, 0, ms);
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue