On Fri, Mar 10, 2017 at 6:19 PM, Yisheng Xie <ys...@foxmail.com> wrote: > From: Yisheng Xie <xieyishe...@huawei.com> > > When we enter do_try_to_free_pages, the may_thrash is always clear, and > it will retry shrink zones to tap cgroup's reserves memory by setting > may_thrash when the former shrink_zones reclaim nothing. > > However, if CONFIG_MEMCG=n, it should not do this useless retry at all, > for we do not have any cgroup's reserves memory to tap, and we have > already done hard work and made no progress. > > Signed-off-by: Yisheng Xie <xieyishe...@huawei.com> > --- > mm/vmscan.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index bc8031e..b03ccc1 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -2808,7 +2808,7 @@ static unsigned long do_try_to_free_pages(struct > zonelist *zonelist, > return 1; > > /* Untapped cgroup reserves? Don't OOM, retry. */ > - if (!sc->may_thrash) { > + if (!sc->may_thrash && IS_ENABLED(CONFIG_MEMCG)) {
In my opinion it should be even more restrictive (restricting cgroup_disabled=memory boot option and cgroup legacy hierarchy). So, instead of IS_ENABLED(CONFIG_MEMCG), the check should be something like (cgroup_subsys_enabled(memory_cgrp_subsys) && cgroup_subsys_on_dfl(memory_cgrp_subsys)). > sc->priority = initial_priority; > sc->may_thrash = 1; > goto retry; > -- > 1.9.1 > > >