mirror of
https://github.com/postgres/postgres.git
synced 2025-04-18 13:44:19 +03:00
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 either leftovers or unnecessary thanks to the other changes in this commit. This eliminates unnecessary dependencies on backend symbols, which we don't want in src/port. Reported-by: Kirill Reshke <reshkekirill@gmail.com> Reviewed-by: Andres Freund <andres@anarazel.de> https://postgr.es/m/CALdSSPi5fj0a7UG7Fmw2cUD1uWuckU_e8dJ+6x-bJEokcSXzqA@mail.gmail.com
This commit is contained in:
parent
e2665efd0f
commit
3887d0cfeb
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -13,17 +13,10 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#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 +29,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 +57,6 @@ pg_numa_get_max_node(void)
|
||||
|
||||
#else
|
||||
|
||||
Datum pg_numa_available(PG_FUNCTION_ARGS);
|
||||
|
||||
/* Empty wrappers */
|
||||
int
|
||||
pg_numa_init(void)
|
||||
@ -89,32 +78,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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user