From: | Tomas Vondra <tomas(at)vondra(dot)me> |
---|---|
To: | Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com> |
Cc: | Christoph Berg <myon(at)debian(dot)org>, Andres Freund <andres(at)anarazel(dot)de>, Tomas Vondra <tomas(dot)vondra(at)postgresql(dot)org>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: pgsql: Introduce pg_shmem_allocations_numa view |
Date: | 2025-06-30 18:56:43 |
Message-ID: | 132f85de-75c8-4e21-b875-b806596c9214@vondra.me |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers pgsql-hackers |
On 6/27/25 19:33, Bertrand Drouvot wrote:
> Hi,
>
> On Fri, Jun 27, 2025 at 04:52:08PM +0200, Tomas Vondra wrote:
>> Here's three small patches, that should handle the issue
>
> Thanks for the patches!
>
>> 0001 - Adds the batching into pg_numa_query_pages, so that the callers
>> don't need to do anything.
>>
>> The batching doesn't seem to cause any performance regression. 32-bit
>> systems can't use that much memory anyway, and on 64-bit systems the
>> batch is sufficiently large (1024).
>
> === 1
>
> -#define pg_numa_touch_mem_if_required(ro_volatile_var, ptr) \
> +#define pg_numa_touch_mem_if_required(ptr) \
>
> Looks unrelated, should be in 0002?
>
Of course, I merged it into the wrong patch. Here's a v2 that fixes
this, and also reworded some of the comments and commit messages a
little bit.
In particular it now uses "chunking" instead of "batching". I believe
bathing is "combining multiple requests into a single one", but we're
doing exactly the opposite - splitting a large request into smaller
ones. Which is what "chunking" does.
> === 2
>
> I thought that it would be better to provide a batch size only in the 32-bit
> case (see [1]), but I now think it makes sense to also provide (a larger) one
> for non 32-bit (as you did) due to the CFI added in 0003 (as it's also good to
> have it for non 32-bit).
>
Agreed, I think the CFI is a good thing to have.
>> 0002 - Silences the valgrind about the memory touching. It replaces the
>> macro with a static inline function, and adds suppressions for both
>> 32-bit and 64-bits. The 32-bit may be a bit pointless, because on my
>> rpi5 valgrind produces about a bunch of other stuff anyway. But doesn't
>> hurt.
>>
>> The function now looks like this:
>>
>> static inline void
>> pg_numa_touch_mem_if_required(void *ptr)
>> {
>> volatile uint64 touch pg_attribute_unused();
>> touch = *(volatile uint64 *) ptr;
>> }
>>
>> I did a lot of testing on multiple systems to check replacing the macro
>> with a static inline function still works - and it seems it does. But if
>> someone thinks the function won't work, I'd like to know.
>
> LGTM.
> >> 0003 - While working on these patches, it occurred to me we could/should
>> add CHECK_FOR_INTERRUPTS() into the batch loop. This querying can take
>> quite a bit of time, so letting people to interrupt it seems reasonable.
>> It wasn't possible with just one call into the kernel, but with the
>> batching we can add a CFI.
>
> Yeah, LGTM.
>
Thanks!
I plan to push this tomorrow morning.
--
Tomas Vondra
Attachment | Content-Type | Size |
---|---|---|
v2-0001-Limit-the-size-of-numa_move_pages-requests.patch | text/x-patch | 3.8 KB |
v2-0002-Silence-valgrind-about-pg_numa_touch_mem_if_requi.patch | text/x-patch | 4.1 KB |
v2-0003-Add-CHECK_FOR_INTERRUPTS-into-pg_numa_query_pages.patch | text/x-patch | 1.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Nathan Bossart | 2025-06-30 20:40:38 | pgsql: Add new OID alias type regdatabase. |
Previous Message | Andres Freund | 2025-06-30 14:44:18 | pgsql: aio: Fix reference to outdated name |
From | Date | Subject | |
---|---|---|---|
Next Message | Jim Nasby | 2025-06-30 18:57:28 | Re: postmaster uses more CPU in 18 beta1 with io_method=io_uring |
Previous Message | Jelte Fennema-Nio | 2025-06-30 18:44:26 | Re: BackendKeyData is mandatory? |