From 8793e0a6aee2d25a4d9e28453e73a19e58ce035f Mon Sep 17 00:00:00 2001 From: dmymax_ly Date: Fri, 10 Mar 2023 11:13:29 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Memcg=E5=9B=9E=E6=94=B6pu?= =?UTF-8?q?rgeable=20memory=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dmymax_ly --- mm/memcg_control.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/mm/memcg_control.c b/mm/memcg_control.c index 07fc597db195..751e23392ebd 100644 --- a/mm/memcg_control.c +++ b/mm/memcg_control.c @@ -357,6 +357,43 @@ static int memcg_force_swapin_write(struct cgroup_subsys_state *css, struct cfty return 0; } + +#ifdef CONFIG_MEM_PURGEABLE +static unsigned long purgeable_memcg_node(pg_data_t *pgdata, struct scan_control *sc, struct mem_cgroup *memcg) +{ + unsigned long nr = 0; + struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdata); + + shrink_list(LRU_INACTIVE_PURGEABLE, -1, lruvec, sc); + pr_info("reclaim %lu purgeable pages \n", nr); + return nr; +} + +static int memcg_force_shrink_purgeable(struct cgroup_subsys_state *css, struct cftype * cft, u64 reclaim_size_kB) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(css); + if (!memcg) + return 0; + + struct scan_control sc = { + .gfp_mask = GFP_KERNEL, + .order = 0, + .priority = DEF_PRIORITY, + .may_deactivate = DEACTIVATE_ANON, + .may_writepage = 1, + .may_unmap = 1, + .may_swap = 1, + .reclaim_idx = MAX_NR_ZONES - 1, + }; + int nid = 0; + sc.nr_to_reclaim = div_u64(reclaim_size_kB, PAGE_SIZE); + + for_each_node_state(nid, N_MEMORY) + purgeable_memcg_node(NODE_DATA(nid), &sc, memcg); + return 0; +} +#endif + static struct cftype memcg_policy_files[] = { { .name = "name", @@ -385,6 +422,12 @@ static struct cftype memcg_policy_files[] = { .name = "force_swapin", .write_u64 = memcg_force_swapin_write, }, +#ifdef CONFIG_MEM_PURGEABLE + { + .name = "force_shrink_purgeable", + .write_u64 = memcg_force_shrink_purgeable, + }, +#endif { }, /* terminate */ }; -- Gitee From c53d3647470e38244e7f184ecf85d7ca976371ec Mon Sep 17 00:00:00 2001 From: denglun Date: Fri, 10 Mar 2023 07:31:26 +0000 Subject: [PATCH 2/3] update mm/memcg_control.c. Signed-off-by: denglun --- mm/memcg_control.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/memcg_control.c b/mm/memcg_control.c index 751e23392ebd..24bfaa5a3ece 100644 --- a/mm/memcg_control.c +++ b/mm/memcg_control.c @@ -363,8 +363,8 @@ static unsigned long purgeable_memcg_node(pg_data_t *pgdata, struct scan_control { unsigned long nr = 0; struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdata); - - shrink_list(LRU_INACTIVE_PURGEABLE, -1, lruvec, sc); + shrink_list(LRU_ACTIVE_PURGEABLE, -1, lruvec, sc); + nr += shrink_list(LRU_INACTIVE_PURGEABLE, -1, lruvec, sc); pr_info("reclaim %lu purgeable pages \n", nr); return nr; } -- Gitee From bac7293fb364b86193e46df3c5000e1230bd9d5e Mon Sep 17 00:00:00 2001 From: denglun Date: Fri, 10 Mar 2023 08:40:04 +0000 Subject: [PATCH 3/3] update mm/memcg_control.c. Signed-off-by: denglun --- mm/memcg_control.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/memcg_control.c b/mm/memcg_control.c index 24bfaa5a3ece..40bd932fe5e5 100644 --- a/mm/memcg_control.c +++ b/mm/memcg_control.c @@ -363,9 +363,11 @@ static unsigned long purgeable_memcg_node(pg_data_t *pgdata, struct scan_control { unsigned long nr = 0; struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdata); + shrink_list(LRU_ACTIVE_PURGEABLE, -1, lruvec, sc); nr += shrink_list(LRU_INACTIVE_PURGEABLE, -1, lruvec, sc); - pr_info("reclaim %lu purgeable pages \n", nr); + + pr_info("reclaim %lu purgeable pages \n", nr); return nr; } -- Gitee