Re: AIO v2.5

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-hackers(at)postgresql(dot)org
Cc: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Noah Misch <noah(at)leadboat(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>, Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com>
Subject: Re: AIO v2.5
Date: 2025-03-10 18:23:12
Message-ID: ge6nsuddurhpmll3xj22vucvqwp4agqz6ndtcf2mhyeydzarst@l75dman5x53p
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Attached is v2.6 of the AIO patchset.

Relative to 2.5 I:

- Improved the split between subsystem initialization and main AIO commit, as
well as the one between worker infrastructure and io_method=worker

Seemed worth as the only one voicing an opinion about squashing those
commits was opposed.

- Added a lot more comments to aio.h/aio_internal.h. I think just about
anything that should conceivably have a comment has one.

- Reordered fields in PgAioHandle to waste less due to padding

- Narrowed a few *count fields, they were 64bit without ever being al to reach
that

- Used aio_types.h more widely, instead of "manual" forward declarations. This
required moving a few typedefs to aio_types.h

- Substantial commit message improvements.

- Removed the pg_aios.error_desc column, due to:
https://postgr.es/m/qzxq6mqqozctlfcg2kg5744gmyubicvuehnp4a7up472thlvz2%40y5xqgd5wcwhw

- Reordered the commits slightly, to put the README just after the
smgr.c/md.c/... support, as the readme references those in the examples

- Stopped creating backend-local io_uring instances, that is vestigial for
now. We likely will want to reintroduce them at some point (e.g. for network
IO), but we can do that at that time.

- There were a lot of duplicated codepaths in bufmgr.c support for AIO due to
temp tables. I added a few commits refactoring the temp buffers state
management to look a lot more like the shared buffer code.

I'm not sure that that's the best path, but they all seemed substantial
improvements on their own.

- putting io_method in PG_TEST_INITDB_EXTRA_OPTS previously broke a test,
because Cluster::init() puts PG_TEST_INITDB_EXTRA_OPTS after the # options
specified by ->extra. I now worked around that by appending the io method to
a local PG_TEST_INITDB_EXTRA_OPTS, but brrr.

- The tracepoint for read completion omitted the fact that it was a temp
table, if so.

- Fixed some duplicated function decls, due to a misresolved merge-conflict

Current state:

- 0001, 0002 - core AIO - IMO pretty much ready

- 0003, 0004 - IO worker - same

- 0005, 0006 - io_uring support - close, but we need to do something about
set_max_fds(), which errors out spuriously in some cases

- 0007 - smgr/md/fd.c readv support - seems quite close, but might benefit from
another pass through

- 0008 - README - I think it's good, but I'm probably not seeing the trees for
the forest anymore

- 0009 - pg_aios view - naming not resolved, docs missing

- 0010 to 0014 - from another thread, just included here due to a dependency

- 0016 to 0020 - cleanups for temp buffers code - I just wrote these to clean
up the code before making larger changes, needs review

- 0021 - keep BufferDesc refcount up2date for temp buffers - I think that's
pretty much ready, but depends on earlier patches

- 0022 - bufmgr readv AIO suppot - some naming, some code duplication needs to
be resolved, but otherwise quite close

- 0023 - use AIO in StartReadBuffers() - perhaps a bit of polishing needed

- 0024 - adjust read_stream.c for AIO - I think Thomas has a better patch for
this in the works

- 0025 - tests for AIO - I think it's reasonable, unless somebody objects to
exporting a few bufmgr.c functions to the test

- the rest: Not for 18

Greetings,

Andres Freund

Attachment Content-Type Size
v2.6-0001-aio-Basic-subsystem-initialization.patch text/x-diff 25.1 KB
v2.6-0002-aio-Add-asynchronous-I-O-infrastructure.patch text/x-diff 88.1 KB
v2.6-0003-aio-Infrastructure-for-io_method-worker.patch text/x-diff 24.7 KB
v2.6-0004-aio-Add-io_method-worker.patch text/x-diff 20.1 KB
v2.6-0005-aio-Add-liburing-dependency.patch text/x-diff 13.4 KB
v2.6-0006-aio-Add-io_method-io_uring.patch text/x-diff 19.0 KB
v2.6-0007-aio-Implement-support-for-reads-in-smgr-md-fd.patch text/x-diff 21.6 KB
v2.6-0008-aio-Add-README.md-explaining-higher-level-desig.patch text/x-diff 18.6 KB
v2.6-0009-aio-Add-pg_aios-view.patch text/x-diff 9.7 KB
v2.6-0010-Refactor-read_stream.c-s-circular-arithmetic.patch text/x-diff 4.6 KB
v2.6-0011-Improve-buffer-pool-API-for-per-backend-pin-lim.patch text/x-diff 6.4 KB
v2.6-0012-Respect-pin-limits-accurately-in-read_stream.c.patch text/x-diff 9.9 KB
v2.6-0013-Support-buffer-forwarding-in-read_stream.c.patch text/x-diff 8.9 KB
v2.6-0014-Support-buffer-forwarding-in-StartReadBuffers.patch text/x-diff 10.5 KB
v2.6-0015-tests-Expand-temp-table-tests-to-some-pin-relat.patch text/x-diff 9.6 KB
v2.6-0016-localbuf-Fix-dangerous-coding-pattern-in-GetLoc.patch text/x-diff 2.5 KB
v2.6-0017-localbuf-Introduce-InvalidateLocalBuffer.patch text/x-diff 5.6 KB
v2.6-0018-localbuf-Introduce-TerminateLocalBufferIO.patch text/x-diff 5.1 KB
v2.6-0019-localbuf-Introduce-FlushLocalBuffer.patch text/x-diff 5.1 KB
v2.6-0020-localbuf-Introduce-StartLocalBufferIO.patch text/x-diff 4.6 KB
v2.6-0021-localbuf-Track-pincount-in-BufferDesc-as-well.patch text/x-diff 4.3 KB
v2.6-0022-bufmgr-Implement-AIO-read-support.patch text/x-diff 23.1 KB
v2.6-0023-bufmgr-Use-AIO-in-StartReadBuffers.patch text/x-diff 19.6 KB
v2.6-0024-WIP-aio-read_stream.c-adjustments-for-real-AIO.patch text/x-diff 3.7 KB
v2.6-0025-aio-Add-test_aio-module.patch text/x-diff 42.2 KB
v2.6-0026-aio-Implement-smgr-md-fd-write-support.patch text/x-diff 12.7 KB
v2.6-0027-aio-Add-bounce-buffers.patch text/x-diff 22.9 KB
v2.6-0028-bufmgr-Implement-AIO-write-support.patch text/x-diff 6.2 KB
v2.6-0029-aio-Add-IO-queue-helper.patch text/x-diff 7.4 KB
v2.6-0030-bufmgr-use-AIO-in-checkpointer-bgwriter.patch text/x-diff 31.1 KB
v2.6-0031-Ensure-a-resowner-exists-for-all-paths-that-may.patch text/x-diff 2.6 KB
v2.6-0032-Temporary-Increase-BAS_BULKREAD-size.patch text/x-diff 1.3 KB
v2.6-0033-WIP-Use-MAP_POPULATE.patch text/x-diff 1.1 KB

In response to

  • AIO v2.5 at 2025-03-04 19:00:14 from Andres Freund

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jacob Champion 2025-03-10 18:25:51 Re: dblink: Add SCRAM pass-through authentication
Previous Message Fujii Masao 2025-03-10 18:07:32 Re: Add “FOR UPDATE NOWAIT” lock details to the log.