Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5444f06

Browse files
author
Alexander Korotkov
committed
Lockfree Pin/UnpinBuffer ported from 9.6.
1 parentc71dbee commit5444f06

File tree

12 files changed

+712
-434
lines changed

12 files changed

+712
-434
lines changed

‎contrib/pg_buffercache/pg_buffercache_pages.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,33 +148,34 @@ pg_buffercache_pages(PG_FUNCTION_ARGS)
148148
*/
149149
for (i=0;i<NBuffers;i++)
150150
{
151-
volatileBufferDesc*bufHdr;
151+
BufferDesc*bufHdr;
152+
uint32buf_state;
152153

153154
bufHdr=GetBufferDescriptor(i);
154155
/* Lock each buffer header before inspecting. */
155-
LockBufHdr(bufHdr);
156+
buf_state=LockBufHdr(bufHdr);
156157

157158
fctx->record[i].bufferid=BufferDescriptorGetBuffer(bufHdr);
158159
fctx->record[i].relfilenode=bufHdr->tag.rnode.relNode;
159160
fctx->record[i].reltablespace=bufHdr->tag.rnode.spcNode;
160161
fctx->record[i].reldatabase=bufHdr->tag.rnode.dbNode;
161162
fctx->record[i].forknum=bufHdr->tag.forkNum;
162163
fctx->record[i].blocknum=bufHdr->tag.blockNum;
163-
fctx->record[i].usagecount=bufHdr->usage_count;
164-
fctx->record[i].pinning_backends=bufHdr->refcount;
164+
fctx->record[i].usagecount=BUF_STATE_GET_USAGECOUNT(buf_state);
165+
fctx->record[i].pinning_backends=BUF_STATE_GET_REFCOUNT(buf_state);
165166

166-
if (bufHdr->flags&BM_DIRTY)
167+
if (buf_state&BM_DIRTY)
167168
fctx->record[i].isdirty= true;
168169
else
169170
fctx->record[i].isdirty= false;
170171

171172
/* Note if the buffer is valid, and has storage created */
172-
if ((bufHdr->flags&BM_VALID)&& (bufHdr->flags&BM_TAG_VALID))
173+
if ((buf_state&BM_VALID)&& (buf_state&BM_TAG_VALID))
173174
fctx->record[i].isvalid= true;
174175
else
175176
fctx->record[i].isvalid= false;
176177

177-
UnlockBufHdr(bufHdr);
178+
UnlockBufHdr(bufHdr,buf_state);
178179
}
179180

180181
/*

‎src/backend/storage/buffer/buf_init.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,9 @@ InitBufferPool(void)
9696
BufferDesc*buf=GetBufferDescriptor(i);
9797

9898
CLEAR_BUFFERTAG(buf->tag);
99-
buf->flags=0;
100-
buf->usage_count=0;
101-
buf->refcount=0;
102-
buf->wait_backend_pid=0;
10399

104-
SpinLockInit(&buf->buf_hdr_lock);
100+
pg_atomic_init_u32(&buf->state,0);
101+
buf->wait_backend_pid=0;
105102

106103
buf->buf_id=i;
107104

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp