diff options
author | Andres Freund | 2025-03-30 23:14:55 +0000 |
---|---|---|
committer | Andres Freund | 2025-03-30 23:16:47 +0000 |
commit | 2a5e709e721cf5f890cde51755b84cfe25d1c4d9 (patch) | |
tree | e48d7981c9ea2c20b9da99e5f78c7173875f7c68 /src/backend | |
parent | ae3df4b34155d4a3811762e78d5076e64df66fba (diff) |
Enable IO concurrency on all systems
Previously effective_io_concurrency and maintenance_io_concurrency could not
be set above 0 on machines without fadvise support. AIO enables IO concurrency
without such support, via io_method=worker.
Currently only subsystems using the read stream API will take advantage of
this. Other users of maintenance_io_concurrency (like recovery prefetching)
which leverage OS advice directly will not benefit from this change. In those
cases, maintenance_io_concurrency will have no effect on I/O behavior.
Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/CAAKRu_atGgZePo=_g6T3cNtfMf0QxpvoUh5OUqa_cnPdhLd=gw@mail.gmail.com
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/common/reloptions.c | 8 | ||||
-rw-r--r-- | src/backend/commands/variable.c | 30 | ||||
-rw-r--r-- | src/backend/utils/misc/guc_tables.c | 4 | ||||
-rw-r--r-- | src/backend/utils/misc/postgresql.conf.sample | 4 |
4 files changed, 4 insertions, 42 deletions
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index 645b5c00467..46c1dce222d 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -361,11 +361,7 @@ static relopt_int intRelOpts[] = RELOPT_KIND_TABLESPACE, ShareUpdateExclusiveLock }, -#ifdef USE_PREFETCH -1, 0, MAX_IO_CONCURRENCY -#else - 0, 0, 0 -#endif }, { { @@ -374,11 +370,7 @@ static relopt_int intRelOpts[] = RELOPT_KIND_TABLESPACE, ShareUpdateExclusiveLock }, -#ifdef USE_PREFETCH -1, 0, MAX_IO_CONCURRENCY -#else - 0, 0, 0 -#endif }, { { diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 84f044a1959..a9f2a3a3062 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -1145,7 +1145,6 @@ check_cluster_name(char **newval, void **extra, GucSource source) void assign_maintenance_io_concurrency(int newval, void *extra) { -#ifdef USE_PREFETCH /* * Reconfigure recovery prefetching, because a setting it depends on * changed. @@ -1153,7 +1152,6 @@ assign_maintenance_io_concurrency(int newval, void *extra) maintenance_io_concurrency = newval; if (AmStartupProcess()) XLogPrefetchReconfigure(); -#endif } /* @@ -1250,34 +1248,6 @@ check_default_with_oids(bool *newval, void **extra, GucSource source) } bool -check_effective_io_concurrency(int *newval, void **extra, GucSource source) -{ -#ifndef USE_PREFETCH - if (*newval != 0) - { - GUC_check_errdetail("\"%s\" must be set to 0 on platforms that lack support for issuing read-ahead advice.", - "effective_io_concurrency"); - return false; - } -#endif /* USE_PREFETCH */ - return true; -} - -bool -check_maintenance_io_concurrency(int *newval, void **extra, GucSource source) -{ -#ifndef USE_PREFETCH - if (*newval != 0) - { - GUC_check_errdetail("\"%s\" must be set to 0 on platforms that lack support for issuing read-ahead advice.", - "maintenance_io_concurrency"); - return false; - } -#endif /* USE_PREFETCH */ - return true; -} - -bool check_ssl(bool *newval, void **extra, GucSource source) { #ifndef USE_SSL diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index 76c7c6bb4b1..4eaeca89f2c 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -3235,7 +3235,7 @@ struct config_int ConfigureNamesInt[] = &effective_io_concurrency, DEFAULT_EFFECTIVE_IO_CONCURRENCY, 0, MAX_IO_CONCURRENCY, - check_effective_io_concurrency, NULL, NULL + NULL, NULL, NULL }, { @@ -3249,7 +3249,7 @@ struct config_int ConfigureNamesInt[] = &maintenance_io_concurrency, DEFAULT_MAINTENANCE_IO_CONCURRENCY, 0, MAX_IO_CONCURRENCY, - check_maintenance_io_concurrency, assign_maintenance_io_concurrency, + NULL, assign_maintenance_io_concurrency, NULL }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 7c12434efa2..ff56a1f0732 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -198,8 +198,8 @@ # - I/O - #backend_flush_after = 0 # measured in pages, 0 disables -#effective_io_concurrency = 16 # 1-1000; 0 disables prefetching -#maintenance_io_concurrency = 16 # 1-1000; 0 disables prefetching +#effective_io_concurrency = 16 # 1-1000; 0 disables issuing multiple simultaneous IO requests +#maintenance_io_concurrency = 16 # 1-1000; same as effective_io_concurrency #io_max_combine_limit = 128kB # usually 1-128 blocks (depends on OS) # (change requires restart) #io_combine_limit = 128kB # usually 1-128 blocks (depends on OS) |