• KAMEZAWA Hiroyuki's avatar
    memcg: add lock to synchronize page accounting and migration · dbd4ea78
    KAMEZAWA Hiroyuki authored
    Introduce a new bit spin lock, PCG_MOVE_LOCK, to synchronize the page
    accounting and migration code.  This reworks the locking scheme of
    _update_stat() and _move_account() by adding new lock bit PCG_MOVE_LOCK,
    which is always taken under IRQ disable.
    
    1. If pages are being migrated from a memcg, then updates to that
       memcg page statistics are protected by grabbing PCG_MOVE_LOCK using
       move_lock_page_cgroup().  In an upcoming commit, memcg dirty page
       accounting will be updating memcg page accounting (specifically: num
       writeback pages) from IRQ context (softirq).  Avoid a deadlocking
       nested spin lock attempt by disabling irq on the local processor when
       grabbing the PCG_MOVE_LOCK.
    
    2. lock for update_page_stat is used only for avoiding race with
       move_account().  So, IRQ awareness of lock_page_cgroup() itself is not
       a problem.  The problem is between mem_cgroup_update_page_stat() and
       mem_cgroup_move_account_page().
    
    Trade-off:
      * Changing lock_page_cgroup() to always disable IRQ (or
        local_bh) has some impacts on performance and I think
        it's bad to disable IRQ when it's not necessary.
      * adding a new lock makes move_account() slower.  Score is
        here.
    
    Performance Impact: moving a 8G anon process.
    
    Before:
    	real    0m0.792s
    	user    0m0.000s
    	sys     0m0.780s
    
    After:
    	real    0m0.854s
    	user    0m0.000s
    	sys     0m0.842s
    
    This score is bad but planned patches for optimization can reduce
    this impact.
    Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: default avatarGreg Thelen <gthelen@google.com>
    Reviewed-by: default avatarMinchan Kim <minchan.kim@gmail.com>
    Acked-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Cc: Andrea Righi <arighi@develer.com>
    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dbd4ea78
memcontrol.c 128 KB