From 4ecdd9133eb33ec7d993cf8808502bd88f8e9417 Mon Sep 17 00:00:00 2001 From: Jakub Wartak Date: Mon, 7 Apr 2025 10:06:38 +0200 Subject: [PATCH v25 6/6] fix remaining outstanding issues from Sunday --- contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql | 2 +- contrib/pg_buffercache/pg_buffercache_pages.c | 9 +++++---- doc/src/sgml/pgbuffercache.sgml | 4 ++-- src/backend/storage/ipc/shmem.c | 10 ++++++++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql b/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql index e3b145a1687..998289790b7 100644 --- a/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql +++ b/contrib/pg_buffercache/pg_buffercache--1.5--1.6.sql @@ -12,7 +12,7 @@ LANGUAGE C PARALLEL SAFE; -- Create a view for convenient access. CREATE VIEW pg_buffercache_numa AS SELECT P.* FROM pg_buffercache_numa_pages() AS P - (bufferid integer, page_num int4, node_id int4); + (bufferid integer, ospageid int4, nodeid int4); -- Don't want these to be available to public. REVOKE ALL ON FUNCTION pg_buffercache_numa_pages() FROM PUBLIC; diff --git a/contrib/pg_buffercache/pg_buffercache_pages.c b/contrib/pg_buffercache/pg_buffercache_pages.c index df94cc6ef7d..fe2ffadcb3a 100644 --- a/contrib/pg_buffercache/pg_buffercache_pages.c +++ b/contrib/pg_buffercache/pg_buffercache_pages.c @@ -385,9 +385,9 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS) tupledesc = CreateTemplateTupleDesc(expected_tupledesc->natts); TupleDescInitEntry(tupledesc, (AttrNumber) 1, "bufferid", INT4OID, -1, 0); - TupleDescInitEntry(tupledesc, (AttrNumber) 2, "page_num", + TupleDescInitEntry(tupledesc, (AttrNumber) 2, "ospageid", INT4OID, -1, 0); - TupleDescInitEntry(tupledesc, (AttrNumber) 3, "node_id", + TupleDescInitEntry(tupledesc, (AttrNumber) 3, "nodeid", INT4OID, -1, 0); fctx->tupdesc = BlessTupleDesc(tupledesc); @@ -430,7 +430,7 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS) * to one big big move_pages(2) inquiry system call. Basically we ask * for all memory pages for NBuffers. */ - startptr = (char *) BufferGetBlock(1); + startptr = (char *) TYPEALIGN_DOWN(os_page_size, (char *) BufferGetBlock(1)); idx = 0; for (i = 0; i < NBuffers; i++) { @@ -474,7 +474,8 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS) /* Only need to touch memory once per backend process lifetime */ if (firstNumaTouch) - pg_numa_touch_mem_if_required(touch, os_page_ptrs[idx]); + pg_numa_touch_mem_if_required(touch, + buffptr + (os_page_size * j)); ++idx; } diff --git a/doc/src/sgml/pgbuffercache.sgml b/doc/src/sgml/pgbuffercache.sgml index b01f8e71357..b39c9849362 100644 --- a/doc/src/sgml/pgbuffercache.sgml +++ b/doc/src/sgml/pgbuffercache.sgml @@ -244,7 +244,7 @@ - page_num int + ospageid int number of OS memory page for this buffer @@ -253,7 +253,7 @@ - node_id int + nodeid int ID of NUMA node diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index 4a9a9606f2e..69eb5bb738d 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -572,7 +572,13 @@ pg_get_shmem_allocations(PG_FUNCTION_ARGS) return (Datum) 0; } -/* SQL SRF showing NUMA memory nodes for allocated shared memory */ +/* + * SQL SRF showing NUMA memory nodes for allocated shared memory + * + * Contrary to above one - pg_get_shmem_allocations() - in this function + * we don't output information aobut shared anonymous allocations and + * unused memory. + */ Datum pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) { @@ -694,7 +700,7 @@ pg_get_shmem_allocations_numa(PG_FUNCTION_ARGS) if (s < 0 || s > max_nodes) { elog(ERROR, "invalid NUMA node id outside of allowed range " - "[0, " UINT64_FORMAT "]: %d", max_nodes, s); + "[0, " UINT64_FORMAT "]: %d", max_nodes, s); } nodes[s]++; -- 2.39.5