• Daisuke Nishimura's avatar
    memcg: improve performance in moving charge · 854ffa8d
    Daisuke Nishimura authored
    Try to reduce overheads in moving charge by:
    
    - Instead of calling res_counter_uncharge() against the old cgroup in
      __mem_cgroup_move_account() everytime, call res_counter_uncharge() at the end
      of task migration once.
    - removed css_get(&to->css) from __mem_cgroup_move_account() because callers
      should have already called css_get(). And removed css_put(&to->css) too,
      which was called by callers of move_account on success of move_account.
    - Instead of calling __mem_cgroup_try_charge(), i.e. res_counter_charge(),
      repeatedly, call res_counter_charge(PAGE_SIZE * count) in can_attach() if
      possible.
    - Instead of calling css_get()/css_put() repeatedly, make use of coalesce
      __css_get()/__css_put() if possible.
    
    These changes reduces the overhead from 1.7sec to 0.6sec to move charges
    of 1G anonymous memory in my test environment.
    Signed-off-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Acked-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Paul Menage <menage@google.com>
    Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    854ffa8d
memcontrol.c 95.9 KB