memcg: add zone_reclaim_stat
Introduce mem_cgroup_per_zone::reclaim_stat member and its statics collecting function. Now, get_scan_ratio() can calculate correct value on memcg reclaim. [hugh@veritas.com: avoid reclaim_stat oops when disabled] Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Cc: Hugh Dickins <hugh@veritas.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
a3d8e0549d
commit
3e2f41f1f6
@ -103,6 +103,8 @@ struct mem_cgroup_per_zone {
|
||||
*/
|
||||
struct list_head lists[NR_LRU_LISTS];
|
||||
unsigned long count[NR_LRU_LISTS];
|
||||
|
||||
struct zone_reclaim_stat reclaim_stat;
|
||||
};
|
||||
/* Macro for accessing counter */
|
||||
#define MEM_CGROUP_ZSTAT(mz, idx) ((mz)->count[(idx)])
|
||||
@ -458,6 +460,33 @@ unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
|
||||
return MEM_CGROUP_ZSTAT(mz, lru);
|
||||
}
|
||||
|
||||
struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
|
||||
struct zone *zone)
|
||||
{
|
||||
int nid = zone->zone_pgdat->node_id;
|
||||
int zid = zone_idx(zone);
|
||||
struct mem_cgroup_per_zone *mz = mem_cgroup_zoneinfo(memcg, nid, zid);
|
||||
|
||||
return &mz->reclaim_stat;
|
||||
}
|
||||
|
||||
struct zone_reclaim_stat *
|
||||
mem_cgroup_get_reclaim_stat_from_page(struct page *page)
|
||||
{
|
||||
struct page_cgroup *pc;
|
||||
struct mem_cgroup_per_zone *mz;
|
||||
|
||||
if (mem_cgroup_disabled())
|
||||
return NULL;
|
||||
|
||||
pc = lookup_page_cgroup(page);
|
||||
mz = page_cgroup_zoneinfo(pc);
|
||||
if (!mz)
|
||||
return NULL;
|
||||
|
||||
return &mz->reclaim_stat;
|
||||
}
|
||||
|
||||
unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
|
||||
struct list_head *dst,
|
||||
unsigned long *scanned, int order,
|
||||
|
Reference in New Issue
Block a user