From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1034394AbdAEURe (ORCPT ); Thu, 5 Jan 2017 15:17:34 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38346 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1032792AbdAEURS (ORCPT ); Thu, 5 Jan 2017 15:17:18 -0500 From: Waiman Long To: Thomas Gleixner , Andrew Morton Cc: linux-kernel@vger.kernel.org, "Du Changbin" , Christian Borntraeger , Jan Stancek , Waiman Long Subject: [RESEND PATCH v2 1/3] debugobjects: Track number of kmem_cache_alloc/kmem_cache_free done Date: Thu, 5 Jan 2017 15:17:03 -0500 Message-Id: <1483647425-4135-2-git-send-email-longman@redhat.com> In-Reply-To: <1483647425-4135-1-git-send-email-longman@redhat.com> References: <1483647425-4135-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.25]); Thu, 05 Jan 2017 20:17:19 +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 04c1ef7..d78673e 100644 --- a/lib/debugobjects.c +++ b/lib/debugobjects.c @@ -55,6 +55,12 @@ struct debug_bucket { 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); @@ -102,6 +108,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); } @@ -173,6 +180,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. @@ -758,6 +766,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