This patch adds pswpin and pswpout fields to memory.stat file. These fields show the number of pages swapped in and out respectively for the given memory cgroup. We assume a page was swapped in/out even if there were no actual io (frontswap).
https://jira.sw.ru/browse/PSBM-46104 Signed-off-by: Vladimir Davydov <[email protected]> --- mm/memcontrol.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f617423a3ade..29716f465ffb 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -112,6 +112,8 @@ static const char * const mem_cgroup_stat_names[] = { enum mem_cgroup_events_index { MEM_CGROUP_EVENTS_PGPGIN, /* # of pages paged in */ MEM_CGROUP_EVENTS_PGPGOUT, /* # of pages paged out */ + MEM_CGROUP_EVENTS_PSWPIN, /* # of pages swapped in */ + MEM_CGROUP_EVENTS_PSWPOUT, /* # of pages swapped out */ MEM_CGROUP_EVENTS_PGFAULT, /* # of page-faults */ MEM_CGROUP_EVENTS_PGMAJFAULT, /* # of major page-faults */ MEM_CGROUP_EVENTS_NSTATS, @@ -120,6 +122,8 @@ enum mem_cgroup_events_index { static const char * const mem_cgroup_events_names[] = { "pgpgin", "pgpgout", + "pswpin", + "pswpout", "pgfault", "pgmajfault", }; @@ -3945,6 +3949,8 @@ __mem_cgroup_commit_charge_swapin(struct page *page, struct mem_cgroup *memcg, swp_entry_t ent = {.val = page_private(page)}; mem_cgroup_uncharge_swap(ent); } + + this_cpu_inc(memcg->stat->events[MEM_CGROUP_EVENTS_PSWPIN]); } void mem_cgroup_commit_charge_swapin(struct page *page, @@ -4234,6 +4240,9 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout) */ if (do_swap_account && swapout && memcg) swap_cgroup_record(ent, css_id(&memcg->css)); + + if (swapout && memcg) + this_cpu_inc(memcg->stat->events[MEM_CGROUP_EVENTS_PSWPOUT]); } #endif -- 2.1.4 _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
