Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 139abc2

Browse files
author
Neil Conway
committed
Make LocalRefCount and PrivateRefCount arrays of int32, rather than long.
This saves a small amount of per-backend memory for LP64 machines.
1 parent 2ff4e44 commit 139abc2

File tree

4 files changed

+46
-36
lines changed

4 files changed

+46
-36
lines changed

src/backend/storage/buffer/buf_init.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.64 2004/04/21 18:06:30 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.65 2004/04/22 07:21:55 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -21,7 +21,7 @@
2121
BufferDesc *BufferDescriptors;
2222
Block *BufferBlockPointers;
2323

24-
long *PrivateRefCount; /* also used in freelist.c */
24+
int32 *PrivateRefCount; /* also used in freelist.c */
2525
bits8 *BufferLocks; /* flag bits showing locks I have set */
2626

2727
/* statistics counters */
@@ -176,9 +176,11 @@ InitBufferPoolAccess(void)
176176
/*
177177
* Allocate and zero local arrays of per-buffer info.
178178
*/
179-
BufferBlockPointers = (Block *) calloc(NBuffers, sizeof(Block));
180-
PrivateRefCount = (long *) calloc(NBuffers, sizeof(long));
181-
BufferLocks = (bits8 *) calloc(NBuffers, sizeof(bits8));
179+
BufferBlockPointers = (Block *) calloc(NBuffers,
180+
sizeof(*BufferBlockPointers));
181+
PrivateRefCount = (int32 *) calloc(NBuffers,
182+
sizeof(*PrivateRefCount));
183+
BufferLocks = (bits8 *) calloc(NBuffers, sizeof(*BufferLocks));
182184

