Hi, On Wed, Feb 26, 2025 at 02:05:59PM +0100, Jakub Wartak wrote: > On Wed, Feb 26, 2025 at 10:58 AM Andres Freund <and...@anarazel.de> wrote: > > > > Hi, > > > > On 2025-02-26 09:38:20 +0100, Jakub Wartak wrote: > > > > FWIW, what you posted fails on CI: > > > > https://cirrus-ci.com/task/5114213770723328 > > > > > > > > Probably some ifdefs are missing. The sanity-check task configures with > > > > minimal dependencies, which is why you're seeing this even on linux. > > > > > > Hopefully fixed, we'll see what cfbot tells, I'm flying blind with all > > > of this CI stuff... > > > > FYI, you can enable CI on a github repo, to see results without posting to > > the > > list: > > https://github.com/postgres/postgres/blob/master/src/tools/ci/README > > Thanks, I'll take a look into it. > > Meanwhile v5 is attached with slight changes to try to make cfbot happy:
Thanks for the updated version! FWIW, I had to do a few changes to get an error free compiling experience with autoconf/or meson and both with or without the libnuma configure option. Sharing here as .txt files: v5-0004-configure-changes.txt: changes in configure + add a test on numa.h availability and a call to numa_available. v5-0005-pg_numa.c-changes.txt: moving the <unistd.h> outside of USE_LIBNUMA because the file is still using sysconf() in the non-NUMA code path. Also, removed a ";" in "#endif;" in the non-NUMA code path. v5-0006-meson.build-changes.txt. Those apply on top of your v5. Also the pg_buffercache test fails without the libnuma configure option. Maybe some tests should depend of the libnuma configure option. Still did not look closely to the code. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
>From 6871e2d54390d58403bcc36873a5e6e7bf88ed25 Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot <bertranddrouvot...@gmail.com> Date: Wed, 26 Feb 2025 13:52:15 +0000 Subject: [PATCH v5 4/6] configure changes --- configure | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/configure b/configure index 93fddd69981..23c33dd9971 100755 --- a/configure +++ b/configure @@ -711,6 +711,7 @@ with_libxml LIBCURL_LIBS LIBCURL_CFLAGS with_libcurl +with_libnuma with_uuid with_readline with_systemd @@ -868,6 +869,7 @@ with_libedit_preferred with_uuid with_ossp_uuid with_libcurl +with_libnuma with_libxml with_libxslt with_system_tzdata @@ -1581,6 +1583,7 @@ Optional Packages: --with-uuid=LIB build contrib/uuid-ossp using LIB (bsd,e2fs,ossp) --with-ossp-uuid obsolete spelling of --with-uuid=ossp --with-libcurl build with libcurl support + --with-libnuma build with libnuma support --with-libxml build with XML support --with-libxslt use XSLT support when building contrib/xml2 --with-system-tzdata=DIR @@ -9140,6 +9143,33 @@ fi +# +# NUMA +# + + + +# Check whether --with-libnuma was given. +if test "${with_libnuma+set}" = set; then : + withval=$with_libnuma; + case $withval in + yes) + +$as_echo "#define USE_LIBNUMA 1" >>confdefs.h + + ;; + no) + : + ;; + *) + as_fn_error $? "no argument expected for --with-libnuma option" "$LINENO" 5 + ;; + esac + +else + with_libnuma=no + +fi @@ -12378,6 +12408,63 @@ fi fi +if test "$with_libnuma" = yes ; then + + ac_fn_c_check_header_mongrel "$LINENO" "numa.h" "ac_cv_header_numa_h" "$ac_includes_default" +if test "x$ac_cv_header_numa_h" = xyes; then : + +else + as_fn_error $? "header file <numa.h> is required for --with-libnuma" "$LINENO" 5 +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5 +$as_echo_n "checking for numa_available in -lnuma... " >&6; } +if ${ac_cv_lib_numa_numa_available+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnuma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char numa_available (); +int +main () +{ +return numa_available (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_numa_numa_available=yes +else + ac_cv_lib_numa_numa_available=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5 +$as_echo "$ac_cv_lib_numa_numa_available" >&6; } +if test "x$ac_cv_lib_numa_numa_available" = xyes; then : + + LIBS="-lnuma $LIBS" + +else + as_fn_error $? "library 'numa' does not provide numa_available" "$LINENO" 5 +fi + +fi + # XXX libcurl must link after libgssapi_krb5 on FreeBSD to avoid segfaults # during gss_acquire_cred(). This is possibly related to Curl's Heimdal # dependency on that platform? -- 2.34.1
>From ca5449d7091ec724e270b77f5be21e189fa94314 Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot <bertranddrouvot...@gmail.com> Date: Wed, 26 Feb 2025 15:22:54 +0000 Subject: [PATCH v5 5/6] pg_numa.c changes --- src/port/pg_numa.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 100.0% src/port/ diff --git a/src/port/pg_numa.c b/src/port/pg_numa.c index e94e68abe42..3aa1c191f51 100644 --- a/src/port/pg_numa.c +++ b/src/port/pg_numa.c @@ -17,6 +17,7 @@ #include "postgres.h" #include "port/pg_numa.h" #include "storage/pg_shmem.h" +#include <unistd.h> #ifdef WIN32 #include <windows.h> #endif @@ -31,7 +32,6 @@ #include <numa.h> #include <numaif.h> -#include <unistd.h> /* libnuma requires initialization as per numa(3) on Linux */ int @@ -141,7 +141,7 @@ pg_numa_get_pagesize(void) SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); os_page_size = sysinfo.dwPageSize; -#endif; +#endif if (huge_pages_status == HUGE_PAGES_ON) GetHugePageSize(&os_page_size, NULL); return os_page_size; -- 2.34.1
>From 2de58b2bab5d3c49c285c6d3781923645469e6a2 Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot <bertranddrouvot...@gmail.com> Date: Wed, 26 Feb 2025 16:41:14 +0000 Subject: [PATCH v5 6/6] meson.build changes --- meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index d2178c7d32e..f81092eb661 100644 --- a/meson.build +++ b/meson.build @@ -954,9 +954,9 @@ endif ############################################################### libnumaopt = get_option('libnuma') -libnuma = dependency('libnuma', required: libnumaopt) +libnuma = dependency('numa', required: libnumaopt) if not libnuma.found() - libnuma = cc.find_library('numa', required: libnumaopt, dirs: test_lib_d) + libnuma = cc.find_library('numa', required: libnumaopt) endif if libnuma.found() cdata.set('USE_LIBNUMA', 1) -- 2.34.1