summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorRalph Wuerthner <ralph.wuerthner@de.ibm.com>2019-03-29 12:44:50 +0100
committerChristof Schmitt <cs@samba.org>2019-04-04 23:39:25 +0000
commit15afc4fb18f937bf4f7008b161a29256cd8660ea (patch)
treee42de211e5f0e67246af0099adf1cb6195b2cf6c /source3
parentb4d4778dd2c5831204fb484a6c6872ab3cbebf01 (diff)
downloadsamba-15afc4fb18f937bf4f7008b161a29256cd8660ea.tar.gz
samba-15afc4fb18f937bf4f7008b161a29256cd8660ea.tar.bz2
samba-15afc4fb18f937bf4f7008b161a29256cd8660ea.zip
s3-messages: add mallinfo() information to pool-usage report
Signed-off-by: Ralph Wuerthner <ralph.wuerthner@de.ibm.com> Reviewed-by: Jeremy Allison <jra@samba.org> Reviewed-by: Christof Schmitt <cs@samba.org> Autobuild-User(master): Christof Schmitt <cs@samba.org> Autobuild-Date(master): Thu Apr 4 23:39:25 UTC 2019 on sn-devel-144
Diffstat (limited to 'source3')
-rw-r--r--source3/lib/tallocmsg.c50
-rw-r--r--source3/wscript12
2 files changed, 61 insertions, 1 deletions
diff --git a/source3/lib/tallocmsg.c b/source3/lib/tallocmsg.c
index b5ab21c5661..9be1bf58a3c 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 c93b6056f29..97b51bb1a3e 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)
#