]> granicus.if.org Git - postgresql/commitdiff
Remove BufferBlockPointers array in favor of a base + (bufnum) * BLCKSZ
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 12 Aug 2005 05:05:51 +0000 (05:05 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 12 Aug 2005 05:05:51 +0000 (05:05 +0000)
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.

src/backend/storage/buffer/buf_init.c
src/backend/storage/buffer/bufmgr.c
src/include/storage/bufmgr.h

index 52e6ae02223c95bb0a2348fe443f46cef4c87437..5051e762d851b7beefeefe81a8d09d87ce654096 100644 (file)
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
 
 
 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;
-       }
 }
 
 /*
index f148a5ea0051d3e3c792b7dc96b8c600dd9957cd..6243f2481e4a3acae2257538f9d750feae161f98 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.192 2005/08/08 19:44:22 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.193 2005/08/12 05:05:50 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -54,7 +54,7 @@
 
 
 /* Note: these two macros only work on shared buffers, not local ones! */
-#define BufHdrGetBlock(bufHdr) BufferBlockPointers[(bufHdr)->buf_id]
+#define BufHdrGetBlock(bufHdr) ((Block) (BufferBlocks + ((Size) (bufHdr)->buf_id) * BLCKSZ))
 #define BufferGetLSN(bufHdr)   (*((XLogRecPtr*) BufHdrGetBlock(bufHdr)))
 
 /* Note: this macro only works on local buffers, not shared ones! */
index eb7268edfc7602075cdc3fdf653ecc1acc962030..a88565e1596fc89ab50c0ef7744d3f29309d3a1b 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.94 2005/08/08 03:12:16 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.95 2005/08/12 05:05:51 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -33,7 +33,7 @@ extern int    bgwriter_lru_maxpages;
 extern int     bgwriter_all_maxpages;
 
 /* in buf_init.c */
-extern DLLIMPORT Block *BufferBlockPointers;
+extern DLLIMPORT char *BufferBlocks;
 extern DLLIMPORT int32 *PrivateRefCount;
 
 /* in localbuf.c */
@@ -107,7 +107,7 @@ extern DLLIMPORT int32 *LocalRefCount;
        BufferIsLocal(buffer) ? \
                LocalBufferBlockPointers[-(buffer) - 1] \
        : \
-               BufferBlockPointers[(buffer) - 1] \
+               (Block) (BufferBlocks + ((Size) ((buffer) - 1)) * BLCKSZ) \
 )
 
 /*