Changeset: 10d166b0195f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/10d166b0195f
Modified Files:
        cmake/monetdb-defines.cmake
        gdk/CMakeLists.txt
        gdk/gdk_utils.c
        monetdb5/mal/CMakeLists.txt
        monetdb_config.h.in
        tools/mserver/CMakeLists.txt
Branch: Mar2025
Log Message:

On SIGUSR1, print succinct information from malloc library.
We support jemalloc and glibc malloc (mallinfo2 function).


diffs (134 lines):

diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -84,6 +84,8 @@ function(monetdb_configure_defines)
   check_symbol_exists("strerror_r" "string.h" HAVE_STRERROR_R)
   check_function_exists("lockf" HAVE_LOCKF)
   check_symbol_exists("madvise" "sys/mman.h" HAVE_MADVISE)
+  check_function_exists("malloc_info" HAVE_MALLOC_INFO)
+  check_function_exists("mallinfo2" HAVE_MALLINFO2)
   check_symbol_exists("mremap" "sys/mman.h" HAVE_MREMAP)
   check_function_exists("nanosleep" HAVE_NANOSLEEP)
   check_function_exists("nl_langinfo" HAVE_NL_LANGINFO)
@@ -145,6 +147,16 @@ macro(monetdb_macro_variables)
   set(HAVE_RTREE ${RTREE_FOUND})
   set(HAVE_OPENSSL ${OPENSSL_FOUND})
 
+  if(MALLOC_FOUND)
+    if(${WITH_MALLOC} STREQUAL "jemalloc")
+      set(WITH_JEMALLOC 1)
+    elseif(${WITH_MALLOC} STREQUAL "mimalloc")
+      set(WITH_MIMALLOC 1)
+    elseif(${WITH_MALLOC} STREQUAL "tcmalloc")
+      set(WITH_TCMALLOC 1)
+    endif()
+  endif()
+
   if(PY3INTEGRATION)
     set(HAVE_LIBPY3 "${Python3_NumPy_FOUND}")
     set(PY3VER "${Python3_VERSION_MINOR}")
