Currently mem_cgroup_read_stat2() imprecise result for performance
reasons. However, for statistics like 'memory.stat' we'd want the precise
results.

Make mem_cgroup_read_stat2() slower but preciser, and add unprecise but
fast mem_cgroup_read_stat2_fast() for performance-sensitive caller - 
dcache_is_low().

https://jira.sw.ru/browse/PSBM-69332
Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com>
---
 mm/memcontrol.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 19af6a9d9fc8..5ab5e82c924e 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -973,12 +973,19 @@ mem_cgroup_read_stat(struct mem_cgroup *memcg, enum 
mem_cgroup_stat_index idx)
                val = 0;
        return val;
 }
+
 static inline unsigned long
-mem_cgroup_read_stat2(struct mem_cgroup *memcg, enum mem_cgroup_stat2_index 
idx)
+mem_cgroup_read_stat2_fast(struct mem_cgroup *memcg, enum 
mem_cgroup_stat2_index idx)
 {
        return percpu_counter_read_positive(&memcg->stat2.counters[idx]);
 }
 
+static inline unsigned long
+mem_cgroup_read_stat2(struct mem_cgroup *memcg, enum mem_cgroup_stat2_index 
idx)
+{
+       return percpu_counter_sum_positive(&memcg->stat2.counters[idx]);
+}
+
 static void mem_cgroup_update_swap_max(struct mem_cgroup *memcg)
 {
        long long swap;
@@ -1611,9 +1618,9 @@ bool mem_cgroup_dcache_is_low(struct mem_cgroup *memcg, 
int vfs_cache_min_ratio)
 {
        unsigned long anon, file, dcache;
 
-       anon = mem_cgroup_read_stat2(memcg, MEM_CGROUP_STAT_RSS);
-       file = mem_cgroup_read_stat2(memcg, MEM_CGROUP_STAT_CACHE);
-       dcache = mem_cgroup_read_stat2(memcg, MEM_CGROUP_STAT_SLAB_RECLAIMABLE);
+       anon = mem_cgroup_read_stat2_fast(memcg, MEM_CGROUP_STAT_RSS);
+       file = mem_cgroup_read_stat2_fast(memcg, MEM_CGROUP_STAT_CACHE);
+       dcache = mem_cgroup_read_stat2_fast(memcg, 
MEM_CGROUP_STAT_SLAB_RECLAIMABLE);
 
        return dcache / vfs_cache_min_ratio <
                        (anon + file + dcache) / 100;
-- 
2.13.0

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to