DragonFly BSD
DragonFly kernel List (threaded) for 2010-05
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: VM idle page zeroing

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Mon, 17 May 2010 08:53:02 -0700 (PDT)

: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 
:worth it?

    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
    should occur).

: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
    it does.

: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?
:-- vs

    No, this isn't necessary.  Nobody is going to notice a few microseconds
    during the boot sequence.


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]