[PATCH] [Support] Make GetMallocUsage() aware of jemalloc
Davide Italiano
davide at freebsd.org
Sun Feb 15 23:40:50 PST 2015
When getting info about heap usage (e.g. ld --stats) I think it is desiderable to have something more fine-grained than sbrk() on systems where the default allocator is jemalloc (namely, FreeBSD). I wasn't sure who to put as reviewer to this change, feel free to comment. Also, I noticed that GetMallocUsage() isn't unit-tested (or at least I didn't find where it is unit-tested), so, maybe , enhancing the testing coverage might be considered in this (or a subsequent) commit.
REPOSITORY
rL LLVM
http://reviews.llvm.org/D7663
Files:
cmake/config-ix.cmake
include/llvm/Config/config.h.cmake
include/llvm/Config/config.h.in
lib/Support/Unix/Process.inc
Index: cmake/config-ix.cmake
===================================================================
--- cmake/config-ix.cmake
+++ cmake/config-ix.cmake
@@ -163,6 +163,7 @@
check_symbol_exists(writev sys/uio.h HAVE_WRITEV)
endif()
check_symbol_exists(nearbyintf math.h HAVE_NEARBYINTF)
+check_symbol_exists(mallctl malloc_np.h HAVE_MALLCTL)
check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO)
check_symbol_exists(malloc_zone_statistics malloc/malloc.h
HAVE_MALLOC_ZONE_STATISTICS)
Index: include/llvm/Config/config.h.cmake
===================================================================
--- include/llvm/Config/config.h.cmake
+++ include/llvm/Config/config.h.cmake
@@ -225,6 +225,9 @@
/* Define to 1 if you have the `malloc_zone_statistics' function. */
#cmakedefine HAVE_MALLOC_ZONE_STATISTICS ${HAVE_MALLOC_ZONE_STATISTICS}
+/* Define to 1 if you have the `mallctl` function. */
+#cmakedefine HAVE_MALLCTL ${HAVE_MALLCTL}
+
/* Define to 1 if you have the `mkdtemp' function. */
#cmakedefine HAVE_MKDTEMP ${HAVE_MKDTEMP}
Index: include/llvm/Config/config.h.in
===================================================================
--- include/llvm/Config/config.h.in
+++ include/llvm/Config/config.h.in
@@ -210,6 +210,9 @@
/* Define if mallinfo() is available on this platform. */
#undef HAVE_MALLINFO
+/* Define if mallctl() is available on this plaform. */
+#undef HAVE_MALLCTL
+
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
Index: lib/Support/Unix/Process.inc
===================================================================
--- lib/Support/Unix/Process.inc
+++ lib/Support/Unix/Process.inc
@@ -39,6 +39,9 @@
!defined(__OpenBSD__) && !defined(__Bitrig__)
#include <malloc.h>
#endif
+#if defined(HAVE_MALLCTL)
+#include <malloc_np.h>
+#endif
#ifdef HAVE_MALLOC_MALLOC_H
#include <malloc/malloc.h>
#endif
@@ -98,6 +101,13 @@
malloc_statistics_t Stats;
malloc_zone_statistics(malloc_default_zone(), &Stats);
return Stats.size_in_use; // darwin
+#elif defined(HAVE_MALLCTL)
+ size_t alloc, sz;
+ sz = sizeof(size_t);
+ if (mallctl("stats.allocated", &alloc, &sz, NULL, 0) == 0)
+ return alloc;
+ else
+ return 0;
#elif defined(HAVE_SBRK)
// Note this is only an approximation and more closely resembles
// the value returned by mallinfo in the arena field.
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7663.20003.patch
Type: text/x-patch
Size: 2374 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150216/760e3ada/attachment.bin>
More information about the llvm-commits
mailing list