]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use libuv functions to get memory available to BIND 9
authorOndřej Surý <ondrej@isc.org>
Fri, 20 Sep 2024 07:10:20 +0000 (09:10 +0200)
committerOndřej Surý <ondrej@isc.org>
Tue, 24 Sep 2024 13:51:14 +0000 (15:51 +0200)
This change uses uv_get_total_memory() to get the memory available to
BIND 9 with possible modification by uv_get_constrained_memory() if the
libuv version is recent enough to honour constraints created by
f.e. cgroups.

lib/isc/meminfo.c

index 570154ce718d931ba061d696569973d5f7240168..5480a74b114b0a7c8bfbd27d305776654a0c61ae 100644 (file)
  */
 
 #include <inttypes.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#if HAVE_SYS_SYSCTL_H && !defined(__linux__)
-#include <sys/sysctl.h>
-#endif
 
 #include <isc/meminfo.h>
+#include <isc/uv.h>
 
 uint64_t
 isc_meminfo_totalphys(void) {
-#if defined(CTL_HW) && (defined(HW_PHYSMEM64) || defined(HW_MEMSIZE))
-       int mib[2];
-       mib[0] = CTL_HW;
-#if defined(HW_MEMSIZE)
-       mib[1] = HW_MEMSIZE;
-#elif defined(HW_PHYSMEM64)
-       mib[1] = HW_PHYSMEM64;
-#endif /* if defined(HW_MEMSIZE) */
-       uint64_t size = 0;
-       size_t len = sizeof(size);
-       if (sysctl(mib, 2, &size, &len, NULL, 0) == 0) {
-               return (size);
-       }
-#endif /* if defined(CTL_HW) && (defined(HW_PHYSMEM64) || defined(HW_MEMSIZE)) \
-       * */
-#if defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE)
-       long pages = sysconf(_SC_PHYS_PAGES);
-       long pagesize = sysconf(_SC_PAGESIZE);
-
-       if (pages < 0 || pagesize < 0) {
-               return (0);
+       uint64_t tmem = uv_get_total_memory();
+#if UV_VERSION_HEX >= UV_VERSION(1, 29, 0)
+       uint64_t cmem = uv_get_constrained_memory();
+       if (cmem > 0 && cmem < tmem) {
+               return (cmem);
        }
-
-       return ((uint64_t)pages * pagesize);
-#endif /* if defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) */
-       return (0);
+#endif /* UV_VERSION_HEX >= UV_VERSION(1, 29, 0) */
+       return (tmem);
 }