lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <a2eb8d2c-34b9-6027-66da-d8e8184285f1@alibaba-inc.com>
Date:   Tue, 28 Nov 2017 01:53:30 +0800
From:   "Yang Shi" <yang.s@...baba-inc.com>
To:     tglx@...utronix.de, longman@...hat.com
Cc:     linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 1/2] lib: debugobjects: export max loops counter

Hi Waiman & tglx,

I'm not sure who is the maintainer for lib/debugobjects.c now, I'm 
supposed tglx still is, however, get_maintainer.pl told me Waiman is the 
most active developer of this, so added Waiman in this loop in case he 
didn't see the patches on LKML.

Thanks,
Yang

On 11/17/17 11:43 AM, Yang Shi wrote:
> Currently max chain counter is exported to sysfs, it just record the
> counter of inner loop, however, there might be significant iterations of
> external loop then it may take significant amount of time to finish all
> of the checks. This may cuase lockup on !CONFIG_PREEMPT kernel build
> occasionally.
> 
> Record the counter of the max loops then export to sysfs so that the
> user can be aware of the real overhead.
> 
> Then the output of /sys/kernel/debug/debug_objects/stats looks like:
> 
> max_chain     :121
> max_loops     :543267
> warnings      :0
> fixups        :0
> pool_free     :1764
> pool_min_free :341
> pool_used     :86438
> pool_max_used :268887
> objs_allocated:6068254
> objs_freed    :5981076
> 
> Signed-off-by: Yang Shi <yang.s@...baba-inc.com>
> ---
>   lib/debugobjects.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/debugobjects.c b/lib/debugobjects.c
> index 2f5349c..166488d 100644
> --- a/lib/debugobjects.c
> +++ b/lib/debugobjects.c
> @@ -50,6 +50,7 @@ struct debug_bucket {
>   static struct kmem_cache	*obj_cache;
>   
>   static int			debug_objects_maxchain __read_mostly;
> +static int			debug_objects_maxloops __read_mostly;
>   static int			debug_objects_fixups __read_mostly;
>   static int			debug_objects_warnings __read_mostly;
>   static int			debug_objects_enabled __read_mostly
> @@ -720,7 +721,7 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size)
>   	enum debug_obj_state state;
>   	struct debug_bucket *db;
>   	struct debug_obj *obj;
> -	int cnt;
> +	int cnt, max_loops = 0;
>   
>   	saddr = (unsigned long) address;
>   	eaddr = saddr + size;
> @@ -765,7 +766,12 @@ static void __debug_check_no_obj_freed(const void *address, unsigned long size)
>   
>   		if (cnt > debug_objects_maxchain)
>   			debug_objects_maxchain = cnt;
> +
> +		max_loops += cnt;
>   	}
> +
> +	if (max_loops > debug_objects_maxloops)
> +		debug_objects_maxloops = max_loops;
>   }
>   
>   void debug_check_no_obj_freed(const void *address, unsigned long size)
> @@ -780,6 +786,7 @@ void debug_check_no_obj_freed(const void *address, unsigned long size)
>   static int debug_stats_show(struct seq_file *m, void *v)
>   {
>   	seq_printf(m, "max_chain     :%d\n", debug_objects_maxchain);
> +	seq_printf(m, "max_loops     :%d\n", debug_objects_maxloops);
>   	seq_printf(m, "warnings      :%d\n", debug_objects_warnings);
>   	seq_printf(m, "fixups        :%d\n", debug_objects_fixups);
>   	seq_printf(m, "pool_free     :%d\n", obj_pool_free);
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