memcg: show swap usage in stat file
We now count MEM_CGROUP_STAT_SWAPOUT, so we can show swap usage. It would be useful for users to show swap usage in memory.stat file, because they don't need calculate memsw.usage - res.usage to know swap usage. Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Reviewed-by: Balbir Singh <balbir@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
0c3e73e84f
Коммит
1dd3a27326
|
@ -2676,6 +2676,7 @@ enum {
|
|||
MCS_MAPPED_FILE,
|
||||
MCS_PGPGIN,
|
||||
MCS_PGPGOUT,
|
||||
MCS_SWAP,
|
||||
MCS_INACTIVE_ANON,
|
||||
MCS_ACTIVE_ANON,
|
||||
MCS_INACTIVE_FILE,
|
||||
|
@ -2697,6 +2698,7 @@ struct {
|
|||
{"mapped_file", "total_mapped_file"},
|
||||
{"pgpgin", "total_pgpgin"},
|
||||
{"pgpgout", "total_pgpgout"},
|
||||
{"swap", "total_swap"},
|
||||
{"inactive_anon", "total_inactive_anon"},
|
||||
{"active_anon", "total_active_anon"},
|
||||
{"inactive_file", "total_inactive_file"},
|
||||
|
@ -2721,6 +2723,10 @@ static int mem_cgroup_get_local_stat(struct mem_cgroup *mem, void *data)
|
|||
s->stat[MCS_PGPGIN] += val;
|
||||
val = mem_cgroup_read_stat(&mem->stat, MEM_CGROUP_STAT_PGPGOUT_COUNT);
|
||||
s->stat[MCS_PGPGOUT] += val;
|
||||
if (do_swap_account) {
|
||||
val = mem_cgroup_read_stat(&mem->stat, MEM_CGROUP_STAT_SWAPOUT);
|
||||
s->stat[MCS_SWAP] += val * PAGE_SIZE;
|
||||
}
|
||||
|
||||
/* per zone stat */
|
||||
val = mem_cgroup_get_local_zonestat(mem, LRU_INACTIVE_ANON);
|
||||
|
@ -2752,8 +2758,11 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft,
|
|||
memset(&mystat, 0, sizeof(mystat));
|
||||
mem_cgroup_get_local_stat(mem_cont, &mystat);
|
||||
|
||||
for (i = 0; i < NR_MCS_STAT; i++)
|
||||
for (i = 0; i < NR_MCS_STAT; i++) {
|
||||
if (i == MCS_SWAP && !do_swap_account)
|
||||
continue;
|
||||
cb->fill(cb, memcg_stat_strings[i].local_name, mystat.stat[i]);
|
||||
}
|
||||
|
||||
/* Hierarchical information */
|
||||
{
|
||||
|
@ -2766,9 +2775,11 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft,
|
|||
|
||||
memset(&mystat, 0, sizeof(mystat));
|
||||
mem_cgroup_get_total_stat(mem_cont, &mystat);
|
||||
for (i = 0; i < NR_MCS_STAT; i++)
|
||||
for (i = 0; i < NR_MCS_STAT; i++) {
|
||||
if (i == MCS_SWAP && !do_swap_account)
|
||||
continue;
|
||||
cb->fill(cb, memcg_stat_strings[i].total_name, mystat.stat[i]);
|
||||
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_VM
|
||||
cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL));
|
||||
|
|
Загрузка…
Ссылка в новой задаче