|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <limits.h>#include "libpq/pqsignal.h"#include "miscadmin.h"#include "port/pg_bitutils.h"#include "postmaster/auxprocess.h"#include "postmaster/interrupt.h"#include "storage/aio.h"#include "storage/aio_internal.h"#include "storage/aio_subsys.h"#include "storage/io_worker.h"#include "storage/ipc.h"#include "storage/latch.h"#include "storage/lwlock.h"#include "storage/pmsignal.h"#include "storage/proc.h"#include "storage/shmem.h"#include "tcop/tcopprot.h"#include "utils/injection_point.h"#include "utils/memdebug.h"#include "utils/ps_status.h"#include "utils/wait_event.h"
Go to the source code of this file.
Data Structures | |
| struct | PgAioWorkerSubmissionQueue |
| struct | PgAioWorkerSlot |
| struct | PgAioWorkerControl |
Macros | |
| #define | PGAIO_WORKER_WAKEUP_RATIO_SATURATE 4 |
| #define | PGAIO_WORKERSET_BITS (sizeof(PgAioWorkerSet) * CHAR_BIT) |
Variables | |
| const IoMethodOps | pgaio_worker_ops |
| int | io_min_workers = 2 |
| int | io_max_workers = 8 |
| int | io_worker_idle_timeout = 60000 |
| int | io_worker_launch_interval = 100 |
| static int | io_worker_queue_size = 64 |
| static int | MyIoWorkerId = -1 |
| static PgAioWorkerSubmissionQueue * | io_worker_submission_queue |
| static PgAioWorkerControl * | io_worker_control |
| #define PGAIO_WORKER_WAKEUP_RATIO_SATURATE 4 |
Definition at line 66 of file method_worker.c.
| #define PGAIO_WORKERSET_BITS (sizeof(PgAioWorkerSet) * CHAR_BIT) |
Definition at line 92 of file method_worker.c.
Definition at line 90 of file method_worker.c.
Definition at line 666 of file method_worker.c.
References ErrorContextCallback::arg, Assert, AuxiliaryProcessMainCommon(), ErrorContextCallback::callback, CHECK_FOR_INTERRUPTS, ConfigReloadPending, DEBUG4, description, die, EmitErrorReport(), END_CRIT_SECTION, error_context_stack, fb(), GetCurrentTimestamp(), HOLD_INTERRUPTS, i, PgAioWorkerControl::idle_workerset, INJECTION_POINT, PgAioCtl::io_handles, io_max_workers, io_worker_control, io_worker_idle_timeout, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), LWLockReleaseAll(), MyIoWorkerId, MyLatch, now(), PgAioWorkerControl::nworkers, pfree(), PG_exception_stack, pgaio_ctl, pgaio_debug_io, pgaio_io_get_iovec_length(), pgaio_io_get_op_name(), pgaio_io_get_target_description(), pgaio_io_perform_synchronously(), pgaio_io_process_completion(), pgaio_io_reopen(), pgaio_worker_can_timeout(), pgaio_worker_cancel_grow(), pgaio_worker_choose_idle(), pgaio_worker_error_callback(), pgaio_worker_register(), pgaio_worker_request_grow(), pgaio_worker_submission_queue_consume(), pgaio_worker_submission_queue_depth(), pgaio_worker_wake(), PGAIO_WORKER_WAKEUP_RATIO_SATURATE, pgaio_workerset_insert(), pgaio_workerset_remove(), PGC_SIGHUP, pqsignal, ErrorContextCallback::previous, proc_exit(), ProcessConfigFile(), procsignal_sigusr1_handler(), ResetLatch(), RESUME_INTERRUPTS, set_ps_display(), ShutdownRequestPending, SIGALRM, SIGHUP, SignalHandlerForConfigReload(), SignalHandlerForShutdownRequest(), SIGPIPE, SIGUSR1, SIGUSR2, sprintf, START_CRIT_SECTION, TimestampDifferenceMilliseconds(), TimestampTzPlusMilliseconds, UnBlockSig, VALGRIND_MAKE_MEM_UNDEFINED, WaitLatch(), WL_EXIT_ON_PM_DEATH, WL_LATCH_SET, and WL_TIMEOUT.
Definition at line 647 of file method_worker.c.
References fb(), io_min_workers, io_worker_control, LW_SHARED, LWLockAcquire(), LWLockRelease(), MyIoWorkerId, pgaio_workerset_get_highest(), and PgAioWorkerControl::workerset.
Referenced by IoWorkerMain().
Definition at line 314 of file method_worker.c.
References PgAioWorkerControl::grow, io_worker_control, and pg_memory_barrier.
Referenced by IoWorkerMain().
Definition at line 360 of file method_worker.c.
References Assert, fb(), PgAioWorkerControl::idle_workerset, io_worker_control, LW_EXCLUSIVE, LWLockHeldByMeInMode(), pgaio_workerset_get_lowest(), pgaio_workerset_is_empty(), pgaio_workerset_remove(), and pgaio_workerset_remove_lte().
Referenced by IoWorkerMain(), and pgaio_worker_submit().
Definition at line 543 of file method_worker.c.
References Assert, fb(), PgAioWorkerControl::idle_workerset, INVALID_PROC_NUMBER, io_worker_control, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MyIoWorkerId, MyProcNumber, PgAioWorkerControl::nworkers, pgaio_workerset_remove(), pgaio_workerset_wake(), PgAioWorkerSlot::proc_number, PgAioWorkerControl::workers, and PgAioWorkerControl::workerset.
Referenced by pgaio_worker_register().
Definition at line 615 of file method_worker.c.
References arg, Assert, B_IO_WORKER, errcontext, fb(), GetPGProcByNumber, MyBackendType, and MyProcNumber.
Referenced by IoWorkerMain().
|
static |
Definition at line 473 of file method_worker.c.
References fb(), IsUnderPostmaster, PGAIO_HF_REFERENCES_LOCAL, and pgaio_io_can_reopen().
Referenced by pgaio_worker_submit().
Definition at line 349 of file method_worker.c.
References PgAioWorkerControl::grow, PgAioWorkerControl::grow_signal_sent, io_worker_control, and pg_memory_barrier.
Referenced by maybe_start_io_workers().
Definition at line 339 of file method_worker.c.
References PgAioWorkerControl::grow, io_worker_control, and pg_memory_barrier.
Referenced by maybe_start_io_workers().
Definition at line 328 of file method_worker.c.
References PgAioWorkerControl::grow_signal_sent, io_worker_control, and pg_memory_barrier.
Referenced by maybe_start_io_workers_scheduled_at().
Definition at line 576 of file method_worker.c.
References Assert, elog, ERROR, fb(), INVALID_PROC_NUMBER, io_worker_control, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MAX_IO_WORKERS, MyIoWorkerId, MyProcNumber, PgAioWorkerControl::nworkers, on_shmem_exit(), pgaio_worker_die(), pgaio_workerset_all(), pgaio_workerset_get_lowest(), pgaio_workerset_insert(), pgaio_workerset_is_empty(), pgaio_workerset_subtract(), pgaio_workerset_wake(), PgAioWorkerSlot::proc_number, PgAioWorkerControl::workers, and PgAioWorkerControl::workerset.
Referenced by IoWorkerMain().
Definition at line 278 of file method_worker.c.
References PgAioWorkerControl::grow, PgAioWorkerControl::grow_signal_sent, io_max_workers, io_worker_control, PgAioWorkerControl::nworkers, pg_memory_barrier, PMSIGNAL_IO_WORKER_GROW, and SendPostmasterSignal().
Referenced by IoWorkerMain().
Definition at line 256 of file method_worker.c.
References PgAioWorkerControl::grow, PgAioWorkerSubmissionQueue::head, i, PgAioWorkerControl::idle_workerset, INVALID_PROC_NUMBER, io_worker_control, io_worker_queue_size, io_worker_submission_queue, MAX_IO_WORKERS, pg_nextpower2_32(), pgaio_workerset_initialize(), PgAioWorkerSlot::proc_number, PgAioWorkerSubmissionQueue::size, PgAioWorkerSubmissionQueue::tail, PgAioWorkerControl::workers, and PgAioWorkerControl::workerset.
Definition at line 234 of file method_worker.c.
References fb(), io_worker_control, io_worker_queue_size, io_worker_submission_queue, MAX_IO_WORKERS, name, pg_nextpower2_32(), and ShmemRequestStruct.
Definition at line 436 of file method_worker.c.
References Assert, fb(), PgAioWorkerSubmissionQueue::head, io_worker_submission_queue, LW_EXCLUSIVE, LWLockHeldByMeInMode(), result, PgAioWorkerSubmissionQueue::size, PgAioWorkerSubmissionQueue::sqes, and PgAioWorkerSubmissionQueue::tail.
Referenced by IoWorkerMain().
Definition at line 454 of file method_worker.c.
References Assert, fb(), PgAioWorkerSubmissionQueue::head, io_worker_submission_queue, LW_EXCLUSIVE, LWLockHeldByMeInMode(), PgAioWorkerSubmissionQueue::size, and PgAioWorkerSubmissionQueue::tail.
Referenced by IoWorkerMain().
|
static |
Definition at line 413 of file method_worker.c.
References Assert, DEBUG3, fb(), PgAioWorkerSubmissionQueue::head, io_worker_submission_queue, LW_EXCLUSIVE, LWLockHeldByMeInMode(), pgaio_debug, pgaio_io_get_id(), PgAioWorkerSubmissionQueue::size, PgAioWorkerSubmissionQueue::sqes, and PgAioWorkerSubmissionQueue::tail.
Referenced by pgaio_worker_submit().
|
static |
Definition at line 482 of file method_worker.c.
References Assert, fb(), i, LW_EXCLUSIVE, LWLockConditionalAcquire(), LWLockRelease(), pgaio_io_perform_synchronously(), pgaio_io_prepare_submit(), PGAIO_SUBMIT_BATCH_SIZE, pgaio_worker_choose_idle(), pgaio_worker_needs_synchronous_execution(), pgaio_worker_submission_queue_insert(), and pgaio_worker_wake().
Definition at line 385 of file method_worker.c.
References GetPGProcByNumber, INVALID_PROC_NUMBER, io_worker_control, PgAioWorkerSlot::proc_number, SetLatch(), and PgAioWorkerControl::workers.
Referenced by IoWorkerMain(), pgaio_worker_submit(), and pgaio_workerset_wake().
Definition at line 1028 of file method_worker.c.
References io_method, and IOMETHOD_WORKER.
Referenced by maybe_start_io_workers_scheduled_at().
|
static |
Definition at line 163 of file method_worker.c.
References fb(), MAX_IO_WORKERS, and PGAIO_WORKERSET_BITS.
Referenced by pgaio_worker_register().
|
static |
Definition at line 196 of file method_worker.c.
References Assert, pg_leftmost_one_pos64(), and pgaio_workerset_is_empty().
Referenced by pgaio_worker_can_timeout().
|
static |
Definition at line 203 of file method_worker.c.
References Assert, pg_rightmost_one_pos64(), and pgaio_workerset_is_empty().
Referenced by pgaio_worker_choose_idle(), pgaio_worker_register(), and pgaio_workerset_pop_lowest().
|
static |
Definition at line 144 of file method_worker.c.
Referenced by pgaio_worker_shmem_init().
|
static |
Definition at line 175 of file method_worker.c.
References Assert, MAX_IO_WORKERS, and pgaio_workerset_singleton().
Referenced by IoWorkerMain(), and pgaio_worker_register().
|
static |
Definition at line 150 of file method_worker.c.
Referenced by pgaio_worker_choose_idle(), pgaio_worker_register(), pgaio_workerset_get_highest(), pgaio_workerset_get_lowest(), and pgaio_workerset_wake().
|
static |
Definition at line 210 of file method_worker.c.
References pgaio_workerset_get_lowest(), and pgaio_workerset_remove().
Referenced by pgaio_workerset_wake().
|
static |
Definition at line 182 of file method_worker.c.
References Assert, fb(), and MAX_IO_WORKERS.
Referenced by IoWorkerMain(), pgaio_worker_choose_idle(), pgaio_worker_die(), and pgaio_workerset_pop_lowest().
|
static |
Definition at line 189 of file method_worker.c.
References Assert, and MAX_IO_WORKERS.
Referenced by pgaio_worker_choose_idle().
|
static |
Definition at line 156 of file method_worker.c.
References Assert, fb(), and MAX_IO_WORKERS.
Referenced by pgaio_workerset_insert().
|
static |
Definition at line 169 of file method_worker.c.
References fb().
Referenced by pgaio_worker_register().
|
static |
Definition at line 406 of file method_worker.c.
References pgaio_worker_wake(), pgaio_workerset_is_empty(), and pgaio_workerset_pop_lowest().
Referenced by pgaio_worker_die(), and pgaio_worker_register().
| int io_max_workers = 8 |
Definition at line 132 of file method_worker.c.
Referenced by IoWorkerMain(), maybe_start_io_workers_scheduled_at(), and pgaio_worker_request_grow().
| int io_min_workers = 2 |
Definition at line 131 of file method_worker.c.
Referenced by maybe_start_io_workers(), maybe_start_io_workers_scheduled_at(), and pgaio_worker_can_timeout().
|
static |
Definition at line 140 of file method_worker.c.
Referenced by IoWorkerMain(), pgaio_worker_can_timeout(), pgaio_worker_cancel_grow(), pgaio_worker_choose_idle(), pgaio_worker_die(), pgaio_worker_pm_clear_grow_signal_sent(), pgaio_worker_pm_test_grow(), pgaio_worker_pm_test_grow_signal_sent(), pgaio_worker_register(), pgaio_worker_request_grow(), pgaio_worker_shmem_init(), pgaio_worker_shmem_request(), and pgaio_worker_wake().
| int io_worker_idle_timeout = 60000 |
Definition at line 133 of file method_worker.c.
Referenced by IoWorkerMain().
| int io_worker_launch_interval = 100 |
Definition at line 134 of file method_worker.c.
Referenced by maybe_start_io_workers().
|
static |
Definition at line 137 of file method_worker.c.
Referenced by pgaio_worker_shmem_init(), and pgaio_worker_shmem_request().
|
static |
Definition at line 139 of file method_worker.c.
Referenced by pgaio_worker_shmem_init(), pgaio_worker_shmem_request(), pgaio_worker_submission_queue_consume(), pgaio_worker_submission_queue_depth(), and pgaio_worker_submission_queue_insert().
|
static |
Definition at line 138 of file method_worker.c.
Referenced by IoWorkerMain(), pgaio_worker_can_timeout(), pgaio_worker_die(), and pgaio_worker_register().
| const IoMethodOps pgaio_worker_ops |
Definition at line 121 of file method_worker.c.