From 3de62a512b9fa94eb8c93164a4e25bd4824829fa Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Mon, 4 Aug 2025 22:25:50 +1200 Subject: [PATCH v1 2/4] aio: Set pg_aios.f_sync for worker fallback. When using io_method=worker, IOs are performed synchronously by the submitting backend if the submission queue is too full. This is now visible in the pg_aios view's f_sync column. --- src/backend/storage/aio/method_worker.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/backend/storage/aio/method_worker.c b/src/backend/storage/aio/method_worker.c index bf8f77e6ff6..ba2d54f2839 100644 --- a/src/backend/storage/aio/method_worker.c +++ b/src/backend/storage/aio/method_worker.c @@ -240,8 +240,8 @@ pgaio_worker_needs_synchronous_execution(PgAioHandle *ioh) || !pgaio_io_can_reopen(ioh); } -static void -pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios) +static int +pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios) { PgAioHandle *synchronous_ios[PGAIO_SUBMIT_BATCH_SIZE]; int nsync = 0; @@ -254,7 +254,11 @@ pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios) for (int i = 0; i < num_staged_ios; ++i) { Assert(!pgaio_worker_needs_synchronous_execution(staged_ios[i])); - if (!pgaio_worker_submission_queue_insert(staged_ios[i])) + if (pgaio_worker_submission_queue_insert(staged_ios[i])) + { + pgaio_io_prepare_submit(staged_ios[i]); + } + else { /* * We'll do it synchronously, but only after we've sent as many as @@ -286,23 +290,10 @@ pgaio_worker_submit_internal(int num_staged_ios, PgAioHandle **staged_ios) { for (int i = 0; i < nsync; ++i) { + pgaio_io_prepare_submit_synchronously(synchronous_ios[i]); pgaio_io_perform_synchronously(synchronous_ios[i]); } } -} - -static int -pgaio_worker_submit(uint16 num_staged_ios, PgAioHandle **staged_ios) -{ - for (int i = 0; i < num_staged_ios; i++) - { - PgAioHandle *ioh = staged_ios[i]; - - pgaio_io_prepare_submit(ioh); - } - - pgaio_worker_submit_internal(num_staged_ios, staged_ios); - return num_staged_ios; } -- 2.39.5 (Apple Git-154)