aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiam Mark <lmark@codeaurora.org>2014-06-03 13:57:47 -0700
committerIliyan Malchev <malchev@google.com>2014-11-18 15:21:18 -0800
commit16e203df760f2cc385370ea681aedc2e4bb28c0c (patch)
tree70ea766f0fae9949803c04012ca1d03dc29dcb4a
parentafd912bfd26fe96b271d9d52a058d486e1ef6b48 (diff)
lowmemorykiller: enhance debug informationandroid-5.0.1_r0.4
Add extra debug information to make it easier to both determine why the lowmemorykiller killed a process and to help find the source of memory leaks. Also increase the debug level for "select" statements to help prevent flooding the log. Bug: 17871993 Change-Id: I3b6876c5ecdf192ecc271aed3f37579f66d47a08 Signed-off-by: Liam Mark <lmark@codeaurora.org> Signed-off-by: Naveen Ramaraj <nramaraj@codeaurora.org> Signed-off-by: Iliyan Malchev <malchev@google.com> Conflicts: drivers/staging/android/lowmemorykiller.c
-rw-r--r--drivers/staging/android/lowmemorykiller.c49
1 files changed, 35 insertions, 14 deletions
diff --git a/drivers/staging/android/lowmemorykiller.c b/drivers/staging/android/lowmemorykiller.c
index 71ea72339d19..d1fa1e261311 100644
--- a/drivers/staging/android/lowmemorykiller.c
+++ b/drivers/staging/android/lowmemorykiller.c
@@ -40,6 +40,8 @@
#include <linux/swap.h>
#include <linux/mutex.h>
#include <linux/delay.h>
+#include <linux/fs.h>
+#include <linux/cpuset.h>
static uint32_t lowmem_debug_level = 1;
static int lowmem_adj[6] = {
@@ -352,22 +354,41 @@ static int lowmem_shrink(struct shrinker *s, struct shrink_control *sc)
selected = p;
selected_tasksize = tasksize;
selected_oom_score_adj = oom_score_adj;
- lowmem_print(2, "select '%s' (%d), adj %hd, size %d, to kill\n",
- p->comm, p->pid, oom_score_adj, tasksize);
+ lowmem_print(3, "select '%s' (%d), adj %hd, size %d, to kill\n",
+ p->comm, p->pid, oom_score_adj, tasksize);
}
if (selected) {
- lowmem_print(1, "Killing '%s' (%d), adj %hd,\n" \
- " to free %ldkB on behalf of '%s' (%d) because\n" \
- " cache %ldkB is below limit %ldkB for oom_score_adj %hd\n"
- " Free memory is %ldkB above reserved\n",
- selected->comm, selected->pid,
- selected_oom_score_adj,
- selected_tasksize * (long)(PAGE_SIZE / 1024),
- current->comm, current->pid,
- other_file * (long)(PAGE_SIZE / 1024),
- minfree * (long)(PAGE_SIZE / 1024),
- min_score_adj,
- other_free * (long)(PAGE_SIZE / 1024));
+ lowmem_print(1, "Killing '%s' (%d), adj %hd,\n" \
+ " to free %ldkB on behalf of '%s' (%d) because\n" \
+ " cache %ldkB is below limit %ldkB for oom_score_adj %hd\n" \
+ " Free memory is %ldkB above reserved.\n" \
+ " Free CMA is %ldkB\n" \
+ " Total reserve is %ldkB\n" \
+ " Total free pages is %ldkB\n" \
+ " Total file cache is %ldkB\n" \
+ " GFP mask is 0x%x\n",
+ selected->comm, selected->pid,
+ selected_oom_score_adj,
+ selected_tasksize * (long)(PAGE_SIZE / 1024),
+ current->comm, current->pid,
+ other_file * (long)(PAGE_SIZE / 1024),
+ minfree * (long)(PAGE_SIZE / 1024),
+ min_score_adj,
+ other_free * (long)(PAGE_SIZE / 1024),
+ global_page_state(NR_FREE_CMA_PAGES) *
+ (long)(PAGE_SIZE / 1024),
+ totalreserve_pages * (long)(PAGE_SIZE / 1024),
+ global_page_state(NR_FREE_PAGES) *
+ (long)(PAGE_SIZE / 1024),
+ global_page_state(NR_FILE_PAGES) *
+ (long)(PAGE_SIZE / 1024),
+ sc->gfp_mask);
+
+ if (lowmem_debug_level >= 2 && selected_oom_score_adj == 0) {
+ show_mem(SHOW_MEM_FILTER_NODES);
+ dump_tasks(NULL, NULL);
+ }
+
lowmem_deathpending_timeout = jiffies + HZ;
send_sig(SIGKILL, selected, 0);
set_tsk_thread_flag(selected, TIF_MEMDIE);