• David Rientjes's avatar
    smaps: add clear_refs file to clear reference · b813e931
    David Rientjes authored
    Adds /proc/pid/clear_refs.  When any non-zero number is written to this file,
    pte_mkold() and ClearPageReferenced() is called for each pte and its
    corresponding page, respectively, in that task's VMAs.  This file is only
    writable by the user who owns the task.
    
    It is now possible to measure _approximately_ how much memory a task is using
    by clearing the reference bits with
    
    	echo 1 > /proc/pid/clear_refs
    
    and checking the reference count for each VMA from the /proc/pid/smaps output
    at a measured time interval.  For example, to observe the approximate change
    in memory footprint for a task, write a script that clears the references
    (echo 1 > /proc/pid/clear_refs), sleeps, and then greps for Pgs_Referenced and
    extracts the size in kB.  Add the sizes for each VMA together for the total
    referenced footprint.  Moments later, repeat the process and observe the
    difference.
    
    For example, using an efficient Mozilla:
    
    	accumulated time		referenced memory
    	----------------		-----------------
    		 0 s				 408 kB
    		 1 s				 408 kB
    		 2 s				 556 kB
    		 3 s				1028 kB
    		 4 s				 872 kB
    		 5 s				1956 kB
    		 6 s				 416 kB
    		 7 s				1560 kB
    		 8 s				2336 kB
    		 9 s				1044 kB
    		10 s				 416 kB
    
    This is a valuable tool to get an approximate measurement of the memory
    footprint for a task.
    
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Paul Mundt <lethal@linux-sh.org>
    Cc: Christoph Lameter <clameter@sgi.com>
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    [akpm@linux-foundation.org: build fixes]
    [mpm@selenic.com: rename for_each_pmd]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b813e931
base.c 57.1 KB