* [PATCH] memory.swappiness
@ 2007-12-03 2:54 YAMAMOTO Takashi
[not found] ` <20071203025416.A55761D08F0-Pcsii4f/SVk@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: YAMAMOTO Takashi @ 2007-12-03 2:54 UTC (permalink / raw)
To: balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
Cc: containers-qjLDD68F18O7TbgM5vRIOg, minoura-jCdQPDEk3idL9jVzuh4AOg
here's a trivial patch to implement memory.swappiness,
which controls swappiness for cgroup memory reclamation.
it's against 2.6.24-rc3-mm2.
YAMAMOTO Takashi
Signed-off-by: YAMAMOTO Takashi <yamamoto-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org>
---
--- linux-2.6.24-rc3-mm2-swappiness/include/linux/memcontrol.h.BACKUP 2007-12-03 11:49:27.176669111 +0900
+++ linux-2.6.24-rc3-mm2-swappiness/include/linux/memcontrol.h 2007-12-03 10:00:29.049448425 +0900
@@ -46,6 +46,7 @@ extern void mem_cgroup_out_of_memory(str
extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
gfp_t gfp_mask);
int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
+extern int mem_cgroup_swappiness(struct mem_cgroup *mem);
static inline struct mem_cgroup *mm_cgroup(const struct mm_struct *mm)
{
--- linux-2.6.24-rc3-mm2-swappiness/mm/vmscan.c.BACKUP 2007-12-03 07:49:00.000000000 +0900
+++ linux-2.6.24-rc3-mm2-swappiness/mm/vmscan.c 2007-12-03 10:01:57.559803379 +0900
@@ -1030,7 +1030,7 @@ static int calc_reclaim_mapped(struct sc
*
* Max temporary value is vm_total_pages*100.
*/
- imbalance *= (vm_swappiness + 1);
+ imbalance *= (sc->swappiness + 1);
imbalance /= 100;
/*
@@ -1445,7 +1445,7 @@ unsigned long try_to_free_mem_cgroup_pag
.may_writepage = !laptop_mode,
.may_swap = 1,
.swap_cluster_max = SWAP_CLUSTER_MAX,
- .swappiness = vm_swappiness,
+ .swappiness = mem_cgroup_swappiness(mem_cont),
.order = 0,
.mem_cgroup = mem_cont,
.isolate_pages = mem_cgroup_isolate_pages,
--- linux-2.6.24-rc3-mm2-swappiness/mm/memcontrol.c.BACKUP 2007-12-03 07:49:00.000000000 +0900
+++ linux-2.6.24-rc3-mm2-swappiness/mm/memcontrol.c 2007-12-03 11:22:40.157163781 +0900
@@ -133,6 +133,7 @@ struct mem_cgroup {
unsigned long control_type; /* control RSS or RSS+Pagecache */
int prev_priority; /* for recording reclaim priority */
+ unsigned int swappiness; /* swappiness */
/*
* statistics.
*/
@@ -1077,7 +1078,23 @@ static int mem_control_stat_open(struct
return single_open(file, mem_control_stat_show, cont);
}
+static int mem_cgroup_swappiness_write(struct cgroup *cont, struct cftype *cft,
+ u64 val)
+{
+ struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
+
+ if (val > 100)
+ return -EINVAL;
+ mem->swappiness = val;
+ return 0;
+}
+
+static u64 mem_cgroup_swappiness_read(struct cgroup *cont, struct cftype *cft)
+{
+ struct mem_cgroup *mem = mem_cgroup_from_cont(cont);
+ return mem->swappiness;
+}
static struct cftype mem_cgroup_files[] = {
{
@@ -1110,8 +1127,21 @@ static struct cftype mem_cgroup_files[]
.name = "stat",
.open = mem_control_stat_open,
},
+ {
+ .name = "swappiness",
+ .write_uint = mem_cgroup_swappiness_write,
+ .read_uint = mem_cgroup_swappiness_read,
+ },
};
+/* XXX probably it's better to move try_to_free_mem_cgroup_pages to
+ memcontrol.c and kill this */
+int mem_cgroup_swappiness(struct mem_cgroup *mem)
+{
+
+ return mem->swappiness;
+}
+
static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
{
struct mem_cgroup_per_node *pn;
@@ -1155,6 +1185,8 @@ mem_cgroup_create(struct cgroup_subsys *
res_counter_init(&mem->res);
mem->control_type = MEM_CGROUP_TYPE_ALL;
+ mem->swappiness = 60; /* XXX probably should inherit a value from
+ either parent cgroup or global vm_swappiness */
memset(&mem->info, 0, sizeof(mem->info));
for_each_node_state(node, N_POSSIBLE)
^ permalink raw reply [flat|nested] 2+ messages in thread[parent not found: <20071203025416.A55761D08F0-Pcsii4f/SVk@public.gmane.org>]
* Re: [PATCH] memory.swappiness [not found] ` <20071203025416.A55761D08F0-Pcsii4f/SVk@public.gmane.org> @ 2007-12-03 3:25 ` Balbir Singh 0 siblings, 0 replies; 2+ messages in thread From: Balbir Singh @ 2007-12-03 3:25 UTC (permalink / raw) To: YAMAMOTO Takashi Cc: containers-qjLDD68F18O7TbgM5vRIOg, minoura-jCdQPDEk3idL9jVzuh4AOg YAMAMOTO Takashi wrote: > here's a trivial patch to implement memory.swappiness, > which controls swappiness for cgroup memory reclamation. > > it's against 2.6.24-rc3-mm2. > > YAMAMOTO Takashi > > > Signed-off-by: YAMAMOTO Takashi <yamamoto-jCdQPDEk3idL9jVzuh4AOg@public.gmane.org> > --- > > --- linux-2.6.24-rc3-mm2-swappiness/include/linux/memcontrol.h.BACKUP 2007-12-03 11:49:27.176669111 +0900 > +++ linux-2.6.24-rc3-mm2-swappiness/include/linux/memcontrol.h 2007-12-03 10:00:29.049448425 +0900 > @@ -46,6 +46,7 @@ extern void mem_cgroup_out_of_memory(str > extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm, > gfp_t gfp_mask); > int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem); > +extern int mem_cgroup_swappiness(struct mem_cgroup *mem); > > static inline struct mem_cgroup *mm_cgroup(const struct mm_struct *mm) > { > --- linux-2.6.24-rc3-mm2-swappiness/mm/vmscan.c.BACKUP 2007-12-03 07:49:00.000000000 +0900 > +++ linux-2.6.24-rc3-mm2-swappiness/mm/vmscan.c 2007-12-03 10:01:57.559803379 +0900 > @@ -1030,7 +1030,7 @@ static int calc_reclaim_mapped(struct sc > * > * Max temporary value is vm_total_pages*100. > */ > - imbalance *= (vm_swappiness + 1); > + imbalance *= (sc->swappiness + 1); > imbalance /= 100; > > /* > @@ -1445,7 +1445,7 @@ unsigned long try_to_free_mem_cgroup_pag > .may_writepage = !laptop_mode, > .may_swap = 1, > .swap_cluster_max = SWAP_CLUSTER_MAX, > - .swappiness = vm_swappiness, > + .swappiness = mem_cgroup_swappiness(mem_cont), > .order = 0, > .mem_cgroup = mem_cont, > .isolate_pages = mem_cgroup_isolate_pages, > --- linux-2.6.24-rc3-mm2-swappiness/mm/memcontrol.c.BACKUP 2007-12-03 07:49:00.000000000 +0900 > +++ linux-2.6.24-rc3-mm2-swappiness/mm/memcontrol.c 2007-12-03 11:22:40.157163781 +0900 > @@ -133,6 +133,7 @@ struct mem_cgroup { > > unsigned long control_type; /* control RSS or RSS+Pagecache */ > int prev_priority; /* for recording reclaim priority */ > + unsigned int swappiness; /* swappiness */ > /* > * statistics. > */ > @@ -1077,7 +1078,23 @@ static int mem_control_stat_open(struct > return single_open(file, mem_control_stat_show, cont); > } > > +static int mem_cgroup_swappiness_write(struct cgroup *cont, struct cftype *cft, > + u64 val) > +{ > + struct mem_cgroup *mem = mem_cgroup_from_cont(cont); > + > + if (val > 100) > + return -EINVAL; > + mem->swappiness = val; > + return 0; > +} > + > +static u64 mem_cgroup_swappiness_read(struct cgroup *cont, struct cftype *cft) > +{ > + struct mem_cgroup *mem = mem_cgroup_from_cont(cont); > > + return mem->swappiness; > +} > > static struct cftype mem_cgroup_files[] = { > { > @@ -1110,8 +1127,21 @@ static struct cftype mem_cgroup_files[] > .name = "stat", > .open = mem_control_stat_open, > }, > + { > + .name = "swappiness", > + .write_uint = mem_cgroup_swappiness_write, > + .read_uint = mem_cgroup_swappiness_read, > + }, > }; > > +/* XXX probably it's better to move try_to_free_mem_cgroup_pages to > + memcontrol.c and kill this */ > +int mem_cgroup_swappiness(struct mem_cgroup *mem) > +{ > + > + return mem->swappiness; > +} > + > static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node) > { > struct mem_cgroup_per_node *pn; > @@ -1155,6 +1185,8 @@ mem_cgroup_create(struct cgroup_subsys * > res_counter_init(&mem->res); > > mem->control_type = MEM_CGROUP_TYPE_ALL; > + mem->swappiness = 60; /* XXX probably should inherit a value from > + either parent cgroup or global vm_swappiness */ I prefer inheriting from the parent, but since our hierarchy support needs work (changes to res_counter to support actual hierarchies), I would prefer using global vm_swappiness. > memset(&mem->info, 0, sizeof(mem->info)); > > for_each_node_state(node, N_POSSIBLE) I like this patch very much Acked-by: Balbir Singh <balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> -- Warm Regards, Balbir Singh Linux Technology Center IBM, ISTL ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-12-03 3:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-03 2:54 [PATCH] memory.swappiness YAMAMOTO Takashi
[not found] ` <20071203025416.A55761D08F0-Pcsii4f/SVk@public.gmane.org>
2007-12-03 3:25 ` Balbir Singh
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.