DragonFly kernel List (threaded) for 2010-05
Re: VM idle page zeroing
:Attached is a patch that changes a few things:
:1) Removes the CVS ID; that was vestigial, I forgot I'd included that.
:2) Rename idlezero_count back to cnt_prezero; this is because this is the
:original name (in FreeBSD and in DragonFly). I don't feel strongly about
:this at all - is it reasonable to try to match up sysctl names or not
Since it isn't part of the primary vmstats structure, no. It's better
to keep it categorized with the other idlezero sysctls.
:3) Change vm_page_zero_check() to return the reason that the check failed.
Well, I think a better solution here would be to just do a separate
check to calculate the tsleep time and not try to build it into
vm_page_zero_check(). Or, alternatively, have vm_page_zero_check()
return the tsleep time (where a value of 0 indicates that page zeroing
:4) In vm_pagezero(), switch tsleep to sleep for a variable amount of time;
:by default it is still hz/10, now called DEFAULT_SLEEP_TIME. If
:vm_page_zero_check() failed because zeroing was either disabled or because
:we hit the ZIDLE_HI limit, mark ourselves to sleep for a long time
:(hz*10). If we are lower than the upper limit by higher than the low
:limit, or we are below the low limit, restore the sleep time.
The concept is fine. The implementation is a bit complex for what
:5) Set zero_state when we hit the high mark and clear when we fall below
:the low mark; this restores the hysteresis formerly present.
Yes, I noticed the hysteresis seemed to be off. Instead of using
a separate variable here you can integrate the hysteresis state into
the primary state. e.g. STATE_IDLE_LO, STATE_IDLE_HI.
:Other thoughts - before we enter the mainloop, perhaps a sleep without a
:timeout, if idlezero_enable = 0? Then the enable/disable sysctl could be a
:SYSCTL_PROC which wakes it up; this would minimize the (admittedly tiny)
:load on systems on which it is disabled.
:Thoughts on any of this?
No, this isn't necessary. Nobody is going to notice a few microseconds
during the boot sequence.