• K
    memcg: better migration handling · e8589cc1
    KAMEZAWA Hiroyuki 提交于
    This patch changes page migration under memory controller to use a
    different algorithm.  (thanks to Christoph for new idea.)
    
    Before:
     - page_cgroup is migrated from an old page to a new page.
    After:
     - a new page is accounted , no reuse of page_cgroup.
    
    Pros:
    
     - We can avoid compliated lock depndencies and races in migration.
    
    Cons:
    
     - new param to mem_cgroup_charge_common().
    
     - mem_cgroup_getref() is added for handling ref_cnt ping-pong.
    
    This version simplifies complicated lock dependency in page migraiton
    under memory resource controller.
    
      new refcnt sequence is following.
    
    a mapped page:
      prepage_migration() ..... +1 to NEW page
      try_to_unmap()      ..... all refs to OLD page is gone.
      move_pages()        ..... +1 to NEW page if page cache.
      remap...            ..... all refs from *map* is added to NEW one.
      end_migration()     ..... -1 to New page.
    
      page's mapcount + (page_is_cache) refs are added to NEW one.
    Signed-off-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Cc: Pavel Emelyanov <xemul@openvz.org>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    e8589cc1
memcontrol.c 27.2 KB