mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Remove BufferBlockPointers array in favor of a base + (bufnum) * BLCKSZ
computation. On modern machines this is as fast if not faster, and we don't have to clog the CPU's L2 cache with a tens-of-KB pointer array. If we ever decide to adopt a more dynamic allocation method for shared buffers, we'll probably have to revert this patch, but in the meantime we might as well save a few bytes and nanoseconds. Per Qingqing Zhou.
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 *
 | 
			
		||||
 * IDENTIFICATION
 | 
			
		||||
 *	  $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.74 2005/08/08 03:11:44 tgl Exp $
 | 
			
		||||
 *	  $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.75 2005/08/12 05:05:50 tgl Exp $
 | 
			
		||||
 *
 | 
			
		||||
 *-------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
@@ -19,11 +19,9 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
BufferDesc *BufferDescriptors;
 | 
			
		||||
Block	   *BufferBlockPointers;
 | 
			
		||||
char	   *BufferBlocks;
 | 
			
		||||
int32	   *PrivateRefCount;
 | 
			
		||||
 | 
			
		||||
static char *BufferBlocks;
 | 
			
		||||
 | 
			
		||||
/* statistics counters */
 | 
			
		||||
long int	ReadBufferCount;
 | 
			
		||||
long int	ReadLocalBufferCount;
 | 
			
		||||
@@ -154,30 +152,11 @@ InitBufferPool(void)
 | 
			
		||||
void
 | 
			
		||||
InitBufferPoolAccess(void)
 | 
			
		||||
{
 | 
			
		||||
	char	   *block;
 | 
			
		||||
	int			i;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Allocate and zero local arrays of per-buffer info.
 | 
			
		||||
	 */
 | 
			
		||||
	BufferBlockPointers = (Block *) calloc(NBuffers,
 | 
			
		||||
										   sizeof(*BufferBlockPointers));
 | 
			
		||||
	PrivateRefCount = (int32 *) calloc(NBuffers,
 | 
			
		||||
									   sizeof(*PrivateRefCount));
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Construct addresses for the individual buffer data blocks.  We do
 | 
			
		||||
	 * this just to speed up the BufferGetBlock() macro.  (Since the
 | 
			
		||||
	 * addresses should be the same in every backend, we could inherit
 | 
			
		||||
	 * this data from the postmaster --- but in the EXEC_BACKEND case
 | 
			
		||||
	 * that doesn't work.)
 | 
			
		||||
	 */
 | 
			
		||||
	block = BufferBlocks;
 | 
			
		||||
	for (i = 0; i < NBuffers; i++)
 | 
			
		||||
	{
 | 
			
		||||
		BufferBlockPointers[i] = (Block) block;
 | 
			
		||||
		block += BLCKSZ;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user