[Devel] [PATCH RHEL COMMIT] mm: memcontrol: add stats for reclaimable and unreclaimable stats
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Sep 30 17:44:01 MSK 2021
The commit is pushed to "branch-rh9-5.14.vz9.1.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after ark-5.14
------>
commit e7d2cdabedc71916b7ca50aaf28d0ea6353af71d
Author: Vladimir Davydov <vdavydov.dev at gmail.com>
Date: Thu Sep 30 17:44:01 2021 +0300
mm: memcontrol: add stats for reclaimable and unreclaimable stats
Required by vcmmd for estimating the size of available memory, which in
turn is used for calculating the lower boundary for memory limit.
Also, these counters will be used by the following patches.
Signed-off-by: Vladimir Davydov <vdavydov at virtuozzo.com>
Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
+++
memcg: Show correct values of slab_[un]reclaimable in memory.stat files
The values of NR_SLAB_RECLAIMABLE_B and NR_SLAB_UNRECLAIMABLE_B counters
are in bytes rather than in pages. So, one should not multiply them by
PAGE_SIZE when preparing the records for 'memory.stat' files in the memory
cgroups.
This also applies to 'total_slab_[un]reclaimable' stats in those files.
https://jira.sw.ru/browse/PSBM-132728
Signed-off-by: Evgenii Shatokhin <eshatokhin at virtuozzo.com>
Cherry-picked from vz8 commit 6ee44bfbd469 ("mm: memcontrol: add stats
for reclaimable and unreclaimable stats")).
Applied cosmetic fixes: remove unneeded cast, make type of 'nr' same
in both loops inside memcg_stat_show().
Signed-off-by: Nikita Yushchenko <nikita.yushchenko at virtuozzo.com>
---
mm/memcontrol.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index d51f09a70bcd..c2b527cf73dc 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4076,6 +4076,8 @@ static const unsigned int memcg1_stats[] = {
NR_FILE_MAPPED,
NR_FILE_DIRTY,
NR_WRITEBACK,
+ NR_SLAB_RECLAIMABLE_B,
+ NR_SLAB_UNRECLAIMABLE_B,
MEMCG_SWAP,
};
@@ -4089,6 +4091,8 @@ static const char *const memcg1_stat_names[] = {
"mapped_file",
"dirty",
"writeback",
+ "slab_reclaimable",
+ "slab_unreclaimable",
"swap",
};
@@ -4112,12 +4116,14 @@ static int memcg_stat_show(struct seq_file *m, void *v)
cgroup_rstat_flush(memcg->css.cgroup);
for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) {
- unsigned long nr;
+ u64 nr;
if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
continue;
nr = memcg_page_state_local(memcg, memcg1_stats[i]);
- seq_printf(m, "%s %lu\n", memcg1_stat_names[i], nr * PAGE_SIZE);
+ if (!vmstat_item_in_bytes(memcg1_stats[i]))
+ nr *= PAGE_SIZE;
+ seq_printf(m, "%s %llu\n", memcg1_stat_names[i], nr);
}
for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
@@ -4142,13 +4148,14 @@ static int memcg_stat_show(struct seq_file *m, void *v)
(u64)memsw * PAGE_SIZE);
for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) {
- unsigned long nr;
+ u64 nr;
if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
continue;
nr = memcg_page_state(memcg, memcg1_stats[i]);
- seq_printf(m, "total_%s %llu\n", memcg1_stat_names[i],
- (u64)nr * PAGE_SIZE);
+ if (!vmstat_item_in_bytes(memcg1_stats[i]))
+ nr *= PAGE_SIZE;
+ seq_printf(m, "total_%s %llu\n", memcg1_stat_names[i], nr);
}
for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
More information about the Devel
mailing list