[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