• Andrew Morton's avatar
    [PATCH] laptop mode · 93d33a48
    Andrew Morton authored
    From: Bart Samwel <bart@samwel.tk>
    
    Adds /proc/sys/vm/laptop-mode: a special knob which says "this is a laptop".
    In this mode the kernel will attempt to avoid spinning disks up.
    
    Algorithm: the idea is to hold dirty data in memory for a long time, but to
    flush everything which has been accumulated if the disk happens to spin up
    for other reasons.
    
    - Whenever a disk request completes (read or write), schedule a timer a few
      seconds hence.  If the timer was already pending, reset it to a few seconds
      hence.
    
    - When the timer expires, write back the whole world.  We use
      sync_filesystems() for this because it will force ext3 journal commits as
      well.
    
    - In balance_dirty_pages(), kick off background writeback when we hit the
      high threshold (dirty_ratio), not when we hit the low threshold.  This has
      the effect of causing "lumpy" writeback which is something I spent a year
      fixing, but in laptop mode, it is desirable.
    
    - In try_to_free_pages(), only kick pdflush if the VM is getting into
      distress: we want to keep scanning for clean pages, deferring writeback.
    
    - In page reclaim, avoid writing back the odd random dirty page off the
      LRU: only start I/O if the scanning is working harder.
    
    The effect is to perform a sync() a few seconds after all I/O has ceased.
    
    The value which was written into /proc/sys/vm/laptop-mode determines, in
    seconds, the delay between the final I/O and the flush.
    
    Additionally, the patch adds tools which help answer the question "why the
    heck does my disk spin up all the time?".  The user may set
    /proc/sys/vm/block_dump to a non-zero value and the kernel will print out
    information which will identify the process which is performing disk reads or
    which is dirtying pagecache.
    
    The user should probably disable syslogd before setting block-dump.
    93d33a48
page-writeback.c 20.5 KB