• D
    mm: add dirty_background_bytes and dirty_bytes sysctls · 2da02997
    David Rientjes 提交于
    This change introduces two new sysctls to /proc/sys/vm:
    dirty_background_bytes and dirty_bytes.
    
    dirty_background_bytes is the counterpart to dirty_background_ratio and
    dirty_bytes is the counterpart to dirty_ratio.
    
    With growing memory capacities of individual machines, it's no longer
    sufficient to specify dirty thresholds as a percentage of the amount of
    dirtyable memory over the entire system.
    
    dirty_background_bytes and dirty_bytes specify quantities of memory, in
    bytes, that represent the dirty limits for the entire system.  If either
    of these values is set, its value represents the amount of dirty memory
    that is needed to commence either background or direct writeback.
    
    When a `bytes' or `ratio' file is written, its counterpart becomes a
    function of the written value.  For example, if dirty_bytes is written to
    be 8096, 8K of memory is required to commence direct writeback.
    dirty_ratio is then functionally equivalent to 8K / the amount of
    dirtyable memory:
    
    	dirtyable_memory = free pages + mapped pages + file cache
    
    	dirty_background_bytes = dirty_background_ratio * dirtyable_memory
    		-or-
    	dirty_background_ratio = dirty_background_bytes / dirtyable_memory
    
    		AND
    
    	dirty_bytes = dirty_ratio * dirtyable_memory
    		-or-
    	dirty_ratio = dirty_bytes / dirtyable_memory
    
    Only one of dirty_background_bytes and dirty_background_ratio may be
    specified at a time, and only one of dirty_bytes and dirty_ratio may be
    specified.  When one sysctl is written, the other appears as 0 when read.
    
    The `bytes' files operate on a page size granularity since dirty limits
    are compared with ZVC values, which are in page units.
    
    Prior to this change, the minimum dirty_ratio was 5 as implemented by
    get_dirty_limits() although /proc/sys/vm/dirty_ratio would show any user
    written value between 0 and 100.  This restriction is maintained, but
    dirty_bytes has a lower limit of only one page.
    
    Also prior to this change, the dirty_background_ratio could not equal or
    exceed dirty_ratio.  This restriction is maintained in addition to
    restricting dirty_background_bytes.  If either background threshold equals
    or exceeds that of the dirty threshold, it is implicitly set to half the
    dirty threshold.
    Acked-by: NPeter Zijlstra <peterz@infradead.org>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Signed-off-by: NDavid Rientjes <rientjes@google.com>
    Cc: Andrea Righi <righi.andrea@gmail.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    2da02997
sysctl.c 72.2 KB