@@ -30,6 +30,7 @@ static int meminfo_proc_show_mi(struct seq_file *m, struct meminfo *mi)
seq_printf(m,
"MemTotal: %8lu kB\n"
"MemFree: %8lu kB\n"
+ "MemAvailable: %8lu kB\n"
"Cached: %8lu kB\n"
"Buffers: %8lu kB\n"
"Active: %8lu kB\n"
@@ -52,6 +53,7 @@ static int meminfo_proc_show_mi(struct seq_file *m, struct meminfo *mi)
,
K(mi->si->totalram),
K(mi->si->freeram),
+ K(mi->available),
K(mi->cached),
K(0L),
K(mi->pages[LRU_ACTIVE_ANON] + mi->pages[LRU_ACTIVE_FILE]),
@@ -52,6 +52,7 @@ struct meminfo {
unsigned long pages[NR_LRU_LISTS];
unsigned long cached, dirty_pages, writeback_pages, locked, shmem;
unsigned long slab_reclaimable, slab_unreclaimable;
+ unsigned long available;
};
struct seq_file;
@@ -4461,6 +4461,17 @@ void mem_cgroup_fill_meminfo(struct mem_cgroup *memcg, struct meminfo *mi)
MEM_CGROUP_STAT_SLAB_UNRECLAIMABLE);
mi->cached = mem_cgroup_recursive_stat2(memcg, MEM_CGROUP_STAT_CACHE);
mi->shmem = mem_cgroup_recursive_stat(memcg, MEM_CGROUP_STAT_SHMEM);
+
+ /*
+ * The way of calculating 'available' memory repeats behavior of
+ * si_mem_available(), except 'WMARK_LOW' and 'totalreserve_pages'
+ * are not taken into account. These values reflect reservation of
+ * physycal memory and they are not relevant for CT.
+ */
+ mi->available = mi->si->freeram;
+ mi->available += mi->pages[LRU_ACTIVE_FILE] +
+ mi->pages[LRU_INACTIVE_FILE];
+ mi->available += mi->slab_reclaimable;
}
int mem_cgroup_enough_memory(struct mem_cgroup *memcg, long pages)
The commit is pushed to "branch-rh7-3.10.0-957.1.3.vz7.83.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-957.1.3.vz7.83.9 ------> commit 50cef4107c1106d547f5118a202bc8e0c0467c5c Author: Jan Dakinevich <jan.dakinevich@virtuozzo.com> Date: Fri Jan 18 17:59:06 2019 +0300 ve/meminfo: show "MemAvailable: ..." line in CT's meminfo 'available' memory is calculated in the same way as in si_mem_available(), but 'WMARK_LOW' and 'totalreserve_pages' are not honored as irrelevant for Containers. https://jira.sw.ru/browse/PSBM-90190 Signed-off-by: Jan Dakinevich <jan.dakinevich@virtuozzo.com> --- fs/proc/meminfo.c | 2 ++ include/linux/virtinfo.h | 1 + mm/memcontrol.c | 11 +++++++++++ 3 files changed, 14 insertions(+)