1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-21 05:21:08 +03:00

aio: Basic subsystem initialization

This commit just does the minimal wiring up of the AIO subsystem, added in the
next commit, to the rest of the system. The next commit contains more details
about motivation and architecture.

This commit is kept separate to make it easier to review, separating the
changes across the tree, from the implementation of the new subsystem.

We discussed squashing this commit with the main commit before merging AIO,
but there has been a mild preference for keeping it separate.

Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/uvrtrknj4kdytuboidbhwclo4gxhswwcpgadptsjvjqcluzmah%40brqs62irg4dt
This commit is contained in:
Andres Freund
2025-03-17 18:51:33 -04:00
parent 65db3963ae
commit 02844012b3
24 changed files with 356 additions and 0 deletions

View File

@@ -9,6 +9,8 @@ top_builddir = ../../../..
include $(top_builddir)/src/Makefile.global
OBJS = \
aio.o \
aio_init.o \
read_stream.o
include $(top_srcdir)/src/backend/common.mk

View File

@@ -0,0 +1,90 @@
/*-------------------------------------------------------------------------
*
* aio.c
* AIO - Core Logic
*
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* src/backend/storage/aio/aio.c
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "lib/ilist.h"
#include "storage/aio.h"
#include "storage/aio_subsys.h"
#include "utils/guc.h"
#include "utils/guc_hooks.h"
/* Options for io_method. */
const struct config_enum_entry io_method_options[] = {
{"sync", IOMETHOD_SYNC, false},
{NULL, 0, false}
};
/* GUCs */
int io_method = DEFAULT_IO_METHOD;
int io_max_concurrency = -1;
/*
* Release IO handle during resource owner cleanup.
*/
void
pgaio_io_release_resowner(dlist_node *ioh_node, bool on_error)
{
}
/*
* Perform AIO related cleanup after an error.
*
* This should be called early in the error recovery paths, as later steps may
* need to issue AIO (e.g. to record a transaction abort WAL record).
*/
void
pgaio_error_cleanup(void)
{
}
/*
* Perform AIO related checks at (sub-)transactional boundaries.
*
* This should be called late during (sub-)transactional commit/abort, after
* all steps that might need to perform AIO, so that we can verify that the
* AIO subsystem is in a valid state at the end of a transaction.
*/
void
AtEOXact_Aio(bool is_commit)
{
}
void
assign_io_method(int newval, void *extra)
{
}
bool
check_io_max_concurrency(int *newval, void **extra, GucSource source)
{
if (*newval == -1)
{
/*
* Auto-tuning will be applied later during startup, as auto-tuning
* depends on the value of various GUCs.
*/
return true;
}
else if (*newval == 0)
{
GUC_check_errdetail("Only -1 or values bigger than 0 are valid.");
return false;
}
return true;
}

View File

@@ -0,0 +1,37 @@
/*-------------------------------------------------------------------------
*
* aio_init.c
* AIO - Subsystem Initialization
*
* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* src/backend/storage/aio/aio_init.c
*
*-------------------------------------------------------------------------
*/
#include "postgres.h"
#include "storage/aio_subsys.h"
Size
AioShmemSize(void)
{
Size sz = 0;
return sz;
}
void
AioShmemInit(void)
{
}
void
pgaio_init_backend(void)
{
}

View File

@@ -1,5 +1,7 @@
# Copyright (c) 2024-2025, PostgreSQL Global Development Group
backend_sources += files(
'aio.c',
'aio_init.c',
'read_stream.c',
)