[PATCH] add mallinfo() information to pool-usage report

Christof Schmitt cs at samba.org
Thu Apr 4 22:39:03 UTC 2019


On Thu, Apr 04, 2019 at 12:21:40PM -0700, Jeremy Allison via samba-technical wrote:
> On Thu, Apr 04, 2019 at 11:00:34AM +0200, Ralph Wuerthner via samba-technical wrote:
> > Hi!
> > 
> > Please see attached patch set to enhance the pool-usage report from
> > smbcontrol with information available from mallinfo(). In addition to the
> > talloc report we found the mallinfo() data quite handy to investigate a
> > potential memory leak in Samba. To my knowledge mallinfo() is available on
> > Linux, BSD, and AIX.
> > The CI pipeline is running at
> > https://gitlab.com/samba-team/devel/samba/pipelines/55161485
> 
> LGTM. RB+.
> 
> Can I get a second Team reviewer ?

RB+

Pushed to autobuild.

Christof

> 
> Jeremy.
> 
> 
> > From d221912134f4750bdee23d1dfbe2531e03c31d6d Mon Sep 17 00:00:00 2001
> > From: Ralph Wuerthner <ralph.wuerthner at de.ibm.com>
> > Date: Fri, 29 Mar 2019 12:30:45 +0100
> > Subject: [PATCH 1/2] s3-messages: modify msg_pool_usage() to allow enhanced
> >  memory reports
> > 
> > Signed-off-by: Ralph Wuerthner <ralph.wuerthner at de.ibm.com>
> > ---
> >  source3/lib/tallocmsg.c | 23 +++++++++++++++++------
> >  1 file changed, 17 insertions(+), 6 deletions(-)
> > 
> > diff --git a/source3/lib/tallocmsg.c b/source3/lib/tallocmsg.c
> > index 18b16ed..b5ab21c 100644
> > --- a/source3/lib/tallocmsg.c
> > +++ b/source3/lib/tallocmsg.c
> > @@ -30,21 +30,32 @@ static void msg_pool_usage(struct messaging_context *msg_ctx,
> >  			   struct server_id src,
> >  			   DATA_BLOB *data)
> >  {
> > -	char *report;
> > +	char *report = NULL;
> > +	int iov_size = 0;
> > +	struct iovec iov[1];
> >  
> >  	SMB_ASSERT(msg_type == MSG_REQ_POOL_USAGE);
> >  
> >  	DEBUG(2,("Got POOL_USAGE\n"));
> >  
> >  	report = talloc_report_str(msg_ctx, NULL);
> > -
> >  	if (report != NULL) {
> > -		messaging_send_buf(msg_ctx, src, MSG_POOL_USAGE,
> > -				   (uint8_t *)report,
> > -				   talloc_get_size(report)-1);
> > +		iov[iov_size].iov_base = report;
> > +		iov[iov_size].iov_len = talloc_get_size(report) - 1;
> > +		iov_size++;
> > +	}
> > +
> > +	if (iov_size) {
> > +		messaging_send_iov(msg_ctx,
> > +				   src,
> > +				   MSG_POOL_USAGE,
> > +				   iov,
> > +				   iov_size,
> > +				   NULL,
> > +				   0);
> >  	}
> >  
> > -	talloc_free(report);
> > +	TALLOC_FREE(report);
> >  }
> >  
> >  /**
> > -- 
> > 2.7.4
> > 
> > 
> > From 7a192974651567ec16b60a5c0fd22ac83da6c2d8 Mon Sep 17 00:00:00 2001
> > From: Ralph Wuerthner <ralph.wuerthner at de.ibm.com>
> > Date: Fri, 29 Mar 2019 12:44:50 +0100
> > Subject: [PATCH 2/2] s3-messages: add mallinfo() information to pool-usage
> >  report
> > 
> > Signed-off-by: Ralph Wuerthner <ralph.wuerthner at de.ibm.com>
> > ---
> >  source3/lib/tallocmsg.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-
> >  source3/wscript         | 12 ++++++++++++
> >  2 files changed, 61 insertions(+), 1 deletion(-)
> > 
> > diff --git a/source3/lib/tallocmsg.c b/source3/lib/tallocmsg.c
> > index b5ab21c..9be1bf5 100644
> > --- a/source3/lib/tallocmsg.c
> > +++ b/source3/lib/tallocmsg.c
> > @@ -19,7 +19,46 @@
> >  #include "includes.h"
> >  #include "messages.h"
> >  #include "lib/util/talloc_report.h"
> > +#ifdef HAVE_MALLINFO
> > +#include <malloc.h>
> > +#endif /* HAVE_MALLINFO */
> >  
> > + /**
> > + * Prepare memory allocation report based on mallinfo()
> > + **/
> > +static char *get_mallinfo_report(void *mem_ctx)
> > +{
> > +	char *report = NULL;
> > +#ifdef HAVE_MALLINFO
> > +	struct mallinfo mi;
> > +
> > +	mi = mallinfo();
> > +	report = talloc_asprintf(mem_ctx,
> > +				 "mallinfo:\n"
> > +				 "    arena: %d\n"
> > +				 "    ordblks: %d\n"
> > +				 "    smblks: %d\n"
> > +				 "    hblks: %d\n"
> > +				 "    hblkhd: %d\n"
> > +				 "    usmblks: %d\n"
> > +				 "    fsmblks: %d\n"
> > +				 "    uordblks: %d\n"
> > +				 "    fordblks: %d\n"
> > +				 "    keepcost: %d\n",
> > +				 mi.arena,
> > +				 mi.ordblks,
> > +				 mi.smblks,
> > +				 mi.hblks,
> > +				 mi.hblkhd,
> > +				 mi.usmblks,
> > +				 mi.fsmblks,
> > +				 mi.uordblks,
> > +				 mi.fordblks,
> > +				 mi.keepcost);
> > +#endif /* HAVE_MALLINFO */
> > +
> > +	return report;
> > +}
> >  /**
> >   * Respond to a POOL_USAGE message by sending back string form of memory
> >   * usage stats.
> > @@ -31,8 +70,9 @@ static void msg_pool_usage(struct messaging_context *msg_ctx,
> >  			   DATA_BLOB *data)
> >  {
> >  	char *report = NULL;
> > +	char *mreport = NULL;
> >  	int iov_size = 0;
> > -	struct iovec iov[1];
> > +	struct iovec iov[2];
> >  
> >  	SMB_ASSERT(msg_type == MSG_REQ_POOL_USAGE);
> >  
> > @@ -45,6 +85,13 @@ static void msg_pool_usage(struct messaging_context *msg_ctx,
> >  		iov_size++;
> >  	}
> >  
> > +	mreport = get_mallinfo_report(msg_ctx);
> > +	if (mreport != NULL) {
> > +		iov[iov_size].iov_base = mreport;
> > +		iov[iov_size].iov_len = talloc_get_size(mreport) - 1;
> > +		iov_size++;
> > +	}
> > +
> >  	if (iov_size) {
> >  		messaging_send_iov(msg_ctx,
> >  				   src,
> > @@ -56,6 +103,7 @@ static void msg_pool_usage(struct messaging_context *msg_ctx,
> >  	}
> >  
> >  	TALLOC_FREE(report);
> > +	TALLOC_FREE(mreport);
> >  }
> >  
> >  /**
> > diff --git a/source3/wscript b/source3/wscript
> > index c93b605..97b51bb 100644
> > --- a/source3/wscript
> > +++ b/source3/wscript
> > @@ -1517,6 +1517,18 @@ main() {
> >                      define='HAVE_UNSHARE_CLONE_FS',
> >                      msg='for Linux unshare(CLONE_FS)')
> >  
> > +    # Check for mallinfo
> > +    conf.CHECK_CODE('''
> > +    struct mallinfo mi;
> > +    int tmp;
> > +
> > +    mi = mallinfo();
> > +    tmp = mi.arena + mi.ordblks + mi.smblks + mi.hblks +
> > +          mi.hblkhd + mi.usmblks + mi.fsmblks +  mi.uordblks +
> > +          mi.fordblks + mi.keepcost;
> > +    return tmp;
> > +    ''', 'HAVE_MALLINFO', msg="Checking for mallinfo()", headers='malloc.h')
> > +
> >      #
> >      # cluster support (CTDB)
> >      #
> > -- 
> > 2.7.4
> > 
> 
> 



More information about the samba-technical mailing list