Messages in this thread | | | Date | Wed, 14 May 2008 16:15:49 +0800 | From | Li Zefan <> | Subject | Re: [RFC/PATCH 4/6] memcg: shmem reclaim helper |
| |
KAMEZAWA Hiroyuki wrote: > A new call, mem_cgroup_shrink_usage() is added for shmem handling > and removing not usual usage of mem_cgroup_charge/uncharge. > > Now, shmem calls mem_cgroup_charge() just for reclaim some pages from > mem_cgroup. In general, shmem is used by some process group and not for > global resource (like file caches). So, it's reasonable to reclaim pages from > mem_cgroup where shmem is mainly used. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > --- > mm/memcontrol.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > Index: linux-2.6.26-rc2/mm/memcontrol.c > =================================================================== > --- linux-2.6.26-rc2.orig/mm/memcontrol.c > +++ linux-2.6.26-rc2/mm/memcontrol.c > @@ -783,6 +783,30 @@ static void mem_cgroup_drop_all_pages(st > } > > /* > + * A call to try to shrink memory usage under specified resource controller. > + * This is typically used for page reclaiming for shmem for reducing side > + * effect of page allocation from shmem, which is used by some mem_cgroup. > + */ > +int mem_cgroup_shrink_usage(struct mm_struct *mm, gfp_t gfp_mask) > +{ > + struct mem_cgroup *mem; > + int progress = 0; > + int retry = MEM_CGROUP_RECLAIM_RETRIES; > + > + rcu_read_lock(); > + mem = mem_cgroup_from_task(rcu_dereference(mm->owner)); > + css_get(&mem->css); > + rcu_read_unlock(); > + > + while(!progress && --retry) { > + progress = try_to_free_mem_cgroup_pages(mem, gfp_mask); > + }
This is wrong. How about: do { ... } while (!progress && --retry);
> + if (!retry) > + return -ENOMEM; > + return 0; > +} > + > +/* > * This routine traverse page_cgroup in given list and drop them all. > * *And* this routine doesn't reclaim page itself, just removes page_cgroup. > */
| |