diff --git a/gdk/CMakeLists.txt b/gdk/CMakeLists.txt
--- a/gdk/CMakeLists.txt
+++ b/gdk/CMakeLists.txt
@@ -118,7 +118,8 @@ target_link_libraries(bat
   $<$<PLATFORM_ID:Windows>:ws2_32>
   $<$<BOOL:${KVM_FOUND}>:KVM::KVM>
   ${CMAKE_DL_LIBS}
-  Threads::Threads)
+  Threads::Threads
+  $<$<BOOL:${MALLOC_FOUND}>:Malloc::Malloc>)
 
 # This definition is also used in Linux
 target_compile_definitions(bat
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2025,6 +2025,22 @@ GDKprintinfo(void)
        printf("SIGUSR1 info start\n");
        printf("Virtual memory allocated: %zu, of which %zu with malloc\n",
               vmallocated + allocated, allocated);
+#ifdef WITH_MALLOC
+#ifdef WITH_JEMALLOC
+       size_t jeallocated = 0, jeactive = 0, jemapped = 0, jeresident = 0, 
jeretained = 0;
+       if (mallctl("stats.allocated", &jeallocated, 
&(size_t){sizeof(jeallocated)}, NULL, 0) == 0 &&
+           mallctl("stats.active", &jeactive, &(size_t){sizeof(jeactive)}, 
NULL, 0) == 0 &&
+           mallctl("stats.mapped", &jemapped, &(size_t){sizeof(jemapped)}, 
NULL, 0) == 0 &&
+           mallctl("stats.resident", &jeresident, 
&(size_t){sizeof(jeresident)}, NULL, 0) == 0 &&
+           mallctl("stats.retained", &jeretained, 
&(size_t){sizeof(jeretained)}, NULL, 0) == 0)
+               printf("JEmalloc: allocated %zu, active %zu, mapped %zu, 
resident %zu, retained %zu\n", jeallocated, jeactive, jemapped, jeresident, 
jeretained);
+#endif
+#elif defined(HAVE_MALLINFO2)
+       struct mallinfo2 mi = mallinfo2();
+       printf("mallinfo: arena %zu, ordblks %zu, smblks %zu, hblks %zu, hblkhd 
%zu, fsmblks %zu, uordblks %zu, fordblks %zu, keepcost %zu\n",
+              mi.arena, mi.ordblks, mi.smblks, mi.hblks, mi.hblkhd, 
mi.fsmblks, mi.uordblks, mi.fordblks, mi.keepcost);
+       printf("   total allocated (arena+hblkhd): %zu\n", mi.arena + 
mi.hblkhd);
+#endif
        printf("gdk_vm_maxsize: %zu, gdk_mem_maxsize: %zu\n",
               GDK_vm_maxsize, GDK_mem_maxsize);
        printf("gdk_mmap_minsize_persistent %zu, gdk_mmap_minsize_transient 
%zu\n",
diff --git a/monetdb5/mal/CMakeLists.txt b/monetdb5/mal/CMakeLists.txt
--- a/monetdb5/mal/CMakeLists.txt
+++ b/monetdb5/mal/CMakeLists.txt
@@ -82,7 +82,8 @@ target_link_libraries(mal
   mutils
   stream
   mapi
-  bat)
+  bat
+  $<$<BOOL:${MALLOC_FOUND}>:Malloc::Malloc>)
 
 set_target_properties(mal
   PROPERTIES
diff --git a/monetdb_config.h.in b/monetdb_config.h.in
--- a/monetdb_config.h.in
+++ b/monetdb_config.h.in
@@ -141,6 +141,8 @@
 #cmakedefine HAVE_STRERROR_R 1
 #cmakedefine HAVE_LOCKF 1
 #cmakedefine HAVE_MADVISE  1
+#cmakedefine HAVE_MALLINFO2 1
+#cmakedefine HAVE_MALLOC_INFO 1
 #cmakedefine HAVE_MREMAP  1
 #cmakedefine HAVE_NANOSLEEP  1
 #cmakedefine HAVE_NL_LANGINFO  1
@@ -192,6 +194,11 @@
 #cmakedefine HAVE_LIBPY3 1
 #cmakedefine HAVE_OPENSSL 1
 
+#cmakedefine WITH_JEMALLOC 1
+#cmakedefine WITH_MIMALLOC 1
+#cmakedefine WITH_TCMALLOC 1
+#cmakedefine WITH_MALLOC "@WITH_MALLOC@"
+
 // #cmakedefine SOCKET_LIBRARIES
 #cmakedefine HAVE_GETADDRINFO 1
 #cmakedefine HAVE_CUDF 1
@@ -474,4 +481,15 @@ gmtime_r(const time_t *restrict timep, s
                __attribute__((__constructor__)) static void f(void)
 #endif
 
+#ifdef WITH_MALLOC
+#ifdef WITH_JEMALLOC
+#include <jemalloc/jemalloc.h>
+#endif
+#ifdef WITH_MIMALLOC
+#include <mimalloc.h>
+#endif
+#elif defined(HAVE_MALLOC_INFO)
+#include <malloc.h>
+#endif
+
 #endif /* MT_SEEN_MONETDB_CONFIG_H */
diff --git a/tools/mserver/CMakeLists.txt b/tools/mserver/CMakeLists.txt
--- a/tools/mserver/CMakeLists.txt
+++ b/tools/mserver/CMakeLists.txt
@@ -54,7 +54,8 @@ target_link_libraries(mserver5
   $<$<PLATFORM_ID:Windows>:${GETOPT_LIB}>
   $<$<BOOL:${PCRE_FOUND}>:PCRE::PCRE>
   $<$<BOOL:${MALLOC_FOUND}>:Malloc::Malloc>
-  Threads::Threads)
+  Threads::Threads
+  $<$<BOOL:${MALLOC_FOUND}>:Malloc::Malloc>)
 
 if(TESTING)
   add_executable(shutdowntest)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to