Linux Container Development
 help / color / mirror / Atom feed
  • [parent not found: <alpine.DEB.2.00.1205301433490.9716@chino.kir.corp.google.com>]
  • * [PATCH] meminfo: show /proc/meminfo base on container's memcg
    @ 2012-05-29  2:56 Gao feng
      0 siblings, 0 replies; 33+ messages in thread
    From: Gao feng @ 2012-05-29  2:56 UTC (permalink / raw)
      To: hannes-druUgvl0LCNAfugRpC6u6w,
    	kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A, mhocko-AlSwsSmVLrQ,
    	bsingharora-Re5JQEeQqe8AvxtiuMwx3w,
    	akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b
      Cc: cgroups-u79uwXL29TY76Z2rM5mHXA,
    	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
    	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
    	linux-mm-Bw31MaZKKs3YtjvyW6yDsg
    
    cgroup and namespaces are used for creating containers but some of
    information is not isolated/virtualized. This patch is for isolating /proc/meminfo
    information per container, which uses memory cgroup. By this, top,free
    and other tools under container can work as expected(show container's
    usage) without changes.
    
    This patch is a trial to show memcg's info in /proc/meminfo if 'current'
    is under a memcg other than root.
    
    we show /proc/meminfo base on container's memory cgroup.
    because there are lots of info can't be provide by memcg, and
    the cmds such as top, free just use some entries of /proc/meminfo,
    we replace those entries by memory cgroup.
    
    if container has no memcg, we will show host's /proc/meminfo
    as before.
    
    there is no idea how to deal with Buffers,I just set it zero,
    It's strange if Buffers bigger than MemTotal.
    
    Signed-off-by: Gao feng <gaofeng-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    ---
     fs/proc/meminfo.c          |   11 +++++---
     include/linux/memcontrol.h |   15 +++++++++++
     mm/memcontrol.c            |   56 ++++++++++++++++++++++++++++++++++++++++++++
     3 files changed, 78 insertions(+), 4 deletions(-)
    
    diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
    index 80e4645..29a1fcd 100644
    --- a/fs/proc/meminfo.c
    +++ b/fs/proc/meminfo.c
    @@ -13,6 +13,7 @@
     #include <linux/atomic.h>
     #include <asm/page.h>
     #include <asm/pgtable.h>
    +#include <linux/memcontrol.h>
     #include "internal.h"
     
     void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
    @@ -27,7 +28,6 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
     	struct vmalloc_info vmi;
     	long cached;
     	unsigned long pages[NR_LRU_LISTS];
    -	int lru;
     
     /*
      * display in kilobytes.
    @@ -39,16 +39,19 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
     	allowed = ((totalram_pages - hugetlb_total_pages())
     		* sysctl_overcommit_ratio / 100) + total_swap_pages;
     
    +	memcg_meminfo(&i);
     	cached = global_page_state(NR_FILE_PAGES) -
     			total_swapcache_pages - i.bufferram;
    +	/*
    +	 * If 'current' is in root memory cgroup, returns global status.
    +	 * If not, returns the status of memcg under which current runs.
    +	 */
    +	sys_page_state(pages, &cached);
     	if (cached < 0)
     		cached = 0;
     
     	get_vmalloc_info(&vmi);
     
    -	for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
    -		pages[lru] = global_page_state(NR_LRU_BASE + lru);
    -
     	/*
     	 * Tagged format, for easy grepping and expansion.
     	 */
    diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
    index 0316197..6220764 100644
    --- a/include/linux/memcontrol.h
    +++ b/include/linux/memcontrol.h
    @@ -21,6 +21,7 @@
     #define _LINUX_MEMCONTROL_H
     #include <linux/cgroup.h>
     #include <linux/vm_event_item.h>
    +#include <linux/mm.h>
     
     struct mem_cgroup;
     struct page_cgroup;
    @@ -116,6 +117,9 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *,
     				   struct mem_cgroup_reclaim_cookie *);
     void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
     
    +extern void memcg_meminfo(struct sysinfo *si);
    +extern void sys_page_state(unsigned long *page, long *cached);
    +
     /*
      * For memory reclaim.
      */
    @@ -323,6 +327,17 @@ static inline void mem_cgroup_iter_break(struct mem_cgroup *root,
     {
     }
     
    +static inline void memcg_meminfo(struct sysinfo *si)
    +{
    +}
    +
    +static inline void sys_page_state(unsigned long *pages, long *cached)
    +{
    +	int lru;
    +	for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
    +		pages[lru] = global_page_state(NR_LRU_BASE + lru);
    +}
    +
     static inline bool mem_cgroup_disabled(void)
     {
     	return true;
    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index f142ea9..c25e160 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -52,6 +52,7 @@
     #include "internal.h"
     #include <net/sock.h>
     #include <net/tcp_memcontrol.h>
    +#include <linux/pid_namespace.h>
     
     #include <asm/uaccess.h>
     
    @@ -4345,6 +4346,61 @@ mem_cgroup_get_total_stat(struct mem_cgroup *memcg, struct mcs_total_stat *s)
     		mem_cgroup_get_local_stat(iter, s);
     }
     
    +void memcg_meminfo(struct sysinfo *val)
    +{
    +	struct mem_cgroup *memcg = mem_cgroup_from_task(current);
    +	__kernel_ulong_t totalram, totalswap;
    +	if (current->nsproxy->pid_ns == &init_pid_ns ||
    +	    memcg == NULL || mem_cgroup_is_root(memcg))
    +		return;
    +
    +	totalram = res_counter_read_u64(&memcg->res,
    +					RES_LIMIT) >> PAGE_SHIFT;
    +	if (totalram < val->totalram) {
    +		__kernel_ulong_t usageram;
    +		usageram = res_counter_read_u64(&memcg->res,
    +						RES_USAGE) >> PAGE_SHIFT;
    +		val->totalram = totalram;
    +		val->freeram = totalram - usageram;
    +		val->bufferram = 0;
    +		val->totalhigh = 0;
    +		val->freehigh = 0;
    +	} else
    +		return;
    +
    +	totalswap = res_counter_read_u64(&memcg->memsw,
    +					 RES_LIMIT) >> PAGE_SHIFT;
    +	if (totalswap < val->totalswap) {
    +		__kernel_ulong_t usageswap;
    +		usageswap = res_counter_read_u64(&memcg->memsw,
    +						 RES_USAGE) >> PAGE_SHIFT;
    +		val->totalswap = totalswap - val->totalram;
    +		val->freeswap = totalswap - usageswap - val->freeram;
    +	}
    +}
    +
    +void sys_page_state(unsigned long *pages, long *cached)
    +{
    +	struct mem_cgroup *memcg = mem_cgroup_from_task(current);
    +
    +	if (current->nsproxy->pid_ns == &init_pid_ns ||
    +	    memcg == NULL || mem_cgroup_is_root(memcg)) {
    +		int lru;
    +		for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)
    +			pages[lru] = global_page_state(NR_LRU_BASE + lru);
    +	} else {
    +		struct mcs_total_stat s;
    +		memset(&s, 0, sizeof(s));
    +		mem_cgroup_get_total_stat(memcg, &s);
    +		*cached = s.stat[MCS_CACHE] >> PAGE_SHIFT;
    +		pages[LRU_ACTIVE_ANON] = s.stat[MCS_ACTIVE_ANON] >> PAGE_SHIFT;
    +		pages[LRU_ACTIVE_FILE] = s.stat[MCS_ACTIVE_FILE] >> PAGE_SHIFT;
    +		pages[LRU_INACTIVE_ANON] = s.stat[MCS_INACTIVE_ANON] >> PAGE_SHIFT;
    +		pages[LRU_INACTIVE_FILE] = s.stat[MCS_INACTIVE_FILE] >> PAGE_SHIFT;
    +		pages[LRU_UNEVICTABLE] = s.stat[MCS_UNEVICTABLE] >> PAGE_SHIFT;
    +	}
    +}
    +
     #ifdef CONFIG_NUMA
     static int mem_control_numa_stat_show(struct seq_file *m, void *arg)
     {
    -- 
    1.7.7.6
    
    ^ permalink raw reply related	[flat|nested] 33+ messages in thread

    end of thread, other threads:[~2012-06-07 23:18 UTC | newest]
    
    Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1338260214-21919-1-git-send-email-gaofeng@cn.fujitsu.com>
         [not found] ` <1338260214-21919-1-git-send-email-gaofeng-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    2012-05-29  8:24   ` [PATCH] meminfo: show /proc/meminfo base on container's memcg Glauber Costa
    2012-05-30 21:38   ` David Rientjes
    2012-06-07 23:18   ` Zhu Yanhai
         [not found] ` <alpine.DEB.2.00.1205301433490.9716@chino.kir.corp.google.com>
         [not found]   ` <alpine.DEB.2.00.1205301433490.9716-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-30 23:20     ` Kirill A. Shutemov
    2012-05-31  0:08     ` Kamezawa Hiroyuki
         [not found]       ` <4FC6B68C.2070703-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  0:22         ` KOSAKI Motohiro
         [not found]       ` <CAHGf_=pFbsy4FO_UNu6O1-KyTd6O=pkmR8=3EGuZB5Reu3Vb9w@mail.gmail.com>
         [not found]         ` <CAHGf_=pFbsy4FO_UNu6O1-KyTd6O=pkmR8=3EGuZB5Reu3Vb9w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
    2012-05-31  0:33           ` Kamezawa Hiroyuki
         [not found]         ` <4FC6BC3E.5010807@jp.fujitsu.com>
         [not found]           ` <4FC6BC3E.5010807-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  0:44             ` David Rientjes
         [not found]           ` <alpine.DEB.2.00.1205301737530.25774@chino.kir.corp.google.com>
         [not found]             ` <alpine.DEB.2.00.1205301737530.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  0:53               ` Kamezawa Hiroyuki
         [not found]             ` <4FC6C111.2060108@jp.fujitsu.com>
         [not found]               ` <4FC6C111.2060108-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  1:31                 ` David Rientjes
         [not found]                   ` <alpine.DEB.2.00.1205301831270.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  2:33                     ` Kamezawa Hiroyuki
         [not found]                       ` <4FC6D881.4090706-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  5:02                         ` David Rientjes
         [not found]                       ` <alpine.DEB.2.00.1205302156090.25774@chino.kir.corp.google.com>
         [not found]                         ` <alpine.DEB.2.00.1205302156090.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  5:36                           ` Kamezawa Hiroyuki
         [not found]                         ` <4FC70355.70805@jp.fujitsu.com>
         [not found]                           ` <4FC70355.70805-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  6:17                             ` David Rientjes
         [not found]                               ` <alpine.DEB.2.00.1205302314190.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  6:23                                 ` KOSAKI Motohiro
         [not found]                                   ` <4FC70E5E.1010003-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    2012-05-31  6:28                                     ` David Rientjes
         [not found]                                       ` <alpine.DEB.2.00.1205302325500.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  6:37                                         ` KOSAKI Motohiro
         [not found]                                           ` <4FC711A5.4090003-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    2012-05-31  6:56                                             ` David Rientjes
         [not found]                                               ` <alpine.DEB.2.00.1205302351510.25774-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  7:09                                                 ` KOSAKI Motohiro
         [not found]                                                   ` <CAHGf_=qVDVT6VW2j9gE3bQKwizW24iivrDryiCKoxVu4m_fWKw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
    2012-05-31  7:35                                                     ` David Rientjes
         [not found]                                                   ` <alpine.DEB.2.00.1205310028420.8864@chino.kir.corp.google.com>
         [not found]                                                     ` <alpine.DEB.2.00.1205310028420.8864-X6Q0R45D7oAcqpCFd4KODRPsWskHk0ljAL8bYrjMMd8@public.gmane.org>
    2012-05-31  7:42                                                       ` KOSAKI Motohiro
         [not found]                                                     ` <4FC720EE.3010307@gmail.com>
         [not found]                                                       ` <4FC720EE.3010307-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
    2012-05-31  7:57                                                         ` Johannes Weiner
    2012-05-31  7:58                                                         ` Gao feng
         [not found]                                                       ` <4FC724B1.70508@cn.fujitsu.com>
         [not found]                                                         ` <4FC724B1.70508-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    2012-05-31  8:32                                                           ` Glauber Costa
         [not found]                                                         ` <4FC72CA4.6080708@parallels.com>
         [not found]                                                           ` <4FC72CA4.6080708-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
    2012-05-31  8:51                                                             ` Kamezawa Hiroyuki
    2012-05-31  8:55                                                             ` Gao feng
         [not found]                                                           ` <4FC73203.2070009@cn.fujitsu.com>
         [not found]                                                             ` <4FC73203.2070009-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
    2012-05-31  8:56                                                               ` Glauber Costa
         [not found]                                                           ` <4FC73110.6010107@jp.fujitsu.com>
         [not found]                                                             ` <4FC73110.6010107-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  8:59                                                               ` Glauber Costa
    2012-05-31  7:07                                             ` Kamezawa Hiroyuki
         [not found]                                           ` <4FC718BA.8060608@jp.fujitsu.com>
         [not found]                                             ` <4FC718BA.8060608-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
    2012-05-31  7:23                                               ` KOSAKI Motohiro
    2012-05-31  8:29                                 ` Glauber Costa
         [not found]   ` <20120530232004.GA15423@shutemov.name>
         [not found]     ` <20120530232004.GA15423-oKw7cIdHH8eLwutG50LtGA@public.gmane.org>
    2012-05-31  0:35       ` David Rientjes
    2012-05-29  2:56 Gao feng
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox