• KAMEZAWA Hiroyuki's avatar
    memcg: handle swap caches · d13d1443
    KAMEZAWA Hiroyuki authored
    SwapCache support for memory resource controller (memcg)
    
    Before mem+swap controller, memcg itself should handle SwapCache in proper
    way.  This is cut-out from it.
    
    In current memcg, SwapCache is just leaked and the user can create tons of
    SwapCache.  This is a leak of account and should be handled.
    
    SwapCache accounting is done as following.
    
      charge (anon)
    	- charged when it's mapped.
    	  (because of readahead, charge at add_to_swap_cache() is not sane)
      uncharge (anon)
    	- uncharged when it's dropped from swapcache and fully unmapped.
    	  means it's not uncharged at unmap.
    	  Note: delete from swap cache at swap-in is done after rmap information
    	        is established.
      charge (shmem)
    	- charged at swap-in. this prevents charge at add_to_page_cache().
    
      uncharge (shmem)
    	- uncharged when it's dropped from swapcache and not on shmem's
    	  radix-tree.
    
      at migration, check against 'old page' is modified to handle shmem.
    
    Comparing to the old version discussed (and caused troubles), we have
    advantages of
      - PCG_USED bit.
      - simple migrating handling.
    
    So, situation is much easier than several months ago, maybe.
    
    [hugh@veritas.com: memcg: handle swap caches build fix]
    Reviewed-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Tested-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Cc: Pavel Emelyanov <xemul@openvz.org>
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d13d1443
swap_state.c 10 KB