183185
/*
184186
* Convert shmem offsets into addresses as seen by this process. This

src/backend/storage/buffer/bufmgr.c

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.162 2004/04/21 18:06:30 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.163 2004/04/22 07:21:55 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -59,7 +59,7 @@
5959
bool zero_damaged_pages = false;
6060

6161
#ifdef NOT_USED
62-
int ShowPinTrace = 0;
62+
bool ShowPinTrace = false;
6363
#endif
6464

6565
int BgWriterDelay = 200;
@@ -843,7 +843,7 @@ AtEOXact_Buffers(bool isCommit)
843843
if (isCommit)
844844
elog(WARNING,
845845
"buffer refcount leak: [%03d] "
846-
"(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
846+
"(rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
847847
i,
848848
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
849849
buf->tag.blockNum, buf->flags,
@@ -1225,7 +1225,7 @@ DropRelFileNodeBuffers(RelFileNode rnode, bool istemp)
12251225
{
12261226
/* the sole pin should be ours */
12271227
if (bufHdr->refcount != 1 || PrivateRefCount[i - 1] == 0)
1228-
elog(FATAL, "block %u of %u/%u is still referenced (private %ld, global %d)",
1228+
elog(FATAL, "block %u of %u/%u is still referenced (private %d, global %u)",
12291229
bufHdr->tag.blockNum,
12301230
bufHdr->tag.rnode.tblNode,
12311231
bufHdr->tag.rnode.relNode,
@@ -1330,8 +1330,9 @@ PrintBufferDescs(void)
13301330
LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
13311331
for (i = 0; i < NBuffers; ++i, ++buf)
13321332
{
1333-
elog(LOG, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
1334-
blockNum=%u, flags=0x%x, refcount=%d %ld)",
1333+
elog(LOG,
1334+
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
1335+
"blockNum=%u, flags=0x%x, refcount=%u %d)",
13351336
i, buf->freeNext, buf->freePrev,
13361337
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
13371338
buf->tag.blockNum, buf->flags,
@@ -1344,7 +1345,7 @@ blockNum=%u, flags=0x%x, refcount=%d %ld)",
13441345
/* interactive backend */
13451346
for (i = 0; i < NBuffers; ++i, ++buf)
13461347
{
1347-
printf("[%-2d] (%u/%u, %u) flags=0x%x, refcnt=%d %ld)\n",
1348+
printf("[%-2d] (%u/%u, %u) flags=0x%x, refcount=%u %d)\n",
13481349
i, buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
13491350
buf->tag.blockNum,
13501351
buf->flags, buf->refcount, PrivateRefCount[i]);
@@ -1364,8 +1365,9 @@ PrintPinnedBufs(void)
13641365
for (i = 0; i < NBuffers; ++i, ++buf)
13651366
{
13661367
if (PrivateRefCount[i] > 0)
1367-
elog(WARNING, "[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, \
1368-
blockNum=%u, flags=0x%x, refcount=%d %ld)",
1368+
elog(WARNING,
1369+
"[%02d] (freeNext=%d, freePrev=%d, rel=%u/%u, "
1370+
"blockNum=%u, flags=0x%x, refcount=%u %d)",
13691371
i, buf->freeNext, buf->freePrev,
13701372
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
13711373
buf->tag.blockNum, buf->flags,
@@ -1458,7 +1460,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
14581460
}
14591461
if (LocalRefCount[i] > 0)
14601462
{
1461-
elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%ld)",
1463+
elog(WARNING, "FlushRelationBuffers(\"%s\" (local), %u): block %u is referenced (%d)",
14621464
RelationGetRelationName(rel), firstDelBlock,
14631465
bufHdr->tag.blockNum, LocalRefCount[i]);
14641466
return (-2);
@@ -1507,7 +1509,7 @@ FlushRelationBuffers(Relation rel, BlockNumber firstDelBlock)
15071509
if (bufHdr->refcount != 0)
15081510
{
15091511
LWLockRelease(BufMgrLock);
1510-
elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %ld, global %d)",
1512+
elog(WARNING, "FlushRelationBuffers(\"%s\", %u): block %u is referenced (private %d, global %u)",
15111513
RelationGetRelationName(rel), firstDelBlock,
15121514
bufHdr->tag.blockNum,
15131515
PrivateRefCount[i], bufHdr->refcount);
@@ -1565,8 +1567,9 @@ IncrBufferRefCount_Debug(char *file, int line, Buffer buffer)
15651567
{
15661568
BufferDesc *buf = &BufferDescriptors[buffer - 1];
15671569

1568-
fprintf(stderr, "PIN(Incr) %d rel = %u/%u, blockNum = %u, \
1569-
refcount = %ld, file: %s, line: %d\n",
1570+
fprintf(stderr,
1571+
"PIN(Incr) %d rel = %u/%u, blockNum = %u, "
1572+
"refcount = %d, file: %s, line: %d\n",
15701573
buffer,
15711574
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
15721575
buf->tag.blockNum,
@@ -1584,8 +1587,9 @@ ReleaseBuffer_Debug(char *file, int line, Buffer buffer)
15841587
{
15851588
BufferDesc *buf = &BufferDescriptors[buffer - 1];
15861589

1587-
fprintf(stderr, "UNPIN(Rel) %d rel = %u/%u, blockNum = %u, \
1588-
refcount = %ld, file: %s, line: %d\n",
1590+
fprintf(stderr,
1591+
"UNPIN(Rel) %d rel = %u/%u, blockNum = %u, "
1592+
"refcount = %d, file: %s, line: %d\n",
15891593
buffer,
15901594
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
15911595
buf->tag.blockNum,
@@ -1612,8 +1616,9 @@ ReleaseAndReadBuffer_Debug(char *file,
16121616
{
16131617
BufferDesc *buf = &BufferDescriptors[buffer - 1];
16141618

1615-
fprintf(stderr, "UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
1616-
refcount = %ld, file: %s, line: %d\n",
1619+
fprintf(stderr,
1620+
"UNPIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
1621+
"refcount = %d, file: %s, line: %d\n",
16171622
buffer,
16181623
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
16191624
buf->tag.blockNum,
@@ -1623,8 +1628,9 @@ refcount = %ld, file: %s, line: %d\n",
16231628
{
16241629
BufferDesc *buf = &BufferDescriptors[b - 1];
16251630

1626-
fprintf(stderr, "PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, \
1627-
refcount = %ld, file: %s, line: %d\n",
1631+
fprintf(stderr,
1632+
"PIN(Rel&Rd) %d rel = %u/%u, blockNum = %u, "
1633+
"refcount = %d, file: %s, line: %d\n",
16281634
b,
16291635
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
16301636
buf->tag.blockNum,
@@ -1819,15 +1825,15 @@ LockBufferForCleanup(Buffer buffer)
18191825
{
18201826
/* There should be exactly one pin */
18211827
if (LocalRefCount[-buffer - 1] != 1)
1822-
elog(ERROR, "incorrect local pin count: %ld",
1828+
elog(ERROR, "incorrect local pin count: %d",
18231829
LocalRefCount[-buffer - 1]);
18241830
/* Nobody else to wait for */
18251831
return;
18261832
}
18271833

18281834
/* There should be exactly one local pin */
18291835
if (PrivateRefCount[buffer - 1] != 1)
1830-
elog(ERROR, "incorrect local pin count: %ld",
1836+
elog(ERROR, "incorrect local pin count: %d",
18311837
PrivateRefCount[buffer - 1]);
18321838

18331839
bufHdr = &BufferDescriptors[buffer - 1];

src/backend/storage/buffer/localbuf.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*
1010
*
1111
* IDENTIFICATION
12-
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.53 2004/04/21 18:06:30 tgl Exp $
12+
* $PostgreSQL: pgsql/src/backend/storage/buffer/localbuf.c,v 1.54 2004/04/22 07:21:55 neilc Exp $
1313
*
1414
*-------------------------------------------------------------------------
1515
*/
@@ -28,7 +28,7 @@ int NLocBuffer = 64;
2828

2929
BufferDesc *LocalBufferDescriptors = NULL;
3030
Block *LocalBufferBlockPointers = NULL;
31-
long *LocalRefCount = NULL;
31+
int32 *LocalRefCount = NULL;
3232

3333
static int nextFreeLocalBuf = 0;
3434

@@ -195,10 +195,12 @@ InitLocalBuffer(void)
195195
/*
196196
* these aren't going away. I'm not gonna use palloc.
197197
*/
198-
LocalBufferDescriptors =
199-
(BufferDesc *) calloc(NLocBuffer, sizeof(BufferDesc));
200-
LocalBufferBlockPointers = (Block *) calloc(NLocBuffer, sizeof(Block));
201-
LocalRefCount = (long *) calloc(NLocBuffer, sizeof(long));
198+
LocalBufferDescriptors = (BufferDesc *)
199+
calloc(NLocBuffer, sizeof(*LocalBufferDescriptors));
200+
LocalBufferBlockPointers = (Block *)
201+
calloc(NLocBuffer, sizeof(*LocalBufferBlockPointers));
202+
LocalRefCount = (int32 *)
203+
calloc(NLocBuffer, sizeof(*LocalRefCount));
202204
nextFreeLocalBuf = 0;
203205

204206
for (i = 0; i < NLocBuffer; i++)
@@ -233,7 +235,7 @@ AtEOXact_LocalBuffers(bool isCommit)
233235

234236
if (isCommit)
235237
elog(WARNING,
236-
"local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%d %ld)",
238+
"local buffer leak: [%03d] (rel=%u/%u, blockNum=%u, flags=0x%x, refcount=%u %d)",
237239
i,
238240
buf->tag.rnode.tblNode, buf->tag.rnode.relNode,
239241
buf->tag.blockNum, buf->flags,

src/include/storage/bufmgr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.76 2004/04/21 18:06:30 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.77 2004/04/22 07:21:55 neilc Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -35,12 +35,12 @@ extern int BgWriterMaxpages;
3535

3636
/* in buf_init.c */
3737
extern DLLIMPORT Block *BufferBlockPointers;
38-
extern long *PrivateRefCount;
38+
extern int32 *PrivateRefCount;
3939

4040
/* in localbuf.c */
4141
extern DLLIMPORT int NLocBuffer;
4242
extern DLLIMPORT Block *LocalBufferBlockPointers;
43-
extern long *LocalRefCount;
43+
extern int32 *LocalRefCount;
4444

4545
/* special pageno for bget */
4646
#define P_NEW InvalidBlockNumber /* grow the file to get a new page */

0 commit comments

Comments
 (0)