• A
    make swappiness safer to use · 4106f83a
    Andrea Arcangeli 提交于
    Swappiness isn't a safe sysctl.  Setting it to 0 for example can hang a
    system.  That's a corner case but even setting it to 10 or lower can waste
    enormous amounts of cpu without making much progress.  We've customers who
    wants to use swappiness but they can't because of the current
    implementation (if you change it so the system stops swapping it really
    stops swapping and nothing works sane anymore if you really had to swap
    something to make progress).
    
    This patch from Kurt Garloff makes swappiness safer to use (no more huge
    cpu usage or hangs with low swappiness values).
    
    I think the prev_priority can also be nuked since it wastes 4 bytes per
    zone (that would be an incremental patch but I wait the nr_scan_[in]active
    to be nuked first for similar reasons).  Clearly somebody at some point
    noticed how broken that thing was and they had to add min(priority,
    prev_priority) to give it some reliability, but they didn't go the last
    mile to nuke prev_priority too.  Calculating distress only in function of
    not-racy priority is correct and sure more than enough without having to
    add randomness into the equation.
    
    Patch is tested on older kernels but it compiles and it's quite simple
    so...
    
    Overall I'm not very satisified by the swappiness tweak, since it doesn't
    rally do anything with the dirty pagecache that may be inactive.  We need
    another kind of tweak that controls the inactive scan and tunes the
    can_writepage feature (not yet in mainline despite having submitted it a
    few times), not only the active one.  That new tweak will tell the kernel
    how hard to scan the inactive list for pure clean pagecache (something the
    mainline kernel isn't capable of yet).  We already have that feature
    working in all our enterprise kernels with the default reasonable tune, or
    they can't even run a readonly backup with tar without triggering huge
    write I/O.  I think it should be available also in mainline later.
    
    Cc: Nick Piggin <npiggin@suse.de>
    Signed-off-by: NKurt Garloff <garloff@suse.de>
    Signed-off-by: NAndrea Arcangeli <andrea@suse.de>
    Signed-off-by: NFengguang Wu <wfg@mail.ustc.edu.cn>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4106f83a
vmscan.c 53.0 KB