From: Andrey Ryabinin <aryabinin@virtuozzo.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrey Ryabinin <aryabinin@virtuozzo.com>, Shakeel Butt <shakeelb@google.com>, Michal Hocko <mhocko@kernel.org>, Johannes Weiner <hannes@cmpxchg.org>, Vladimir Davydov <vdavydov.dev@gmail.com> Subject: [PATCH v5 2/2] mm/memcontrol.c: Reduce reclaim retries in mem_cgroup_resize_limit() Date: Fri, 19 Jan 2018 16:25:44 +0300 [thread overview] Message-ID: <20180119132544.19569-2-aryabinin@virtuozzo.com> (raw) In-Reply-To: <20180119132544.19569-1-aryabinin@virtuozzo.com> Currently mem_cgroup_resize_limit() retries to set limit after reclaiming 32 pages. It makes more sense to reclaim needed amount of pages right away. This works noticeably faster, especially if 'usage - limit' big. E.g. bringing down limit from 4G to 50M: Before: # perf stat echo 50M > memory.limit_in_bytes Performance counter stats for 'echo 50M': 386.582382 task-clock (msec) # 0.835 CPUs utilized 2,502 context-switches # 0.006 M/sec 0.463244382 seconds time elapsed After: # perf stat echo 50M > memory.limit_in_bytes Performance counter stats for 'echo 50M': 169.403906 task-clock (msec) # 0.849 CPUs utilized 14 context-switches # 0.083 K/sec 0.199536900 seconds time elapsed Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> --- mm/memcontrol.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9d987f3e79dc..09bac2df2f12 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2448,6 +2448,7 @@ static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, unsigned long limit, bool memsw) { + unsigned long nr_pages; bool enlarge = false; int ret; bool limits_invariant; @@ -2479,8 +2480,9 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, if (!ret) break; - if (!try_to_free_mem_cgroup_pages(memcg, 1, - GFP_KERNEL, !memsw)) { + nr_pages = max_t(long, 1, page_counter_read(counter) - limit); + if (!try_to_free_mem_cgroup_pages(memcg, nr_pages, + GFP_KERNEL, !memsw)) { ret = -EBUSY; break; } -- 2.13.6
WARNING: multiple messages have this Message-ID (diff)
From: Andrey Ryabinin <aryabinin@virtuozzo.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrey Ryabinin <aryabinin@virtuozzo.com>, Shakeel Butt <shakeelb@google.com>, Michal Hocko <mhocko@kernel.org>, Johannes Weiner <hannes@cmpxchg.org>, Vladimir Davydov <vdavydov.dev@gmail.com> Subject: [PATCH v5 2/2] mm/memcontrol.c: Reduce reclaim retries in mem_cgroup_resize_limit() Date: Fri, 19 Jan 2018 16:25:44 +0300 [thread overview] Message-ID: <20180119132544.19569-2-aryabinin@virtuozzo.com> (raw) In-Reply-To: <20180119132544.19569-1-aryabinin@virtuozzo.com> Currently mem_cgroup_resize_limit() retries to set limit after reclaiming 32 pages. It makes more sense to reclaim needed amount of pages right away. This works noticeably faster, especially if 'usage - limit' big. E.g. bringing down limit from 4G to 50M: Before: # perf stat echo 50M > memory.limit_in_bytes Performance counter stats for 'echo 50M': 386.582382 task-clock (msec) # 0.835 CPUs utilized 2,502 context-switches # 0.006 M/sec 0.463244382 seconds time elapsed After: # perf stat echo 50M > memory.limit_in_bytes Performance counter stats for 'echo 50M': 169.403906 task-clock (msec) # 0.849 CPUs utilized 14 context-switches # 0.083 K/sec 0.199536900 seconds time elapsed Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Shakeel Butt <shakeelb@google.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com> --- mm/memcontrol.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9d987f3e79dc..09bac2df2f12 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2448,6 +2448,7 @@ static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, unsigned long limit, bool memsw) { + unsigned long nr_pages; bool enlarge = false; int ret; bool limits_invariant; @@ -2479,8 +2480,9 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, if (!ret) break; - if (!try_to_free_mem_cgroup_pages(memcg, 1, - GFP_KERNEL, !memsw)) { + nr_pages = max_t(long, 1, page_counter_read(counter) - limit); + if (!try_to_free_mem_cgroup_pages(memcg, nr_pages, + GFP_KERNEL, !memsw)) { ret = -EBUSY; break; } -- 2.13.6 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2018-01-19 13:26 UTC|newest] Thread overview: 125+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-12-20 10:24 [PATCH 1/2] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Andrey Ryabinin 2017-12-20 10:24 ` Andrey Ryabinin 2017-12-20 10:24 ` [PATCH 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions Andrey Ryabinin 2017-12-20 10:24 ` Andrey Ryabinin 2017-12-20 10:33 ` [PATCH 1/2] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Michal Hocko 2017-12-20 10:33 ` Michal Hocko 2017-12-20 11:32 ` Andrey Ryabinin 2017-12-20 11:32 ` Andrey Ryabinin 2017-12-20 11:34 ` Michal Hocko 2017-12-20 11:34 ` Michal Hocko 2017-12-20 18:15 ` Shakeel Butt 2017-12-20 18:15 ` Shakeel Butt 2017-12-21 10:00 ` Andrey Ryabinin 2017-12-21 10:00 ` Andrey Ryabinin 2017-12-21 10:00 ` Andrey Ryabinin 2017-12-20 13:21 ` [PATCH v2 " Andrey Ryabinin 2017-12-20 13:21 ` Andrey Ryabinin 2017-12-20 13:21 ` [PATCH v2 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions Andrey Ryabinin 2017-12-20 13:21 ` Andrey Ryabinin 2017-12-20 13:53 ` [PATCH v2 1/2] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Michal Hocko 2017-12-20 13:53 ` Michal Hocko 2018-01-09 16:58 ` [PATCH v3 " Andrey Ryabinin 2018-01-09 16:58 ` Andrey Ryabinin 2018-01-09 16:58 ` [PATCH v3 2/2] mm/memcg: Consolidate mem_cgroup_resize_[memsw]_limit() functions Andrey Ryabinin 2018-01-09 16:58 ` Andrey Ryabinin 2018-01-09 17:10 ` Shakeel Butt 2018-01-09 17:10 ` Shakeel Butt 2018-01-09 17:10 ` Shakeel Butt 2018-01-09 17:26 ` Andrey Ryabinin 2018-01-09 17:26 ` Andrey Ryabinin 2018-01-09 23:26 ` Andrew Morton 2018-01-09 23:26 ` Andrew Morton 2018-01-10 12:43 ` [PATCH v4] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Andrey Ryabinin 2018-01-10 12:43 ` Andrey Ryabinin 2018-01-10 12:43 ` Andrey Ryabinin 2018-01-10 22:31 ` Andrew Morton 2018-01-10 22:31 ` Andrew Morton 2018-01-11 11:59 ` Andrey Ryabinin 2018-01-11 11:59 ` Andrey Ryabinin 2018-01-12 0:21 ` Andrew Morton 2018-01-12 0:21 ` Andrew Morton 2018-01-12 0:21 ` Andrew Morton 2018-01-12 9:08 ` Andrey Ryabinin 2018-01-12 9:08 ` Andrey Ryabinin 2018-01-11 10:42 ` Michal Hocko 2018-01-11 10:42 ` Michal Hocko 2018-01-11 10:42 ` Michal Hocko 2018-01-11 12:21 ` Andrey Ryabinin 2018-01-11 12:21 ` Andrey Ryabinin 2018-01-11 12:21 ` Andrey Ryabinin 2018-01-11 12:46 ` Michal Hocko 2018-01-11 12:46 ` Michal Hocko 2018-01-11 15:23 ` Andrey Ryabinin 2018-01-11 15:23 ` Andrey Ryabinin 2018-01-11 15:23 ` Andrey Ryabinin 2018-01-11 16:29 ` Michal Hocko 2018-01-11 16:29 ` Michal Hocko 2018-01-11 16:29 ` Michal Hocko 2018-01-11 21:59 ` Andrey Ryabinin 2018-01-11 21:59 ` Andrey Ryabinin 2018-01-11 21:59 ` Andrey Ryabinin 2018-01-12 12:24 ` Michal Hocko 2018-01-12 12:24 ` Michal Hocko 2018-01-12 22:57 ` Shakeel Butt 2018-01-12 22:57 ` Shakeel Butt 2018-01-12 22:57 ` Shakeel Butt 2018-01-15 12:29 ` Andrey Ryabinin 2018-01-15 12:29 ` Andrey Ryabinin 2018-01-15 17:04 ` Shakeel Butt 2018-01-15 17:04 ` Shakeel Butt 2018-01-15 17:04 ` Shakeel Butt 2018-01-15 12:30 ` Andrey Ryabinin 2018-01-15 12:30 ` Andrey Ryabinin 2018-01-15 12:46 ` Michal Hocko 2018-01-15 12:46 ` Michal Hocko 2018-01-15 12:53 ` Andrey Ryabinin 2018-01-15 12:53 ` Andrey Ryabinin 2018-01-15 12:58 ` Michal Hocko 2018-01-15 12:58 ` Michal Hocko 2018-01-09 17:08 ` [PATCH v3 1/2] " Andrey Ryabinin 2018-01-09 17:08 ` Andrey Ryabinin 2018-01-09 17:08 ` Andrey Ryabinin 2018-01-09 17:22 ` Shakeel Butt 2018-01-09 17:22 ` Shakeel Butt 2018-01-19 13:25 ` [PATCH v5 1/2] mm/memcontrol.c: " Andrey Ryabinin 2018-01-19 13:25 ` Andrey Ryabinin 2018-01-19 13:25 ` Andrey Ryabinin 2018-01-19 13:25 ` Andrey Ryabinin [this message] 2018-01-19 13:25 ` [PATCH v5 2/2] mm/memcontrol.c: Reduce reclaim retries in mem_cgroup_resize_limit() Andrey Ryabinin 2018-01-19 13:35 ` Michal Hocko 2018-01-19 13:35 ` Michal Hocko 2018-01-19 14:49 ` Shakeel Butt 2018-01-19 14:49 ` Shakeel Butt 2018-01-19 14:49 ` Shakeel Butt 2018-01-19 15:11 ` Michal Hocko 2018-01-19 15:11 ` Michal Hocko 2018-01-19 15:11 ` Michal Hocko 2018-01-19 15:24 ` Shakeel Butt 2018-01-19 15:24 ` Shakeel Butt 2018-01-19 15:31 ` Michal Hocko 2018-01-19 15:31 ` Michal Hocko 2018-01-19 15:31 ` Michal Hocko 2018-02-21 20:17 ` Andrew Morton 2018-02-21 20:17 ` Andrew Morton 2018-02-22 13:50 ` Andrey Ryabinin 2018-02-22 13:50 ` Andrey Ryabinin 2018-02-22 14:09 ` Michal Hocko 2018-02-22 14:09 ` Michal Hocko 2018-02-22 15:13 ` Andrey Ryabinin 2018-02-22 15:13 ` Andrey Ryabinin 2018-02-22 15:33 ` Michal Hocko 2018-02-22 15:33 ` Michal Hocko 2018-02-22 15:38 ` Andrey Ryabinin 2018-02-22 15:38 ` Andrey Ryabinin 2018-02-22 15:44 ` Michal Hocko 2018-02-22 15:44 ` Michal Hocko 2018-02-22 16:01 ` Andrey Ryabinin 2018-02-22 16:01 ` Andrey Ryabinin 2018-02-22 16:30 ` Michal Hocko 2018-02-22 16:30 ` Michal Hocko 2018-01-19 13:32 ` [PATCH v5 1/2] mm/memcontrol.c: try harder to decrease [memory,memsw].limit_in_bytes Michal Hocko 2018-01-19 13:32 ` Michal Hocko 2018-01-19 13:32 ` Michal Hocko 2018-01-25 19:44 ` Andrey Ryabinin 2018-01-25 19:44 ` Andrey Ryabinin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180119132544.19569-2-aryabinin@virtuozzo.com \ --to=aryabinin@virtuozzo.com \ --cc=akpm@linux-foundation.org \ --cc=cgroups@vger.kernel.org \ --cc=hannes@cmpxchg.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mhocko@kernel.org \ --cc=shakeelb@google.com \ --cc=vdavydov.dev@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.