Re: AIO v2.5

From: Andres Freund <andres(at)anarazel(dot)de>
To: Antonin Houska <ah(at)cybertec(dot)at>
Cc: Noah Misch <noah(at)leadboat(dot)com>, pgsql-hackers(at)postgresql(dot)org, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Robert Haas <robertmhaas(at)gmail(dot)com>, Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com>, Jelte Fennema-Nio <postgres(at)jeltef(dot)nl>
Subject: Re: AIO v2.5
Date: 2025-03-25 01:18:06
Message-ID: cxi6ssym62v7ywkt367qda3xik5jhsrcycwedyfqacinxooys5@pwarur37bosc
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

Attached v2.12, with the following changes:

- Pushed the max_files_per_process change

I plan to look at what parts of Jelte's change is worth doing ontop.

Thanks for the review Noah.

- Rebased over Thomas' commit of the remaining read stream changes

Yay!

- Addressed Noah's review comments

- Added another test to test_aio/, to test that changing io_workers while
running works, and that workers are restarted if terminated

Written by Bilal

- Made InvalidateLocalBuffer wait for IO if necessary

As reported / suggested by Noah

- Added tests for dropping tables with ongoing IO

This failed, as Noah predicted, without the InvalidateLocalBuffer() change.

- Added a commit to explicitly hold interrupts in workers after
pgaio_io_reopen()

As suggested by Noah.

- Added a commit to fix a logic error around what gets passed to
ioh->report_return - this lead to temporary buffer validation errors not
being reported

Discovered while extending the tests, as noted in the next point.

I could see a few different "formulations" of this change (e.g. the
report_return stuff could be populated by pgaio_io_call_complete_local()
instead), but I don't think it matters much.

- Add temporary table coverage to test_aio

This required hanged test_aio.c to cope with temporary tables as well.

- io_uring tests don't run anymore when built with EXEC_BACKEND and liburing
enabled

- Split the read stream patch into two

Noah, quite rightly, pointed out that it's not safe to use batching if the
next-block callback may block (or start its own batch). The best idea seems
to be to make users of read stream opt-in to batching. I've done that in a
patch that uses where it seems safe without doing extra work. See also the
commit message.

- Added a commit to add I/O, Asynchronous I/O glossary and acronym entries

- Docs for pg_aios

- Renamed pg_aios.offset to off, to avoid use of a keyword

- Updated the io_uring wait event name while waiting for IOs to complete to
AIO_IO_URING_COMPLETION and updated the description of AIO_IO_COMPLETION to
"Waiting for another process to complete IO."

I think this is a mix of different suggestions by Noah.

TODO:

- There are more tests in test_aio that should be expanded to run for temp
tables as well, not just normal tables

- Add an explicit test for the checksum verification in the completion callback

There is an existing test for testing an invalid page due to page header
verification in test_aio, but not for checksum failures.

I think it's indirectly covered (e.g. in amcheck), but seems better to test
it explicitly.

Wonder if it's worth adding some coverage for when checksums are disabled?
Probably not necessary?

Greetings,

Andres Freund

Attachment Content-Type Size
v2.12-0001-aio-Be-more-paranoid-about-interrupts.patch text/x-diff 2.5 KB
v2.12-0002-aio-Pass-result-of-local-callbacks-to-report_r.patch text/x-diff 4.1 KB
v2.12-0003-aio-Add-liburing-dependency.patch text/x-diff 13.6 KB
v2.12-0004-aio-Add-io_method-io_uring.patch text/x-diff 22.2 KB
v2.12-0005-aio-Implement-support-for-reads-in-smgr-md-fd.patch text/x-diff 23.1 KB
v2.12-0006-aio-Add-README.md-explaining-higher-level-desi.patch text/x-diff 19.0 KB
v2.12-0007-localbuf-Track-pincount-in-BufferDesc-as-well.patch text/x-diff 4.6 KB
v2.12-0008-bufmgr-Implement-AIO-read-support.patch text/x-diff 31.8 KB
v2.12-0009-bufmgr-Use-AIO-in-StartReadBuffers.patch text/x-diff 26.6 KB
v2.12-0010-aio-Basic-read_stream-adjustments-for-real-AIO.patch text/x-diff 2.8 KB
v2.12-0011-read_stream-Introduce-and-use-optional-batchmo.patch text/x-diff 12.2 KB
v2.12-0012-docs-Reframe-track_io_timing-related-docs-as-w.patch text/x-diff 5.3 KB
v2.12-0013-Enable-IO-concurrency-on-all-systems.patch text/x-diff 11.2 KB
v2.12-0014-docs-Add-acronym-and-glossary-entries-for-I-O-.patch text/x-diff 3.5 KB
v2.12-0015-aio-Add-pg_aios-view.patch text/x-diff 18.8 KB
v2.12-0016-aio-Add-test_aio-module.patch text/x-diff 55.9 KB
v2.12-0017-aio-bufmgr-Comment-fixes.patch text/x-diff 4.3 KB
v2.12-0018-aio-Experimental-heuristics-to-increase-batchi.patch text/x-diff 1.6 KB
v2.12-0019-aio-Implement-smgr-md-fd-write-support.patch text/x-diff 13.7 KB
v2.12-0020-aio-Add-bounce-buffers.patch text/x-diff 23.2 KB
v2.12-0021-bufmgr-Implement-AIO-write-support.patch text/x-diff 9.8 KB
v2.12-0022-aio-Add-IO-queue-helper.patch text/x-diff 7.4 KB
v2.12-0023-bufmgr-use-AIO-in-checkpointer-bgwriter.patch text/x-diff 31.3 KB
v2.12-0024-Ensure-a-resowner-exists-for-all-paths-that-ma.patch text/x-diff 2.6 KB
v2.12-0025-Temporary-Increase-BAS_BULKREAD-size.patch text/x-diff 1.3 KB
v2.12-0026-WIP-Use-MAP_POPULATE.patch text/x-diff 1.1 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message torikoshia 2025-03-25 01:27:31 Re: RFC: Allow EXPLAIN to Output Page Fault Information
Previous Message Noah Misch 2025-03-25 00:45:37 Re: AIO v2.5