• KAMEZAWA Hiroyuki's avatar
    memcg: some modification to softlimit under hierarchical memory reclaim. · 4e649152
    KAMEZAWA Hiroyuki authored
    This patch clean up/fixes for memcg's uncharge soft limit path.
      Now, res_counter_charge()/uncharge() handles softlimit information at
      charge/uncharge and softlimit-check is done when event counter per memcg
      goes over limit. Now, event counter per memcg is updated only when
      memory usage is over soft limit. Here, considering hierarchical memcg
      management, ancesotors should be taken care of.
      Now, ancerstors(hierarchy) are handled in charge() but not in uncharge().
      This is not good.
      1. memcg's event counter incremented only when softlimit hits. That's bad.
         It makes event counter hard to be reused for other purpose.
      2. At uncharge, only the lowest level rescounter is handled. This is bug.
         Because ancesotor's event counter is not incremented, children should
         take care of them.
      3. res_counter_uncharge()'s 3rd argument is NULL in most case.
         ops under res_counter->lock should be small. No "if" sentense is better.
      * Removed soft_limit_xx poitner and checks in charge and uncharge.
        Do-check-only-when-necessary scheme works enough well without them.
      * make event-counter of memcg incremented at every charge/uncharge.
        (per-cpu area will be accessed soon anyway)
      * All ancestors are checked at soft-limit-check. This is necessary because
        ancesotor's event counter may never be modified. Then, they should be
        checked at the same time.
    Reviewed-by: default avatarDaisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Paul Menage <menage@google.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Balbir Singh <balbir@in.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
res_counter.c 3.8 KB