|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <unistd.h>#include "access/slru.h"#include "common/int.h"#include "fmgr.h"#include "funcapi.h"#include "miscadmin.h"#include "port/pg_bitutils.h"#include "port/pg_numa.h"#include "storage/lwlock.h"#include "storage/pg_shmem.h"#include "storage/shmem.h"#include "storage/shmem_internal.h"#include "storage/spin.h"#include "utils/builtins.h"#include "utils/tuplestore.h"
Go to the source code of this file.
Data Structures | |
| struct | ShmemRequest |
| struct | ShmemAllocatorData |
| struct | ShmemIndexEnt |
Macros | |
| #define | ShmemIndexLock (&ShmemAllocator->index_lock) |
| #define | SHMEM_INDEX_KEYSIZE (48) |
| #define | SHMEM_INDEX_ADDITIONAL_SIZE (128) |
| #define | PG_GET_SHMEM_SIZES_COLS 4 |
| #define | PG_GET_SHMEM_NUMA_SIZES_COLS 3 |
Typedefs | |
| typedef struct ShmemAllocatorData | ShmemAllocatorData |
Enumerations | |
| enum | shmem_request_state { SRS_INITIAL , SRS_REQUESTING , SRS_INITIALIZING , SRS_ATTACHING , SRS_AFTER_STARTUP_ATTACH_OR_INIT , SRS_DONE } |
Variables | |
| static List * | registered_shmem_callbacks |
| static List * | pending_shmem_requests |
| static enum shmem_request_state | shmem_request_state = SRS_INITIAL |
| static PGShmemHeader * | ShmemSegHdr |
| static void * | ShmemBase |
| static void * | ShmemEnd |
| static ShmemAllocatorData * | ShmemAllocator |
| static HTAB * | ShmemIndex |
| static bool | firstNumaTouch = true |
| #define PG_GET_SHMEM_NUMA_SIZES_COLS 3 |
| #define PG_GET_SHMEM_SIZES_COLS 4 |
| #define ShmemIndexLock (&ShmemAllocator->index_lock) |
| typedef struct ShmemAllocatorData ShmemAllocatorData |
| enum shmem_request_state |
| Enumerator | |
|---|---|
| SRS_INITIAL | |
| SRS_REQUESTING | |
| SRS_INITIALIZING | |
| SRS_ATTACHING | |
| SRS_AFTER_STARTUP_ATTACH_OR_INIT | |
| SRS_DONE | |
Definition at line 185 of file shmem.c.
Definition at line 1048 of file shmem.c.
References ereport, errcode(), errmsg, ERROR, pg_add_size_overflow(), result, s1, and s2.
Referenced by _brin_parallel_estimate_shared(), _bt_parallel_estimate_shared(), _gin_parallel_estimate_shared(), ApplyLauncherShmemRequest(), AsyncShmemRequest(), AutoVacuumShmemRequest(), BackgroundWorkerShmemRequest(), btestimateparallelscan(), BTreeShmemRequest(), CalculateFastPathLockShmemSize(), CalculateShmemSize(), CheckpointerShmemRequest(), CreateAnonymousSegment(), estimate_variable_size(), EstimateClientConnectionInfoSpace(), EstimateComboCIDStateSpace(), EstimateGUCStateSpace(), EstimateLibraryStateSpace(), EstimateParamExecSpace(), EstimateParamListSpace(), EstimateSnapshotSpace(), EstimateTransactionStateSpace(), ExecAggEstimate(), ExecAppendEstimate(), ExecBitmapHeapInstrumentEstimate(), ExecBitmapHeapInstrumentInitDSM(), ExecHashEstimate(), ExecIncrementalSortEstimate(), ExecIndexOnlyScanInstrumentEstimate(), ExecIndexOnlyScanInstrumentInitDSM(), ExecIndexScanInstrumentEstimate(), ExecIndexScanInstrumentInitDSM(), ExecMemoizeEstimate(), ExecSeqScanInstrumentEstimate(), ExecSeqScanInstrumentInitDSM(), ExecSortEstimate(), ExecTidRangeScanInstrumentEstimate(), ExecTidRangeScanInstrumentInitDSM(), expand_planner_arrays(), hash_estimate_size(), index_parallelscan_estimate(), index_parallelscan_initialize(), InitializeShmemGUCs(), MultiXactShmemRequest(), PMSignalShmemRequest(), PredicateLockShmemRequest(), ProcArrayShmemRequest(), ProcGlobalShmemRequest(), ProcSignalShmemRequest(), ReplicationOriginShmemRequest(), ReplicationSlotsShmemRequest(), RequestAddinShmemSpace(), SerializeTransactionState(), SharedInvalShmemRequest(), shm_toc_estimate(), ShmemGetRequestedSize(), StatsShmemSize(), table_parallelscan_estimate(), tuplesort_estimate_shared(), TwoPhaseShmemRequest(), WaitLSNShmemRequest(), WalSndShmemRequest(), and XLOGShmemRequest().
|
static |
Definition at line 581 of file shmem.c.
References ereport, errmsg, ERROR, HASH_FIND, hash_search(), ShmemRequest::kind, ShmemIndexEnt::location, name, ShmemStructOpts::name, ShmemRequest::options, ShmemStructOpts::ptr, SHMEM_ATTACH_UNKNOWN_SIZE, shmem_hash_attach(), SHMEM_KIND_HASH, SHMEM_KIND_SLRU, SHMEM_KIND_STRUCT, shmem_slru_attach(), ShmemIndex, ShmemIndexEnt::size, and ShmemStructOpts::size.
Referenced by CallShmemCallbacksAfterStartup(), and ShmemInitStruct().
|
static |
Definition at line 899 of file shmem.c.
References Assert, ShmemCallbacks::attach_fn, AttachShmemIndexEntry(), elog, ERROR, foreach_ptr, HASH_FIND, hash_search(), ShmemCallbacks::init_fn, InitShmemIndexEntry(), list_free_deep(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), NIL, ShmemCallbacks::opaque_arg, pending_shmem_requests, pfree(), ShmemCallbacks::request_fn, ShmemIndex, ShmemIndexLock, SRS_AFTER_STARTUP_ATTACH_OR_INIT, SRS_DONE, and SRS_REQUESTING.
Referenced by RegisterShmemCallbacks().
| void InitShmemAllocator | ( | PGShmemHeader * | seghdr | ) |
Definition at line 638 of file shmem.c.
References Assert, CACHELINEALIGN, PGShmemHeader::content_offset, HASHCTL::entrysize, ereport, errcode(), errmsg, ERROR, ShmemAllocatorData::free_offset, HASH_ELEM, HASH_ENTER, hash_estimate_size(), HASH_FIXED_SIZE, hash_search(), HASH_STRINGS, ShmemAllocatorData::index, ShmemAllocatorData::index_lock, ShmemAllocatorData::index_size, IsUnderPostmaster, HASHCTL::keysize, list_length(), LWLockInitialize(), MAXALIGN, pending_shmem_requests, result, shmem_hash_create(), SHMEM_INDEX_ADDITIONAL_SIZE, SHMEM_INDEX_KEYSIZE, ShmemAllocatorData::shmem_lock, ShmemAlloc(), ShmemAllocator, ShmemBase, ShmemEnd, ShmemIndex, ShmemSegHdr, SpinLockInit(), SRS_INITIAL, SRS_INITIALIZING, SRS_REQUESTING, and PGShmemHeader::totalsize.
Referenced by CreateSharedMemoryAndSemaphores().
|
static |
Definition at line 512 of file shmem.c.
References ShmemStructOpts::alignment, ShmemIndexEnt::allocated_size, elog, ereport, errcode(), errmsg, ERROR, HASH_ENTER_NULL, HASH_REMOVE, hash_search(), ShmemRequest::kind, ShmemIndexEnt::location, name, ShmemStructOpts::name, ShmemRequest::options, ShmemStructOpts::ptr, shmem_hash_init(), SHMEM_KIND_HASH, SHMEM_KIND_SLRU, SHMEM_KIND_STRUCT, shmem_slru_init(), ShmemAllocRaw(), ShmemIndex, ShmemIndexEnt::size, and ShmemStructOpts::size.
Referenced by CallShmemCallbacksAfterStartup(), ShmemInitRequested(), and ShmemInitStruct().
Definition at line 1063 of file shmem.c.
References ereport, errcode(), errmsg, ERROR, pg_mul_size_overflow(), result, s1, and s2.
Referenced by _brin_begin_parallel(), _bt_begin_parallel(), _gin_begin_parallel(), AioBackendShmemSize(), AioHandleDataShmemSize(), AioHandleIOVShmemSize(), AioHandleShmemSize(), ApplyLauncherShmemRequest(), AsyncShmemRequest(), AutoVacuumShmemRequest(), BackendStatusShmemAttach(), BackendStatusShmemRequest(), BackgroundWorkerShmemRequest(), BTreeShmemRequest(), CalculateFastPathLockShmemSize(), CheckpointerShmemRequest(), EstimateComboCIDStateSpace(), EstimatePendingSyncsSpace(), EstimateReindexStateSpace(), EstimateSnapshotSpace(), EstimateTransactionStateSpace(), ExecAggEstimate(), ExecBitmapHeapInstrumentEstimate(), ExecBitmapHeapInstrumentInitDSM(), ExecHashEstimate(), ExecIncrementalSortEstimate(), ExecIndexOnlyScanInstrumentEstimate(), ExecIndexOnlyScanInstrumentInitDSM(), ExecIndexScanInstrumentEstimate(), ExecIndexScanInstrumentInitDSM(), ExecInitParallelPlan(), ExecMemoizeEstimate(), ExecParallelRetrieveInstrumentation(), ExecParallelRetrieveJitInstrumentation(), ExecParallelSetupTupleQueues(), ExecSeqScanInstrumentEstimate(), ExecSeqScanInstrumentInitDSM(), ExecSortEstimate(), ExecTidRangeScanInstrumentEstimate(), ExecTidRangeScanInstrumentInitDSM(), hash_estimate_size(), InitializeParallelDSM(), MultiXactShmemRequest(), parallel_vacuum_init(), PGSemaphoreShmemRequest(), PMSignalShmemRequest(), PredicateLockShmemRequest(), ProcArrayShmemRequest(), ProcGlobalShmemRequest(), ProcSignalShmemRequest(), ReplicationOriginShmemRequest(), ReplicationSlotsShmemRequest(), SharedInvalShmemRequest(), shm_toc_estimate(), tuplesort_estimate_shared(), TwoPhaseShmemRequest(), WaitLSNShmemRequest(), WalSndShmemRequest(), and XLOGShmemRequest().
| Datum pg_get_shmem_allocations | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1076 of file shmem.c.
References ShmemIndexEnt::allocated_size, CStringGetTextDatum, ShmemAllocatorData::free_offset, hash_seq_init(), hash_seq_search(), InitMaterializedSRF(), Int64GetDatum(), ShmemIndexEnt::key, ShmemIndexEnt::location, LW_SHARED, LWLockAcquire(), LWLockRelease(), PG_GET_SHMEM_SIZES_COLS, ReturnSetInfo::setDesc, ReturnSetInfo::setResult, ShmemAllocator, ShmemIndex, ShmemIndexLock, ShmemSegHdr, ShmemIndexEnt::size, PGShmemHeader::totalsize, tuplestore_putvalues(), and values.
| Datum pg_get_shmem_allocations_numa | ( | PG_FUNCTION_ARGS | ) |
Definition at line 1133 of file shmem.c.
References ShmemIndexEnt::allocated_size, CHECK_FOR_INTERRUPTS, CStringGetTextDatum, DEBUG1, elog, ERROR, firstNumaTouch, hash_seq_init(), hash_seq_search(), i, InitMaterializedSRF(), Int32GetDatum(), Int64GetDatum(), ShmemIndexEnt::key, ShmemIndexEnt::location, LW_SHARED, LWLockAcquire(), LWLockRelease(), palloc0_array, palloc_array, PG_GET_SHMEM_NUMA_SIZES_COLS, pg_get_shmem_pagesize(), pg_numa_get_max_node(), pg_numa_init(), pg_numa_query_pages(), pg_numa_touch_mem_if_required, ReturnSetInfo::setDesc, ReturnSetInfo::setResult, ShmemIndex, ShmemIndexLock, ShmemSegHdr, PGShmemHeader::totalsize, tuplestore_putvalues(), TYPEALIGN, TYPEALIGN_DOWN, UINT64_FORMAT, and values.
| Size pg_get_shmem_pagesize | ( | void | ) |
Definition at line 1304 of file shmem.c.
References Assert, GetHugePageSize(), HUGE_PAGES_ON, huge_pages_status, HUGE_PAGES_UNKNOWN, and IsUnderPostmaster.
Referenced by pg_buffercache_os_pages_internal(), and pg_get_shmem_allocations_numa().
| Datum pg_numa_available | ( | PG_FUNCTION_ARGS | ) |
| void RegisterShmemCallbacks | ( | const ShmemCallbacks * | callbacks | ) |
Definition at line 874 of file shmem.c.
References CallShmemCallbacksAfterStartup(), elog, ERROR, ShmemCallbacks::flags, IsUnderPostmaster, lappend(), registered_shmem_callbacks, SHMEM_CALLBACKS_ALLOW_AFTER_STARTUP, and SRS_DONE.
Referenced by _PG_init().
| void ResetShmemAllocator | ( | void | ) |
Definition at line 743 of file shmem.c.
References Assert, IsUnderPostmaster, NIL, pending_shmem_requests, and SRS_INITIAL.
Referenced by PostmasterStateMachine().
| bool ShmemAddrIsValid | ( | const void * | addr | ) |
| void * ShmemAlloc | ( | Size | size | ) |
Definition at line 764 of file shmem.c.
References ereport, errcode(), errmsg, ERROR, and ShmemAllocRaw().
Referenced by InitShmemAllocator().
| void * ShmemAllocNoError | ( | Size | size | ) |
Definition at line 784 of file shmem.c.
References ShmemAllocRaw().
Definition at line 798 of file shmem.c.
References Assert, ShmemAllocatorData::free_offset, PG_CACHE_LINE_SIZE, ShmemAllocatorData::shmem_lock, ShmemAllocator, ShmemBase, ShmemSegHdr, SpinLockAcquire(), SpinLockRelease(), and TYPEALIGN.
Referenced by InitShmemIndexEntry(), ShmemAlloc(), and ShmemAllocNoError().
| void ShmemCallRequestCallbacks | ( | void | ) |
Definition at line 979 of file shmem.c.
References Assert, lfirst, ShmemCallbacks::opaque_arg, registered_shmem_callbacks, ShmemCallbacks::request_fn, SRS_INITIAL, and SRS_REQUESTING.
Referenced by BootstrapModeMain(), PostgresSingleUserMain(), PostmasterMain(), and PostmasterStateMachine().
| size_t ShmemGetRequestedSize | ( | void | ) |
Definition at line 392 of file shmem.c.
References add_size(), CACHELINEALIGN, foreach_ptr, hash_estimate_size(), list_length(), pending_shmem_requests, PG_CACHE_LINE_SIZE, SHMEM_INDEX_ADDITIONAL_SIZE, and TYPEALIGN.
Referenced by CalculateShmemSize().
| void ShmemInitRequested | ( | void | ) |
Definition at line 425 of file shmem.c.
References Assert, foreach_ptr, InitShmemIndexEntry(), IsUnderPostmaster, list_free_deep(), NIL, pending_shmem_requests, pfree(), registered_shmem_callbacks, SRS_DONE, and SRS_INITIALIZING.
Referenced by CreateSharedMemoryAndSemaphores().
| void * ShmemInitStruct | ( | const char * | name, |
| Size | size, | ||
| bool * | foundPtr | ||
| ) |
Definition at line 1011 of file shmem.c.
References Assert, AttachShmemIndexEntry(), InitShmemIndexEntry(), IsUnderPostmaster, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), name, SHMEM_KIND_STRUCT, ShmemIndexLock, SRS_DONE, SRS_INITIALIZING, and SRS_REQUESTING.
Referenced by ShmemInitHash().
| void ShmemRequestInternal | ( | ShmemStructOpts * | options, |
| ShmemRequestKind | kind | ||
| ) |
Definition at line 337 of file shmem.c.
References elog, ereport, errmsg, ERROR, foreach_ptr, IsUnderPostmaster, ShmemRequest::kind, lappend(), ShmemRequest::options, palloc(), pending_shmem_requests, pg_nextpower2_size_t, SHMEM_ATTACH_UNKNOWN_SIZE, and SRS_REQUESTING.
Referenced by ShmemRequestHashWithOpts(), ShmemRequestStructWithOpts(), and SimpleLruRequestWithOpts().
| void ShmemRequestStructWithOpts | ( | const ShmemStructOpts * | options | ) |
Definition at line 316 of file shmem.c.
References memcpy(), MemoryContextAlloc(), SHMEM_KIND_STRUCT, ShmemRequestInternal(), and TopMemoryContext.
|
static |
Definition at line 275 of file shmem.c.
Referenced by pg_get_shmem_allocations_numa().
|
static |
Definition at line 170 of file shmem.c.
Referenced by CallShmemCallbacksAfterStartup(), InitShmemAllocator(), ResetShmemAllocator(), ShmemGetRequestedSize(), ShmemInitRequested(), and ShmemRequestInternal().
|
static |
Definition at line 158 of file shmem.c.
Referenced by RegisterShmemCallbacks(), ShmemCallRequestCallbacks(), and ShmemInitRequested().
|
static |
|
static |
Definition at line 247 of file shmem.c.
Referenced by InitShmemAllocator(), pg_get_shmem_allocations(), and ShmemAllocRaw().
|
static |
Definition at line 244 of file shmem.c.
Referenced by InitShmemAllocator(), ShmemAddrIsValid(), and ShmemAllocRaw().
|
static |
Definition at line 245 of file shmem.c.
Referenced by InitShmemAllocator(), and ShmemAddrIsValid().
|
static |
Definition at line 253 of file shmem.c.
Referenced by AttachShmemIndexEntry(), CallShmemCallbacksAfterStartup(), InitShmemAllocator(), InitShmemIndexEntry(), pg_get_shmem_allocations(), and pg_get_shmem_allocations_numa().
|
static |
Definition at line 243 of file shmem.c.
Referenced by InitShmemAllocator(), pg_get_shmem_allocations(), pg_get_shmem_allocations_numa(), and ShmemAllocRaw().