Updated patches with proper commit messages etc. -- Tomas Vondra
From e1f093d091610d70fba72b2848f25ff44899ea8e Mon Sep 17 00:00:00 2001 From: Tomas Vondra <to...@vondra.me> Date: Tue, 8 Apr 2025 23:31:29 +0200 Subject: [PATCH 1/2] Cleanup of pg_numa.c
This moves/renames some of the functions defined in pg_numa.c: * pg_numa_get_pagesize() is renamed to pg_get_shmem_pagesize(), and moved to src/backend/storage/ipc/shmem.c. The new name better reflects that the page size is not related to NUMA, and it's specifically about the page size used for the main shared memory segment. * move pg_numa_available() to src/backend/storage/ipc/shmem.c, i.e. into the backend (which more appropriate for functions callable from SQL). While at it, improve the comment to explain what page size it returns. * remove unnecessary includes from src/port/pg_numa.c, adding unnecessary dependencies (src/port should be suitable for frontent). These were leftovers from earlier patch versions. This eliminates unnecessary dependencies on backend symbols, which we don't want in src/port. Reported-by: Kirill Reshke <reshkekir...@gmail.com> Reviewed-by: Andres Freund <and...@anarazel.de> https://postgr.es/m/caldsspi5fj0a7ug7fmw2cud1uwucku_e8dj+6x-bjeokcsx...@mail.gmail.com --- contrib/pg_buffercache/pg_buffercache_pages.c | 2 +- src/backend/storage/ipc/shmem.c | 40 ++++++++++++++++++- src/include/port/pg_numa.h | 3 -- src/include/storage/shmem.h | 2 + src/port/pg_numa.c | 38 +----------------- 5 files changed, 43 insertions(+), 42 deletions(-) diff --git a/contrib/pg_buffercache/pg_buffercache_pages.c b/contrib/pg_buffercache/pg_buffercache_pages.c index c9ceba604b1..e1701bd56ef 100644 --- a/contrib/pg_buffercache/pg_buffercache_pages.c +++ b/contrib/pg_buffercache/pg_buffercache_pages.c @@ -343,7 +343,7 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS) * This information is needed before calling move_pages() for NUMA * node id inquiry. */ - os_page_size = pg_numa_get_pagesize(); + os_page_size = pg_get_shmem_pagesize(); /* * The pages and block size is expected to be 2^k, so one divides the diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index e10b380e5c7..c9ae3b45b76 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -93,6 +93,8 @@ static HTAB *ShmemIndex = NULL; /* primary index hashtable for shmem */ /* To get reliable results for NUMA inquiry we need to "touch pages" once */ static bool firstNumaTouch = true; +Datum pg_numa_available(PG_FUNCTION_ARGS); + /* * InitShmemAccess() --- set up basic pointers to shared memory. */ @@ -615,7 +617,7 @@ pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) * This information is needed before calling move_pages() for NUMA memory * node inquiry. */ - os_page_size = pg_numa_get_pagesize(); + os_page_size = pg_get_shmem_pagesize(); /* * Allocate memory for page pointers and status based on total shared @@ -727,3 +729,39 @@ pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) return (Datum) 0; } + +/* + * Determine the memory page size used for the shared memory segment. + * + * If the shared segment was allocated using huge pages, returns the size of + * a huge page. Otherwise returns the size of regular memory page. + * + * This should be used only after the server is started. + */ +Size +pg_get_shmem_pagesize(void) +{ + Size os_page_size; +#ifdef WIN32 + SYSTEM_INFO sysinfo; + + GetSystemInfo(&sysinfo); + os_page_size = sysinfo.dwPageSize; +#else + os_page_size = sysconf(_SC_PAGESIZE); +#endif + + Assert(IsUnderPostmaster); + Assert(huge_pages_status != HUGE_PAGES_UNKNOWN); + + if (huge_pages_status == HUGE_PAGES_ON) + GetHugePageSize(&os_page_size, NULL); + + return os_page_size; +} + +Datum +pg_numa_available(PG_FUNCTION_ARGS) +{ + PG_RETURN_BOOL(pg_numa_init() != -1); +} diff --git a/src/include/port/pg_numa.h b/src/include/port/pg_numa.h index 7e990d9f776..40f1d324dcf 100644 --- a/src/include/port/pg_numa.h +++ b/src/include/port/pg_numa.h @@ -14,12 +14,9 @@ #ifndef PG_NUMA_H #define PG_NUMA_H -#include "fmgr.h" - extern PGDLLIMPORT int pg_numa_init(void); extern PGDLLIMPORT int pg_numa_query_pages(int pid, unsigned long count, void **pages, int *status); extern PGDLLIMPORT int pg_numa_get_max_node(void); -extern PGDLLIMPORT Size pg_numa_get_pagesize(void); #ifdef USE_LIBNUMA diff --git a/src/include/storage/shmem.h b/src/include/storage/shmem.h index 904a336b851..c1f668ded95 100644 --- a/src/include/storage/shmem.h +++ b/src/include/storage/shmem.h @@ -41,6 +41,8 @@ extern void *ShmemInitStruct(const char *name, Size size, bool *foundPtr); extern Size add_size(Size s1, Size s2); extern Size mul_size(Size s1, Size s2); +extern PGDLLIMPORT Size pg_get_shmem_pagesize(void); + /* ipci.c */ extern void RequestAddinShmemSpace(Size size); diff --git a/src/port/pg_numa.c b/src/port/pg_numa.c index 5e2523cf798..63dff799436 100644 --- a/src/port/pg_numa.c +++ b/src/port/pg_numa.c @@ -13,17 +13,14 @@ *------------------------------------------------------------------------- */ -#include "postgres.h" +#include "c.h" #include <unistd.h> #ifdef WIN32 #include <windows.h> #endif -#include "fmgr.h" -#include "miscadmin.h" #include "port/pg_numa.h" -#include "storage/pg_shmem.h" /* * At this point we provide support only for Linux thanks to libnuma, but in @@ -36,8 +33,6 @@ #include <numa.h> #include <numaif.h> -Datum pg_numa_available(PG_FUNCTION_ARGS); - /* libnuma requires initialization as per numa(3) on Linux */ int pg_numa_init(void) @@ -66,8 +61,6 @@ pg_numa_get_max_node(void) #else -Datum pg_numa_available(PG_FUNCTION_ARGS); - /* Empty wrappers */ int pg_numa_init(void) @@ -89,32 +82,3 @@ pg_numa_get_max_node(void) } #endif - -Datum -pg_numa_available(PG_FUNCTION_ARGS) -{ - PG_RETURN_BOOL(pg_numa_init() != -1); -} - -/* This should be used only after the server is started */ -Size -pg_numa_get_pagesize(void) -{ - Size os_page_size; -#ifdef WIN32 - SYSTEM_INFO sysinfo; - - GetSystemInfo(&sysinfo); - os_page_size = sysinfo.dwPageSize; -#else - os_page_size = sysconf(_SC_PAGESIZE); -#endif - - Assert(IsUnderPostmaster); - Assert(huge_pages_status != HUGE_PAGES_UNKNOWN); - - if (huge_pages_status == HUGE_PAGES_ON) - GetHugePageSize(&os_page_size, NULL); - - return os_page_size; -} -- 2.49.0
From 201f8be652e9344dfa247b035a66e52025afa149 Mon Sep 17 00:00:00 2001 From: Tomas Vondra <to...@vondra.me> Date: Wed, 9 Apr 2025 13:29:31 +0200 Subject: [PATCH 2/2] ci: Check for missing dependencies in meson build Extends the meson build on Debian to also check for missing dependencies by executing ninja -t missingdeps right after the build. This highlights unindended dependencies. Reviewed-by: Andres Freund <and...@anarazel.de> https://postgr.es/m/caldsspi5fj0a7ug7fmw2cud1uwucku_e8dj+6x-bjeokcsx...@mail.gmail.com --- .cirrus.tasks.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 98f3455eb72..94ded37e29a 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -528,8 +528,17 @@ task: build-32 EOF - build_script: su postgres -c 'ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET}' - build_32_script: su postgres -c 'ninja -C build-32 -j${BUILD_JOBS} ${MBUILD_TARGET}' + build_script: | + su postgres <<-EOF + ninja -C build -j${BUILD_JOBS} ${MBUILD_TARGET} + ninja -C build -t missingdeps + EOF + + build_32_script: | + su postgres <<-EOF + ninja -C build-32 -j${BUILD_JOBS} ${MBUILD_TARGET} + ninja -C build -t missingdeps + EOF upload_caches: ccache -- 2.49.0