Re: Better shared data structure management and resizable shared data structures
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Attachments
- v20260407-0002-Add-support-to-protect-unused-resizable_sh.patch (text/x-patch) patch v20260407-0002
- v20260407-0001-resizable-shared-memory-structures.patch (text/x-patch) patch v20260407-0001
On Mon, Apr 6, 2026 at 7:23 PM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote: > > I have kept these two patches separate from the main patch so that I > can remove them if others feel they are not worth including in the > feature. Here are patches rebased on the latest HEAD. No conflicts just rebase. Here are differences from the previous patchset. o. There are two patches in this patchset now. a. 0001 which supports resizable shared memory and is equivalent to 0001 + 0002 + 0004 + 0005 from the previous patchset. b. 0002 which is 0006 from the previous patchset and adds support for protecting resizable shared memory structures. 0003, which added diagnostics to investigate CFBot failure, from the previous patchset is not required anymore since all tests pass with CFBot. o. I have merged 0002 into 0001 from the previous patchset since with that patch all platforms are green on CFBot. The resizable shared memory test now uses /proc/self/smaps instead of /proc/self/status to find the amount of memory allocated in the main shared memory segment of PostgreSQL. o. Merged 0004, which supported minimum_size, into 0001. Minimum_size would be useful to protect against accidental shrinkage of the resizable structures. It will help additional support for minimum sizes of GUCs like shared_buffers. It also makes it easy and intuitive to distinguish between fixed-size and resizable structures, and will be useful to find the minimum size of the shared memory segment. o. Merged 0005, which allows ABI compatibility between the binaries which support resizable shared memory and those which don't, into 0001. Apart from ABI compatibility, the code has lesser #ifdef blocks and thus easier to read and maintain. I didn't find it useful to keep 0004 and 0005 separate since they were interdependent and made review complicated and have higher chances of being acceptable. o. 0006 is still separate since I am not sure whether the functionality is absolutely needed at this time. In an offlist discussion, Andres mentioned that it is not strictly needed. The subsystem that uses the resizable shared memory can implement their own protection if required and integrate it in the subsystems specific synchronization. But Matthias thinks different. The API to add protection is platform dependent, so it's better to abstract it via shmem.c. If we decide to accept this patch, we should merge it into 0001 before committing. Also did some more cleanups and changed the name of the GUC have_resizable_shmem to have_resizable_shared_memory since shmem is an internal phrase. I am looking at merging the resizable_shmem module into test_shmem module next. -- Best Wishes, Ashutosh Bapat
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Tidy up #ifdef USE_INJECTION_POINTS guards
- 9480c585df6c 19 (unreleased) landed
-
Convert all remaining subsystems to use the new shmem allocation API
- 9b5acad3f40f 19 (unreleased) landed
-
Convert buffer manager to use the new shmem allocation functions
- a4b6139dcceb 19 (unreleased) landed
-
Add alignment option to ShmemRequestStruct()
- dacfe81a0de5 19 (unreleased) landed
-
Convert AIO to use the new shmem allocation functions
- 58a1573385ed 19 (unreleased) landed
-
Convert SLRUs to use the new shmem allocation functions
- 2e0943a8597e 19 (unreleased) landed
-
Refactor shmem initialization code in predicate.c
- 4c9eca5afea0 19 (unreleased) landed
-
Use the new shmem allocation functions in a few core subsystems
- c6d55714ba4c 19 (unreleased) landed
-
Convert lwlock.c to use the new shmem allocation functions
- a006bc7b1699 19 (unreleased) landed
-
Introduce a registry of built-in shmem subsystems
- 1fc2e9fbc0a3 19 (unreleased) landed
-
Convert pg_stat_statements to use the new shmem allocation functions
- d4885af3d653 19 (unreleased) landed
-
Add a test module to test after-startup shmem allocations
- 6409994c7dd8 19 (unreleased) landed
-
Introduce a new mechanism for registering shared memory areas
- 283e823f9dcb 19 (unreleased) landed
-
Move some code from shmem.c and shmem.h
- 6ef9bee29310 19 (unreleased) landed
-
Improve test_lwlock_tranches
- 92a685e4070d 19 (unreleased) landed
-
Test pg_stat_statements across crash restart
- 148fe2b05df5 19 (unreleased) landed
-
Refactor PredicateLockShmemInit to not reuse var for different things
- 3fd057772827 19 (unreleased) landed
-
Refactor ShmemIndex initialization
- 6b8238cb6aa7 19 (unreleased) landed
-
Add a new shmem_request_hook hook.
- 4f2400cb3f10 15.0 cited