Thanks for the detailed review Nathan

> On 3 Jun 2025, at 4:52 PM, Nathan Bossart <nathandboss...@gmail.com> wrote:
> 
> On Sat, Mar 15, 2025 at 10:41:15AM +0200, Florents Tselai wrote:
>> Here's an updated v3 that fixes some white spaces v2 had-no other changes.
> 
> Thanks for the patch.
> 
>> I'm wondering though if it also makes sense to expose:
>> - backend_pid (who created the segment)
>> - is_pinned bool
>> - created_at
> 
> created_at might be interesting.  I'm not sure the others have much use.
> It would be cool to surface which library/function created the segment
> IMHO.  But for now, I'd keep the view simple and just show the contents of
> the DSM registry's hash table.
> 
> +CREATE VIEW pg_dsm_registry AS
> +SELECT * FROM pg_get_dsm_registry();
> 
> I'd suggest pg_dsm_registry_allocations and
> pg_get_dsm_registry_allocations() to match pg_shmem_allocations.
> 
> +void
> +iterate_dsm_registry(void (*callback)(DSMRegistryEntry *, void *), void 
> *arg);
> +void
> +iterate_dsm_registry(void (*callback)(DSMRegistryEntry *, void *), void *arg)
> +{
> 
> I'm not sure what's going on here.  Presumably we could just mark
> iterate_dsm_registry() as static.
> 
> Taking a step back, I think the loop is quite overengineered.  You have a
> function for calling dshash_seq_init/next/term, a callback function for
> storing the tuple, and a special struct for some SRF context.  I don't see
> any need to abstract things to this extent.  I think we should instead
> open-code the loop in pg_get_dsm_registry().
> 
> +/* SQL SRF showing DSM registry allocated memory */
> +PG_FUNCTION_INFO_V1(pg_get_dsm_registry);
> 
> There should be no need to do this.  Its pg_proc.dat entry will
> automatically generate the required prototype.
> 
> +     if (rsinfo == NULL || !IsA(rsinfo, ReturnSetInfo))
> +             ereport(ERROR, (errmsg("pg_get_dsm_registry must be used in a 
> SRF context")));
> +
> +     /* Set up tuple descriptor */
> +     tupdesc = CreateTemplateTupleDesc(2);
> +     TupleDescInitEntry(tupdesc, (AttrNumber) 1, "name", TEXTOID, -1, 0);
> +     TupleDescInitEntry(tupdesc, (AttrNumber) 2, "size", INT8OID, -1, 0);
> 
> This SRF-related code can be simplified by using InitMaterializedSRF() and
> friends.  Check out pg_ls_dir() in genfile.c for an example.
> 
> +-- 20 bytes = int (4 bytes) + LWLock (16bytes)
> +SELECT * FROM pg_dsm_registry;
> +       name        | size 
> +-------------------+------
> + test_dsm_registry |   20
> +(1 row)
> 
> I'm a little worried about the portability of this test.  I would suggest
> changing the query to something like
> 
>       SELECT size > 0 FROM pg_dsm_registry WHERE name = 'test_dsm_registry';
> 
> -- 
> nathan

Attaching a v4 which resolves these and also adds a doc entry. 

Attachment: v4-0001-First-attempt-towards-a-pg_dsm_registry-view.-Ite.patch
Description: Binary data

Attachment: v4-0002-Rename-view-to-pg_dsm_registry_allocations-and-fu.patch
Description: Binary data

Attachment: v4-0003-Add-doc-entry-for-pg_shmem_allocations_numa.patch
Description: Binary data



Reply via email to