Re: pgsql: Introduce pg_shmem_allocations_numa view
Tomas Vondra <tomas@vondra.me>
From: Tomas Vondra <tomas@vondra.me>
To: Christoph Berg <myon@debian.org>
Cc: Andres Freund <andres@anarazel.de>,
Tomas Vondra <tomas.vondra@postgresql.org>,
pgsql-hackers@lists.postgresql.org
Date: 2025-06-23T20:37:12Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Handle EPERM in pg_numa_init
- 599336c64fc9 19 (unreleased) landed
- 482e98ac4302 18.2 landed
-
Add CHECK_FOR_INTERRUPTS into pg_numa_query_pages
- 54ac4944c36f 18.0 landed
- bf1119d74a79 19 (unreleased) landed
-
Silence valgrind about pg_numa_touch_mem_if_required
- 14e52227e578 18.0 landed
- 81f287dc923f 19 (unreleased) landed
-
Limit the size of numa_move_pages requests
- 45879f48f140 18.0 landed
- 7fe2f67c7c9f 19 (unreleased) landed
-
Introduce pg_shmem_allocations_numa view
- 8cc139bec34a 18.0 cited
On 6/23/25 22:31, Christoph Berg wrote: > Re: Tomas Vondra >> Huh. So it's only the first call that does this? > > The first call after a restart. Reconnecting is not enough. > >> Can you maybe print the addresses passed to pg_numa_query_pages? I > > The addresses look good: > > Breakpoint 1, pg_numa_query_pages (pid=0, count=32768, pages=0xeb44d02c, status=0xeb42c02c) at ../src/port/pg_numa.c:49 > 49 return numa_move_pages(pid, count, pages, NULL, status, 0); > (gdb) p *pages > $1 = (void *) 0xebc33000 > (gdb) p pages[1] > $2 = (void *) 0xebc34000 > (gdb) p pages[2] > $3 = (void *) 0xebc35000 > Didn't you say the first ~35 addresses succeed, right? What about the addresses after that? > >> wonder if there's some bug in how we fill that array. Not sure why would >> it happen only on 32-bit systems, though. > > I found something, but that should be harmless: > > --- a/contrib/pg_buffercache/pg_buffercache_pages.c > +++ b/contrib/pg_buffercache/pg_buffercache_pages.c > @@ -365,7 +365,7 @@ pg_buffercache_numa_pages(PG_FUNCTION_ARGS) > > /* Used to determine the NUMA node for all OS pages at once */ > os_page_ptrs = palloc0(sizeof(void *) * os_page_count); > - os_page_status = palloc(sizeof(uint64) * os_page_count); > + os_page_status = palloc(sizeof(int) * os_page_count); > Yes, good catch. But as you say, that should be benign - we allocate more memory than needed, I don't think it should break anything. -- Tomas Vondra