memcg: make oom less frequently
In previous implementation, mem_cgroup_try_charge checked the return value of mem_cgroup_try_to_free_pages, and just retried if some pages had been reclaimed. But now, try_charge(and mem_cgroup_hierarchical_reclaim called from it) only checks whether the usage is less than the limit. This patch tries to change the behavior as before to cause oom less frequently. Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Pavel Emelyanov <xemul@openvz.org> Cc: Li Zefan <lizf@cn.fujitsu.com> Cc: Paul Menage <menage@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c268e9946d
commit
4d1c627389
@ -773,10 +773,10 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem,
|
||||
* but there might be left over accounting, even after children
|
||||
* have left.
|
||||
*/
|
||||
ret = try_to_free_mem_cgroup_pages(root_mem, gfp_mask, noswap,
|
||||
ret += try_to_free_mem_cgroup_pages(root_mem, gfp_mask, noswap,
|
||||
get_swappiness(root_mem));
|
||||
if (mem_cgroup_check_under_limit(root_mem))
|
||||
return 0;
|
||||
return 1; /* indicate reclaim has succeeded */
|
||||
if (!root_mem->use_hierarchy)
|
||||
return ret;
|
||||
|
||||
@ -787,10 +787,10 @@ static int mem_cgroup_hierarchical_reclaim(struct mem_cgroup *root_mem,
|
||||
next_mem = mem_cgroup_get_next_node(root_mem);
|
||||
continue;
|
||||
}
|
||||
ret = try_to_free_mem_cgroup_pages(next_mem, gfp_mask, noswap,
|
||||
ret += try_to_free_mem_cgroup_pages(next_mem, gfp_mask, noswap,
|
||||
get_swappiness(next_mem));
|
||||
if (mem_cgroup_check_under_limit(root_mem))
|
||||
return 0;
|
||||
return 1; /* indicate reclaim has succeeded */
|
||||
next_mem = mem_cgroup_get_next_node(root_mem);
|
||||
}
|
||||
return ret;
|
||||
@ -875,6 +875,8 @@ static int __mem_cgroup_try_charge(struct mm_struct *mm,
|
||||
|
||||
ret = mem_cgroup_hierarchical_reclaim(mem_over_limit, gfp_mask,
|
||||
noswap);
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* try_to_free_mem_cgroup_pages() might not give us a full
|
||||
|
Loading…
Reference in New Issue
Block a user