PostgreSQL Source Code git master
Loading...
Searching...
No Matches
buf_init.c File Reference
#include "postgres.h"
#include "storage/aio.h"
#include "storage/buf_internals.h"
#include "storage/bufmgr.h"
#include "storage/proclist.h"
#include "storage/shmem.h"
#include "storage/subsystems.h"
Include dependency graph for buf_init.c:

Go to the source code of this file.

Functions

static void BufferManagerShmemRequest (void *arg)
 
static void BufferManagerShmemInit (void *arg)
 
static void BufferManagerShmemAttach (void *arg)
 

Variables

BufferDescPaddedBufferDescriptors
 
charBufferBlocks
 
ConditionVariableMinimallyPaddedBufferIOCVArray
 
WritebackContext BackendWritebackContext
 
CkptSortItemCkptBufferIds
 
const ShmemCallbacks BufferManagerShmemCallbacks
 

Function Documentation

◆ BufferManagerShmemAttach()

static void BufferManagerShmemAttach ( void arg)
static

Definition at line 148 of file buf_init.c.

149{
150 /* Initialize per-backend file flush context */
153}
WritebackContext BackendWritebackContext
Definition buf_init.c:27
void WritebackContextInit(WritebackContext *context, int *max_pending)
Definition bufmgr.c:7678
int backend_flush_after
Definition bufmgr.c:225

References backend_flush_after, BackendWritebackContext, and WritebackContextInit().

◆ BufferManagerShmemInit()

static void BufferManagerShmemInit ( void arg)
static

Definition at line 120 of file buf_init.c.

121{
122 /*
123 * Initialize all the buffer headers.
124 */
125 for (int i = 0; i < NBuffers; i++)
126 {
128
129 ClearBufferTag(&buf->tag);
130
131 pg_atomic_init_u64(&buf->state, 0);
132 buf->wait_backend_pgprocno = INVALID_PROC_NUMBER;
133
134 buf->buf_id = i;
135
136 pgaio_wref_clear(&buf->io_wref);
137
138 proclist_init(&buf->lock_waiters);
140 }
141
142 /* Initialize per-backend file flush context */
145}
void pgaio_wref_clear(PgAioWaitRef *iow)
Definition aio.c:964
static void pg_atomic_init_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
Definition atomics.h:453
static ConditionVariable * BufferDescriptorGetIOCV(const BufferDesc *bdesc)
static void ClearBufferTag(BufferTag *tag)
static BufferDesc * GetBufferDescriptor(uint32 id)
void ConditionVariableInit(ConditionVariable *cv)
int NBuffers
Definition globals.c:144
int i
Definition isn.c:77
static char buf[DEFAULT_XLOG_SEG_SIZE]
static void proclist_init(proclist_head *list)
Definition proclist.h:29
#define INVALID_PROC_NUMBER
Definition procnumber.h:26

References backend_flush_after, BackendWritebackContext, buf, BufferDescriptorGetIOCV(), ClearBufferTag(), ConditionVariableInit(), GetBufferDescriptor(), i, INVALID_PROC_NUMBER, NBuffers, pg_atomic_init_u64(), pgaio_wref_clear(), proclist_init(), and WritebackContextInit().

◆ BufferManagerShmemRequest()

static void BufferManagerShmemRequest ( void arg)
static

Definition at line 77 of file buf_init.c.

78{
79 ShmemRequestStruct(.name = "Buffer Descriptors",
80 .size = NBuffers * sizeof(BufferDescPadded),
81 /* Align descriptors to a cacheline boundary. */
82 .alignment = PG_CACHE_LINE_SIZE,
83 .ptr = (void **) &BufferDescriptors,
84 );
85
86 ShmemRequestStruct(.name = "Buffer Blocks",
87 .size = NBuffers * (Size) BLCKSZ,
88 /* Align buffer pool on IO page size boundary. */
89 .alignment = PG_IO_ALIGN_SIZE,
90 .ptr = (void **) &BufferBlocks,
91 );
92
93 ShmemRequestStruct(.name = "Buffer IO Condition Variables",
95 /* Align descriptors to a cacheline boundary. */
96 .alignment = PG_CACHE_LINE_SIZE,
97 .ptr = (void **) &BufferIOCVArray,
98 );
99
100 /*
101 * The array used to sort to-be-checkpointed buffer ids is located in
102 * shared memory, to avoid having to allocate significant amounts of
103 * memory at runtime. As that'd be in the middle of a checkpoint, or when
104 * the checkpointer is restarted, memory allocation failures would be
105 * painful.
106 */
107 ShmemRequestStruct(.name = "Checkpoint BufferIds",
108 .size = NBuffers * sizeof(CkptSortItem),
109 .ptr = (void **) &CkptBufferIds,
110 );
111}
CkptSortItem * CkptBufferIds
Definition buf_init.c:28
char * BufferBlocks
Definition buf_init.c:25
ConditionVariableMinimallyPadded * BufferIOCVArray
Definition buf_init.c:26
BufferDescPadded * BufferDescriptors
Definition buf_init.c:24
size_t Size
Definition c.h:689
#define PG_IO_ALIGN_SIZE
#define PG_CACHE_LINE_SIZE
static int fb(int x)
#define ShmemRequestStruct(...)
Definition shmem.h:176
const char * name

References BufferBlocks, BufferDescriptors, BufferIOCVArray, CkptBufferIds, fb(), name, NBuffers, PG_CACHE_LINE_SIZE, PG_IO_ALIGN_SIZE, and ShmemRequestStruct.

Variable Documentation

◆ BackendWritebackContext

WritebackContext BackendWritebackContext

Definition at line 27 of file buf_init.c.

Referenced by BufferManagerShmemAttach(), BufferManagerShmemInit(), and GetVictimBuffer().

◆ BufferBlocks

char* BufferBlocks

Definition at line 25 of file buf_init.c.

Referenced by BufferGetBlock(), and BufferManagerShmemRequest().

◆ BufferDescriptors

BufferDescPadded* BufferDescriptors

Definition at line 24 of file buf_init.c.

Referenced by BufferManagerShmemRequest(), and GetBufferDescriptor().

◆ BufferIOCVArray

Definition at line 26 of file buf_init.c.

Referenced by BufferDescriptorGetIOCV(), and BufferManagerShmemRequest().

◆ BufferManagerShmemCallbacks

const ShmemCallbacks BufferManagerShmemCallbacks
Initial value:
= {
}
static void BufferManagerShmemAttach(void *arg)
Definition buf_init.c:148
static void BufferManagerShmemInit(void *arg)
Definition buf_init.c:120
static void BufferManagerShmemRequest(void *arg)
Definition buf_init.c:77

Definition at line 34 of file buf_init.c.

34 {
35 .request_fn = BufferManagerShmemRequest,
36 .init_fn = BufferManagerShmemInit,
37 .attach_fn = BufferManagerShmemAttach,
38};

◆ CkptBufferIds

CkptSortItem* CkptBufferIds

Definition at line 28 of file buf_init.c.

Referenced by BufferManagerShmemRequest(), and BufferSync().