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 ...
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 /* ...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, --
I've mentioned it in the NOTE section as well, I wanted more opinions before going that route. I'll resend v3. -- Balbir --
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 --
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 --
OK, I have the code with PATH_MAX ready. I'll send that out. -- Balbir --
