Re: [PATCH 0/8] memcg: clean up, export swapiness
From: Ying Han
Date: Mon May 23 2011 - 13:26:33 EST
Hi Kame:
Is this patch part of the "memcg async reclaim v2" patchset? I am
trying to do some tests on top of that, but having hard time finding
the [PATCH 3/8] and [PATCH 5/8].
--Ying
On Thu, May 19, 2011 at 8:43 PM, KAMEZAWA Hiroyuki
<kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote:
> From: Ying Han <yinghan@xxxxxxxxxx>
> change mem_cgroup's swappiness interface.
>
> Now, memcg's swappiness interface is defined as 'static' and
> the value is passed as an argument to try_to_free_xxxx...
>
> This patch adds an function mem_cgroup_swappiness() and export it,
> reduce arguments. This interface will be used in async reclaim, later.
>
> I think an function is better than passing arguments because it's
> clearer where the swappiness comes from to scan_control.
>
> Signed-off-by: Ying Han <yinghan@xxxxxxxxxx>
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
> ---
> include/linux/memcontrol.h | 1 +
> include/linux/swap.h | 4 +---
> mm/memcontrol.c | 14 ++++++--------
> mm/vmscan.c | 9 ++++-----
> 4 files changed, 12 insertions(+), 16 deletions(-)
>
> Index: mmotm-May11/include/linux/memcontrol.h
> ===================================================================
> --- mmotm-May11.orig/include/linux/memcontrol.h
> +++ mmotm-May11/include/linux/memcontrol.h
> @@ -112,6 +112,7 @@ unsigned long
> mem_cgroup_zone_reclaimable_pages(struct mem_cgroup *memcg, int nid, int zid);
> bool mem_cgroup_test_reclaimable(struct mem_cgroup *memcg);
> int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
> +unsigned int mem_cgroup_swappiness(struct mem_cgroup *memcg);
> unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
> struct zone *zone,
> enum lru_list lru);
> Index: mmotm-May11/mm/memcontrol.c
> ===================================================================
> --- mmotm-May11.orig/mm/memcontrol.c
> +++ mmotm-May11/mm/memcontrol.c
> @@ -1285,7 +1285,7 @@ static unsigned long mem_cgroup_margin(s
> return margin >> PAGE_SHIFT;
> }
>
> -static unsigned int get_swappiness(struct mem_cgroup *memcg)
> +unsigned int mem_cgroup_swappiness(struct mem_cgroup *memcg)
> {
> struct cgroup *cgrp = memcg->css.cgroup;
>
> @@ -1687,14 +1687,13 @@ static int mem_cgroup_hierarchical_recla
> /* we use swappiness of local cgroup */
> if (check_soft) {
> ret = mem_cgroup_shrink_node_zone(victim, gfp_mask,
> - noswap, get_swappiness(victim), zone,
> - &nr_scanned);
> + noswap, zone, &nr_scanned);
> *total_scanned += nr_scanned;
> mem_cgroup_soft_steal(victim, is_kswapd, ret);
> mem_cgroup_soft_scan(victim, is_kswapd, nr_scanned);
> } else
> ret = try_to_free_mem_cgroup_pages(victim, gfp_mask,
> - noswap, get_swappiness(victim));
> + noswap);
> css_put(&victim->css);
> /*
> * At shrinking usage, we can't check we should stop here or
> @@ -3717,8 +3716,7 @@ try_to_free:
> ret = -EINTR;
> goto out;
> }
> - progress = try_to_free_mem_cgroup_pages(mem, GFP_KERNEL,
> - false, get_swappiness(mem));
> + progress = try_to_free_mem_cgroup_pages(mem, GFP_KERNEL, false);
> if (!progress) {
> nr_retries--;
> /* maybe some writeback is necessary */
> @@ -4150,7 +4148,7 @@ static u64 mem_cgroup_swappiness_read(st
> {
> struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
>
> - return get_swappiness(memcg);
> + return mem_cgroup_swappiness(memcg);
> }
>
> static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft,
> @@ -4836,7 +4834,7 @@ mem_cgroup_create(struct cgroup_subsys *
> INIT_LIST_HEAD(&mem->oom_notify);
>
> if (parent)
> - mem->swappiness = get_swappiness(parent);
> + mem->swappiness = mem_cgroup_swappiness(parent);
> atomic_set(&mem->refcnt, 1);
> mem->move_charge_at_immigrate = 0;
> mutex_init(&mem->thresholds_lock);
> Index: mmotm-May11/include/linux/swap.h
> ===================================================================
> --- mmotm-May11.orig/include/linux/swap.h
> +++ mmotm-May11/include/linux/swap.h
> @@ -252,11 +252,9 @@ static inline void lru_cache_add_file(st
> extern unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
> gfp_t gfp_mask, nodemask_t *mask);
> extern unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem,
> - gfp_t gfp_mask, bool noswap,
> - unsigned int swappiness);
> + gfp_t gfp_mask, bool noswap);
> extern unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
> gfp_t gfp_mask, bool noswap,
> - unsigned int swappiness,
> struct zone *zone,
> unsigned long *nr_scanned);
> extern int __isolate_lru_page(struct page *page, int mode, int file);
> Index: mmotm-May11/mm/vmscan.c
> ===================================================================
> --- mmotm-May11.orig/mm/vmscan.c
> +++ mmotm-May11/mm/vmscan.c
> @@ -2178,7 +2178,6 @@ unsigned long try_to_free_pages(struct z
>
> unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *mem,
> gfp_t gfp_mask, bool noswap,
> - unsigned int swappiness,
> struct zone *zone,
> unsigned long *nr_scanned)
> {
> @@ -2188,7 +2187,6 @@ unsigned long mem_cgroup_shrink_node_zon
> .may_writepage = !laptop_mode,
> .may_unmap = 1,
> .may_swap = !noswap,
> - .swappiness = swappiness,
> .order = 0,
> .mem_cgroup = mem,
> };
> @@ -2196,6 +2194,8 @@ unsigned long mem_cgroup_shrink_node_zon
> sc.gfp_mask = (gfp_mask & GFP_RECLAIM_MASK) |
> (GFP_HIGHUSER_MOVABLE & ~GFP_RECLAIM_MASK);
>
> + sc.swappiness = mem_cgroup_swappiness(mem);
> +
> trace_mm_vmscan_memcg_softlimit_reclaim_begin(0,
> sc.may_writepage,
> sc.gfp_mask);
> @@ -2217,8 +2217,7 @@ unsigned long mem_cgroup_shrink_node_zon
>
> unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
> gfp_t gfp_mask,
> - bool noswap,
> - unsigned int swappiness)
> + bool noswap)
> {
> struct zonelist *zonelist;
> unsigned long nr_reclaimed;
> @@ -2228,7 +2227,6 @@ unsigned long try_to_free_mem_cgroup_pag
> .may_unmap = 1,
> .may_swap = !noswap,
> .nr_to_reclaim = SWAP_CLUSTER_MAX,
> - .swappiness = swappiness,
> .order = 0,
> .mem_cgroup = mem_cont,
> .nodemask = NULL, /* we don't care the placement */
> @@ -2245,6 +2243,7 @@ unsigned long try_to_free_mem_cgroup_pag
> * scan does not need to be the current node.
> */
> nid = mem_cgroup_select_victim_node(mem_cont);
> + sc.swappiness = mem_cgroup_swappiness(mem_cont);
>
> zonelist = NODE_DATA(nid)->node_zonelists;
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/