Re: [-mm patch] Show memcg information during OOM (v2)

Previous thread: Re: + drivers-gpu-drm-i915-intel_lvdsc-fix-locking-snafu.patch added to -mm tree by Andrew Morton on Monday, February 2, 2009 - 11:44 pm. (6 messages)

Next thread: XFS status update for January 2009 by Christoph Hellwig on Tuesday, February 3, 2009 - 1:09 am. (1 message)
From: Balbir Singh
Date: Tuesday, February 3, 2009 - 12:20 am

Description: Add RSS and swap to OOM output from memcg

From: Balbir Singh <balbir@linux.vnet.ibm.com>

Changelog v2..v1:

1. Add more information about task's memcg and the memcg
   over it's limit
2. Print data in KB
3. Move the print routine outside task_lock()
4. Use rcu_read_lock() around cgroup_path, strictly speaking it
   is not required, but relying on the current memcg implementation
   is not a good idea.

This patch displays memcg values like failcnt, usage and limit
when an OOM occurs due to memcg.

NOTE: In case the path exceeds 128 bytes, we omit printing the
name of the cgroups. It is possible to circumvent this problem
by using static arrays of PAGE_SIZE and we know that OOM is
serialized when invoked from the memory controller. This did
not seem like a good idea, but can be implemented if 128 bytes
seems like a severe limitation.

Thanks go out to Johannes Weiner, Li Zefan, David Rientjes,
Kamezawa Hiroyuki, Daisuke Nishimura and KOSAKI Motohiro for
review.

Sample output
-------------

Task in /a/x killed as a result of limit of /a
memory: usage 1048576kB, limit 1048576kB, failcnt 4183
memory+swap: usage 1400964kB, limit 9007199254740991kB, failcnt 0

Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---

 include/linux/memcontrol.h |    6 ++++
 mm/memcontrol.c            |   61 ++++++++++++++++++++++++++++++++++++++++++++
 mm/oom_kill.c              |    1 +
 3 files changed, 68 insertions(+), 0 deletions(-)


diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 326f45c..56f1af2 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -104,6 +104,8 @@ struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
 						      struct zone *zone);
 struct zone_reclaim_stat*
 mem_cgroup_get_reclaim_stat_from_page(struct page *page);
+extern void mem_cgroup_print_mem_info(struct mem_cgroup *memcg,
+					struct task_struct *p);
 
 #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
 ...
From: Balbir Singh
Date: Tuesday, February 3, 2009 - 12:27 am

Checkpatch caught an additional space, so here is the patch again


Description: Add RSS and swap to OOM output from memcg

From: Balbir Singh <balbir@linux.vnet.ibm.com>

Changelog v2..v1:

1. Add more information about task's memcg and the memcg
   over it's limit
2. Print data in KB
3. Move the print routine outside task_lock()
4. Use rcu_read_lock() around cgroup_path, strictly speaking it
   is not required, but relying on the current memcg implementation
   is not a good idea.


This patch displays memcg values like failcnt, usage and limit
when an OOM occurs due to memcg.

Thanks go out to Johannes Weiner, Li Zefan, David Rientjes,
Kamezawa Hiroyuki, Daisuke Nishimura and KOSAKI Motohiro for
review.

Sample output
-------------

Task in /a/x killed as a result of limit of /a
memory: usage 1048576kB, limit 1048576kB, failcnt 4183
memory+swap: usage 1400964kB, limit 9007199254740991kB, failcnt 0

Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---

 include/linux/memcontrol.h |    6 ++++
 mm/memcontrol.c            |   61 ++++++++++++++++++++++++++++++++++++++++++++
 mm/oom_kill.c              |    1 +
 3 files changed, 68 insertions(+), 0 deletions(-)


diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 326f45c..56f1af2 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -104,6 +104,8 @@ struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
 						      struct zone *zone);
 struct zone_reclaim_stat*
 mem_cgroup_get_reclaim_stat_from_page(struct page *page);
+extern void mem_cgroup_print_mem_info(struct mem_cgroup *memcg,
+					struct task_struct *p);
 
 #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
 extern int do_swap_account;
@@ -270,6 +272,10 @@ mem_cgroup_get_reclaim_stat_from_page(struct page *page)
 	return NULL;
 }
 
+void mem_cgroup_print_mem_info(struct mem_cgroup *memcg, struct task_struct *p)
+{
+}
+
 #endif /* CONFIG_CGROUP_MEM_CONT */
 
 #endif /* ...
From: KAMEZAWA Hiroyuki
Date: Tuesday, February 3, 2009 - 1:04 am

On Tue, 3 Feb 2009 12:57:01 +0530

IIUC, this oom_kill is serialized by memcg_tasklist mutex.

making this as

static char task_memcg_name[PATH_MAX];
static char memcg_name[PATH_MAX];

is ok, I think. and the patch will be more simple.

Thanks,

--

From: Balbir Singh
Date: Tuesday, February 3, 2009 - 2:00 am

I've mentioned it in the NOTE section as well, I wanted more opinions
before going that route. I'll resend v3. 

-- 
	Balbir
--

From: Balbir Singh
Date: Tuesday, February 3, 2009 - 3:19 am

I am having second thoughts about this one. It introduces a standard
overhead of 2 pages on x86*, while the first one will work for most
cases and all the overhead is on stack, which disappears quickly.
That is the reason I did not do it in the first place and put it as a
NOTE.
 
-- 
	Balbir
--

From: KAMEZAWA Hiroyuki
Date: Tuesday, February 3, 2009 - 3:28 am

On Tue, 3 Feb 2009 15:49:21 +0530
But *128* is tooooooo short ;)
And, your patch makes "OOM Message Format" unstable.
From system administration view, it's unacceptable.
Not printing name at all is better than "printed out sometimes you lucky"

Thanks,
-Kame



--

From: Balbir Singh
Date: Tuesday, February 3, 2009 - 8:16 am

OK, I have the code with PATH_MAX ready. I'll send that out.
 
-- 
	Balbir
--

Previous thread: Re: + drivers-gpu-drm-i915-intel_lvdsc-fix-locking-snafu.patch added to -mm tree by Andrew Morton on Monday, February 2, 2009 - 11:44 pm. (6 messages)

Next thread: XFS status update for January 2009 by Christoph Hellwig on Tuesday, February 3, 2009 - 1:09 am. (1 message)