From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758780AbcLAVve (ORCPT ); Thu, 1 Dec 2016 16:51:34 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42316 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751388AbcLAVvc (ORCPT ); Thu, 1 Dec 2016 16:51:32 -0500 From: Waiman Long To: Thomas Gleixner , Andrew Morton Cc: linux-kernel@vger.kernel.org, "Du Changbin" , Christian Borntraeger , Jan Stancek , Waiman Long Subject: [PATCH 2/3] debugobjects: Track number of kmem_cache_alloc/kmem_cache_free done Date: Thu, 1 Dec 2016 16:50:35 -0500 Message-Id: <1480629036-12713-3-git-send-email-longman@redhat.com> In-Reply-To: <1480629036-12713-1-git-send-email-longman@redhat.com> References: <1480629036-12713-1-git-send-email-longman@redhat.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 01 Dec 2016 21:51:32 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org New debugfs stat counters are added to track the numbers of kmem_cache_alloc() and kmem_cache_free() function calls to get a sense of how the internal debug objects cache management is performing. Signed-off-by: Waiman Long --- lib/debugobjects.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/debugobjects.c b/lib/debugobjects.c index bb415a7..820e733 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -58,6 +58,12 @@ struct debug_bucket { = ODEBUG_POOL_MIN_LEVEL; static struct debug_obj_descr *descr_test __read_mostly; +/* + * Track numbers of kmem_cache_alloc and kmem_cache_free done. + */ +static int debug_objects_alloc; +static int debug_objects_freed; + static void free_obj_work(struct work_struct *work); static DECLARE_WORK(debug_obj_work, free_obj_work); @@ -105,6 +111,7 @@ static void fill_pool(void) raw_spin_lock_irqsave(&pool_lock, flags); hlist_add_head(&new->node, &obj_pool); + debug_objects_alloc++; obj_pool_free++; raw_spin_unlock_irqrestore(&pool_lock, flags); } @@ -176,6 +183,7 @@ static void free_obj_work(struct work_struct *work) obj = hlist_entry(obj_pool.first, typeof(*obj), node); hlist_del(&obj->node); obj_pool_free--; + debug_objects_freed++; /* * We release pool_lock across kmem_cache_free() to * avoid contention on pool_lock. @@ -753,6 +761,8 @@ static int debug_stats_show(struct seq_file *m, void *v) seq_printf(m, "pool_min_free :%d\n", obj_pool_min_free); seq_printf(m, "pool_used :%d\n", obj_pool_used); seq_printf(m, "pool_max_used :%d\n", obj_pool_max_used); + seq_printf(m, "objects_alloc :%d\n", debug_objects_alloc); + seq_printf(m, "objects_freed :%d\n", debug_objects_freed); return 0; } -- 1.8.3.1