/* * BufferShmemSize * * compute the size of shared memory for the buffer pool including * data pages, buffer descriptors, hash tables, etc. */ Size BufferShmemSize(void) { Size size = 0; /* size of buffer descriptors */ size = add_size(size, mul_size(NBuffers, sizeof(BufferDescPadded))); /* to allow aligning buffer descriptors */ size = add_size(size, PG_CACHE_LINE_SIZE); /* size of data pages */ size = add_size(size, mul_size(NBuffers, BLCKSZ)); /* size of stuff controlled by freelist.c */ size = add_size(size, StrategyShmemSize()); /* * It would be nice to include the I/O locks in the BufferDesc, but that * would increase the size of a BufferDesc to more than one cache line, * and benchmarking has shown that keeping every BufferDesc aligned on a * cache line boundary is important for performance. So, instead, the * array of I/O locks is allocated in a separate tranche. Because those * locks are not highly contentended, we lay out the array with minimal * padding. */ size = add_size(size, mul_size(NBuffers, sizeof(LWLockMinimallyPadded))); /* to allow aligning the above */ size = add_size(size, PG_CACHE_LINE_SIZE); /* size of checkpoint sort array in bufmgr.c */ size = add_size(size, mul_size(NBuffers, sizeof(CkptSortItem))); return size; }
/* * BufferShmemSize * * compute the size of shared memory for the buffer pool including * data pages, buffer descriptors, hash tables, etc. */ Size BufferShmemSize(void) { Size size = 0; /* size of buffer descriptors */ size = add_size(size, mul_size(NBuffers, sizeof(BufferDesc))); /* size of data pages */ size = add_size(size, mul_size(NBuffers, BLCKSZ)); /* size of stuff controlled by freelist.c */ size = add_size(size, StrategyShmemSize()); return size; }
/* * BufferShmemSize * * compute the size of shared memory for the buffer pool including * data pages, buffer descriptors, hash tables, etc. */ int BufferShmemSize(void) { int size = 0; /* size of buffer descriptors */ size += MAXALIGN(NBuffers * sizeof(BufferDesc)); /* size of data pages */ size += NBuffers * MAXALIGN(BLCKSZ); /* size of stuff controlled by freelist.c */ size += StrategyShmemSize(); return size; }