From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752623AbbJLNry (ORCPT ); Mon, 12 Oct 2015 09:47:54 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:33661 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752183AbbJLNrw (ORCPT ); Mon, 12 Oct 2015 09:47:52 -0400 X-AuditID: cbfee68d-f79ae6d00000149a-12-561bba06eb6f From: Pintu Kumar To: akpm@linux-foundation.org, minchan@kernel.org, dave@stgolabs.net, pintu.k@samsung.com, mhocko@suse.cz, koct9i@gmail.com, rientjes@google.com, hannes@cmpxchg.org, penguin-kernel@i-love.sakura.ne.jp, bywxiaobai@163.com, mgorman@suse.de, vbabka@suse.cz, js1304@gmail.com, kirill.shutemov@linux.intel.com, alexander.h.duyck@redhat.com, sasha.levin@oracle.com, cl@linux.com, fengguang.wu@intel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: cpgs@samsung.com, pintu_agarwal@yahoo.com, pintu.ping@gmail.com, vishnu.ps@samsung.com, rohit.kr@samsung.com, c.rajkumar@samsung.com, sreenathd@samsung.com Subject: [PATCH 1/1] mm: vmstat: Add OOM victims count in vmstat counter Date: Mon, 12 Oct 2015 19:03:20 +0530 Message-id: <1444656800-29915-1-git-send-email-pintu.k@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1443696523-27262-1-git-send-email-pintu.k@samsung.com> References: <1443696523-27262-1-git-send-email-pintu.k@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAAzWSf1DLcRjHfb4/t12d722Vj3UcHcKdWD/4YH7c5Y/PPxzX6Q/nsOarnG3t tsqvO3QjlIbKNlpuGclaxi5SRzfLH6hOfiRkOCQljbB+qNjs/Pd+nvfreT/PH4+AFA9SUsFO TQ6v0yhUcYyIckYl71/ANMamL6p8n4CsLieDxibMFDJa41FRWSmBOgP9APV656Gal06A/D0u EtW416Kzdypo9LLHSqErx9/R6GmjlUFvnH9oVDrwCaA+wxCNqn75WVR+eIBGxqFmFnX2migU +NrFooKL1wnUYzhCIfu9LhIVfTBQqDzfCFCZ0QdWx2J7dRmNm/v9JG4452OxzZ2LG2odBLbf 7iWw23Gcwe7BEhbft/ym8MdnZgKff7ABf+9+RWF/UweDjXUOgM+UH8SttnvseskmkXw7r9qZ x+sWrtwmyno94CO0z6bvKWuyUofAR1gIhALIJcOht5V0WMfA9jcuphCIBGKuGsA/HZ/p/1DJ lQ42bJwD8OboOBUu8gnoahlnQxTDxcPh/t8gZERxD0lodjaRoYLk7AAeHTH9oyQchoUeLxnS FDcbXjj5kwnpSC4Vjv64HJwWBPfNgNYSeagt5NbAuku1ZKgtDiL1trxQJOQMQthq+R/DwUCp lwqPToNuDxm+eiq8W/2COgUkNjDJAaJ5rVKrz8jUyRL0CrU+V5OZoMxWu0HwFVomPhXfAl2e 5V7ACUBcRKSgTpouphV5+r1qL0gJbjhNSqOV2cHv0eRslSUtTkQpySlJiUuWLo6bEjlTOpIm 5jIVOfwuntfyuq26XBWv9wJCIJQeAlbVo+Wxa7PBY9OJihiZKSPjScTFMVk3W7XDbOr+JlmV 1nDj2BJFy+3dlZbWL762tkbNWPHG0mPOvZbnw+tSowmJuq9Ybg/Mtshr2cnM1bnKOZc8j2eN uzpr54lmobTN01Yo+lrE3YH8oi3LuqrK99Xv+DGyLkJ24FpbkV/enl4QR+mzFLL5pE6v+AtZ WHFTBQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPKsWRmVeSWpSXmKPExsVy+t9jQV22XdJhBjsXq1jMWb+GzeLPv+ks Fn1z1C26p0xmsrj+7Q2jxctDmharb65htHj/fD2zxepNvhYz985ltbj5fA6LxcrOB6wWl3fN YbO4t+Y/q8Xkd88YLV41f2e1WPb1PbvF7JZ3rBZ93w+zW1x/OY3F4tvb2+wWbUs2Mlk8b25l sVh85DazRffjZhaL2Y19jBZT+u4yOkh7LF4xhdXj8Jv3zB47Z91l91iwqdRj59pVTB6L97xk 8ti0qpPNY9OnSeweJ2b8ZvF4cmU6k8e8k4EeH5/eYvF4v+8qm0ffllWMHlNn13ucWXCEPUA4 qoHRJiM1MSW1SCE1Lzk/JTMv3VbJOzjeOd7UzMBQ19DSwlxJIS8xN9VWycUnQNctMwcYOkoK ZYk5pUChgMTiYiV9O0wTQkPcdC1gGiN0fUOC4HqMDNBAwhrGjDvv7jIVXJGrmLJvDksD4xOJ LkZODgkBE4lJK6+yQ9hiEhfurWfrYuTiEBKYxSix7ddfFginkUli/em/YFVsAuoSP978ZgRJ iAicYpaYvmYfM4jDLLCYUaL95zSwKmEBD4muA4eYQWwWAVWJRf1f2EBsXgFniV+flwN1cwDt U5CYM8kGJMwp4CKxZelaZpCwEFDJ9gVlExh5FzAyrGKUSC1ILihOSs81zEst1ytOzC0uzUvX S87P3cQITjzPpHYwHtzlfohRgINRiYeXY4tUmBBrYllxZe4hRgkOZiURXqWJ0mFCvCmJlVWp RfnxRaU5qcWHGE2BzprILCWanA9Minkl8YbGJuamxqaWJhYmZpZK4rw3DjGECQmkJ5akZqem FqQWwfQxcXBKNTDGiD1LmPwi4t9y95Of78ToSzP6qu1TkJiZkfToweWNB2NDpi7Lb+A8ZOYp 4ah7yWTX6S3xEZueRYQ0T4nnfhr33FjEQUZhQ5RU+NqmGvbIuUd8lzdv37To3ukZkV93/f7e +TJb+sOraRt2fT8ZeMystClizbONFe48p9O/hpltf+uxuXjP4ZUPlFiKMxINtZiLihMBCguI vVIDAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch maintains the number of oom victims kill count in /proc/vmstat. Currently, we are dependent upon kernel logs when the kernel OOM occurs. But kernel OOM can went passed unnoticed by the developer as it can silently kill some background applications/services. In some small embedded system, it might be possible that OOM is captured in the logs but it was over-written due to ring-buffer. Thus this interface can quickly help the user in analyzing, whether there were any OOM kill happened in the past, or whether the system have ever entered the oom kill stage till date. Thus, it can be beneficial under following cases: 1. User can monitor kernel oom kill scenario without looking into the kernel logs. 2. It can help in tuning the watermark level in the system. 3. It can help in tuning the low memory killer behavior in user space. 4. It can be helpful on a logless system or if klogd logging (/var/log/messages) are disabled. A snapshot of the result of 3 days of over night test is shown below: System: ARM Cortex A7, 1GB RAM, 8GB EMMC Linux: 3.10.xx Category: reference smart phone device Loglevel: 7 Conditions: Fully loaded, BT/WiFi/GPS ON Tests: auto launching of ~30+ apps using test scripts, in a loop for 3 days. At the end of tests, check: $ cat /proc/vmstat nr_oom_victims 6 As we noticed, there were around 6 oom kill victims. The OOM is bad for any system. So, this counter can help in quickly tuning the OOM behavior of the system, without depending on the logs. Signed-off-by: Pintu Kumar --- include/linux/vm_event_item.h | 1 + mm/oom_kill.c | 2 ++ mm/page_alloc.c | 1 - mm/vmstat.c | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index 2b1cef8..dd2600d 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -57,6 +57,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, #ifdef CONFIG_HUGETLB_PAGE HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, #endif + NR_OOM_VICTIMS, UNEVICTABLE_PGCULLED, /* culled to noreclaim list */ UNEVICTABLE_PGSCANNED, /* scanned for reclaimability */ UNEVICTABLE_PGRESCUED, /* rescued from noreclaim list */ diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 03b612b..802b8a1 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -570,6 +570,7 @@ void oom_kill_process(struct oom_control *oc, struct task_struct *p, * space under its control. */ do_send_sig_info(SIGKILL, SEND_SIG_FORCED, victim, true); + count_vm_event(NR_OOM_VICTIMS); mark_oom_victim(victim); pr_err("Killed process %d (%s) total-vm:%lukB, anon-rss:%lukB, file-rss:%lukB\n", task_pid_nr(victim), victim->comm, K(victim->mm->total_vm), @@ -600,6 +601,7 @@ void oom_kill_process(struct oom_control *oc, struct task_struct *p, task_pid_nr(p), p->comm); task_unlock(p); do_send_sig_info(SIGKILL, SEND_SIG_FORCED, p, true); + count_vm_event(NR_OOM_VICTIMS); } rcu_read_unlock(); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 9bcfd70..fafb09d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2761,7 +2761,6 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, schedule_timeout_uninterruptible(1); return NULL; } - /* * Go through the zonelist yet one more time, keep very high watermark * here, this is only to catch a parallel oom killing, we must fail if diff --git a/mm/vmstat.c b/mm/vmstat.c index 1fd0886..8503a2e 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -808,6 +808,7 @@ const char * const vmstat_text[] = { "htlb_buddy_alloc_success", "htlb_buddy_alloc_fail", #endif + "nr_oom_victims", "unevictable_pgs_culled", "unevictable_pgs_scanned", "unevictable_pgs_rescued", -- 1.7.9.5