From 139abc2896eb95b4a103d217ad99d0f6df2c2ce6 Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Thu, 22 Apr 2004 07:21:55 +0000 Subject: [PATCH] Make LocalRefCount and PrivateRefCount arrays of int32, rather than long. This saves a small amount of per-backend memory for LP64 machines. --- src/backend/storage/buffer/buf_init.c | 12 ++++--- src/backend/storage/buffer/bufmgr.c | 48 +++++++++++++++------------ src/backend/storage/buffer/localbuf.c | 16 +++++---- src/include/storage/bufmgr.h | 6 ++-- 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c index 8bbfb49752..440b25ae51 100644 --- a/src/backend/storage/buffer/buf_init.c +++ b/src/backend/storage/buffer/buf_init.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.64 2004/04/21 18:06:30 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.65 2004/04/22 07:21:55 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -21,7 +21,7 @@ BufferDesc *BufferDescriptors; Block *BufferBlockPointers; -long *PrivateRefCount; /* also used in freelist.c */ +int32 *PrivateRefCount; /* also used in freelist.c */ bits8 *BufferLocks; /* flag bits showing locks I have set */ /* statistics counters */ @@ -176,9 +176,11 @@ InitBufferPoolAccess(void) /* * Allocate and zero local arrays of per-buffer info. */ - BufferBlockPointers = (Block *) calloc(NBuffers, sizeof(Block)); - PrivateRefCount = (long *) calloc(NBuffers, sizeof(long)); - BufferLocks = (bits8 *) calloc(NBuffers, sizeof(bits8)); + BufferBlockPointers = (Block *) calloc(NBuffers, + sizeof(*BufferBlockPointers)); + PrivateRefCount = (int32 *) calloc(NBuffers, + sizeof(*PrivateRefCount)); + BufferLocks = (bits8 *) calloc(NBuffers, sizeof(*BufferLocks)); /* * Convert shmem offsets into addresses as seen by this process. This diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index b57ac07244..84da0ebfbe 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.162 2004/04/21 18:06:30 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.163 2004/04/22 07:21:55 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -59,7 +59,7 @@ bool zero_damaged_pages = false; #ifdef NOT_USED -int ShowPinTrace = 0; +bool ShowPinTrace = false; #endif int BgWriterDelay = 200; @@ -843,7 +843,7 @@ AtEOXact_Buffers(bool isCommit) if (isCommit) elog(WARNING, "buffer refcount leak: [%03d] " - "(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)", + "(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)", i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags, @@ -1225,7 +1225,7 @@ recheck: { /* the sole pin should be ours */ if (bufHdr->refcount != 1 || PrivateRefCount[i - 1] == 0) - elog(FATAL, "block %u of %u/%u is still referenced (private %ld, global %d)", + elog(FATAL, "block %u of %u/%u is still referenced (private %d, global %u)", bufHdr->tag.blockNum, bufHdr->tag.rnode.tblNode, bufHdr->tag.rnode.relNode, @@ -1330,8 +1330,9 @@ PrintBufferDescs(void) LWLockAcquire(BufMgrLock, LW_EXCLUSIVE); for (i = 0; i < NBuffers; ++i, ++buf) { - elog(LOG, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \ -blockNum=%u, flags=0x%x, refcount=%d %ld)", + elog(LOG, + "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, " + "blockNum=%u, flags=0x%x, refcount=%u %d)", i, buf->freeNext, buf->freePrev, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags, @@ -1344,7 +1345,7 @@ blockNum=%u, flags=0x%x, refcount=%d %ld)", /* interactive backend */ for (i = 0; i < NBuffers; ++i, ++buf) { - printf("[%-2d] (%u/%u, %u) flags=0x%x, refcnt=%d %ld)\n", + printf("[%-2d] (%u/%u, %u) flags=0x%x, refcount=%u %d)\n", i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags, buf->refcount, PrivateRefCount[i]); @@ -1364,8 +1365,9 @@ PrintPinnedBufs(void) for (i = 0; i < NBuffers; ++i, ++buf) { if (PrivateRefCount[i] > 0) - elog(WARNING, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \ -blockNum=%u, flags=0x%x, refcount=%d %ld)", + elog(WARNING, + "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, " + "blockNum=%u, flags=0x%x, refcount=%u %d)", i, buf->freeNext, buf->freePrev, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags, @@ -1458,7 +1460,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock) } if (LocalRefCount[i] > 0) { - elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%ld)", + elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%d)", RelationGetRelationName(rel), firstDelBlock, bufHdr->tag.blockNum, LocalRefCount[i]); return (-2); @@ -1507,7 +1509,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock) if (bufHdr->refcount != 0) { LWLockRelease(BufMgrLock); - elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %ld, global %d)", + elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %d, global %u)", RelationGetRelationName(rel), firstDelBlock, bufHdr->tag.blockNum, PrivateRefCount[i], bufHdr->refcount); @@ -1565,8 +1567,9 @@ IncrBufferRefCount_Debug(char *file, int line, Buffer buffer) { BufferDesc *buf = &BufferDescriptors[buffer - 1]; - fprintf(stderr, "PIN(Incr) %d rel = %u/%u, blockNum = %u, \ -refcount = %ld, file: %s, line: %d\n", + fprintf(stderr, + "PIN(Incr) %d rel = %u/%u, blockNum = %u, " + "refcount = %d, file: %s, line: %d\n", buffer, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, @@ -1584,8 +1587,9 @@ ReleaseBuffer_Debug(char *file, int line, Buffer buffer) { BufferDesc *buf = &BufferDescriptors[buffer - 1]; - fprintf(stderr, "UNPIN(Rel) %d rel = %u/%u, blockNum = %u, \ -refcount = %ld, file: %s, line: %d\n", + fprintf(stderr, + "UNPIN(Rel) %d rel = %u/%u, blockNum = %u, " + "refcount = %d, file: %s, line: %d\n", buffer, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, @@ -1612,8 +1616,9 @@ ReleaseAndReadBuffer_Debug(char *file, { BufferDesc *buf = &BufferDescriptors[buffer - 1]; - fprintf(stderr, "UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \ -refcount = %ld, file: %s, line: %d\n", + fprintf(stderr, + "UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, " + "refcount = %d, file: %s, line: %d\n", buffer, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, @@ -1623,8 +1628,9 @@ refcount = %ld, file: %s, line: %d\n", { BufferDesc *buf = &BufferDescriptors[b - 1]; - fprintf(stderr, "PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \ -refcount = %ld, file: %s, line: %d\n", + fprintf(stderr, + "PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, " + "refcount = %d, file: %s, line: %d\n", b, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, @@ -1819,7 +1825,7 @@ LockBufferForCleanup(Buffer buffer) { /* There should be exactly one pin */ if (LocalRefCount[-buffer - 1] != 1) - elog(ERROR, "incorrect local pin count: %ld", + elog(ERROR, "incorrect local pin count: %d", LocalRefCount[-buffer - 1]); /* Nobody else to wait for */ return; @@ -1827,7 +1833,7 @@ LockBufferForCleanup(Buffer buffer) /* There should be exactly one local pin */ if (PrivateRefCount[buffer - 1] != 1) - elog(ERROR, "incorrect local pin count: %ld", + elog(ERROR, "incorrect local pin count: %d", PrivateRefCount[buffer - 1]); bufHdr = &BufferDescriptors[buffer - 1]; diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index 17f86ce44e..ba4be8750c 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.53 2004/04/21 18:06:30 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.54 2004/04/22 07:21:55 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -28,7 +28,7 @@ int NLocBuffer = 64; BufferDesc *LocalBufferDescriptors = NULL; Block *LocalBufferBlockPointers = NULL; -long *LocalRefCount = NULL; +int32 *LocalRefCount = NULL; static int nextFreeLocalBuf = 0; @@ -195,10 +195,12 @@ InitLocalBuffer(void) /* * these aren't going away. I'm not gonna use palloc. */ - LocalBufferDescriptors = - (BufferDesc *) calloc(NLocBuffer, sizeof(BufferDesc)); - LocalBufferBlockPointers = (Block *) calloc(NLocBuffer, sizeof(Block)); - LocalRefCount = (long *) calloc(NLocBuffer, sizeof(long)); + LocalBufferDescriptors = (BufferDesc *) + calloc(NLocBuffer, sizeof(*LocalBufferDescriptors)); + LocalBufferBlockPointers = (Block *) + calloc(NLocBuffer, sizeof(*LocalBufferBlockPointers)); + LocalRefCount = (int32 *) + calloc(NLocBuffer, sizeof(*LocalRefCount)); nextFreeLocalBuf = 0; for (i = 0; i < NLocBuffer; i++) @@ -233,7 +235,7 @@ AtEOXact_LocalBuffers(bool isCommit) if (isCommit) elog(WARNING, - "local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)", + "local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)", i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode, buf->tag.blockNum, buf->flags, diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index bfc7617583..43a9018646 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.76 2004/04/21 18:06:30 tgl Exp $ + * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.77 2004/04/22 07:21:55 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -35,12 +35,12 @@ extern int BgWriterMaxpages; /* in buf_init.c */ extern DLLIMPORT Block *BufferBlockPointers; -extern long *PrivateRefCount; +extern int32 *PrivateRefCount; /* in localbuf.c */ extern DLLIMPORT int NLocBuffer; extern DLLIMPORT Block *LocalBufferBlockPointers; -extern long *LocalRefCount; +extern int32 *LocalRefCount; /* special pageno for bget */ #define P_NEW InvalidBlockNumber /* grow the file to get a new page */ -- 2.40.0