c - Clock replacement algorithm to be replaced with LRU in postgres 8.2.19 .Any ideas? -



c - Clock replacement algorithm to be replaced with LRU in postgres 8.2.19 .Any ideas? -

in postgres code, code related alter nowadays in these places

~/src/backend/storage/buffer/buf_init.c ~/src/backend/storage/buffer/bufmgr.c ~/src/backend/storage/buffer/freelist.c

i tried alter code in freelist.c has actual clock replacement algorithm logic. can 1 please help me of how proceed replacing clock replacement algorithm logic lru logic. related ideas welcomed! in advance.

here part of code of freelist.c

volatile bufferdesc * strategygetbuffer(void) { volatile bufferdesc *buf; int trycounter; lwlockacquire(buffreelistlock, lw_exclusive); /* * seek buffer freelist. note freenext fields * considered protected buffreelistlock not * individual buffer spinlocks, it's ok manipulate them without * holding spinlock. */ while (strategycontrol->firstfreebuffer >= 0) { buf = &bufferdescriptors[strategycontrol->firstfreebuffer]; assert(buf->freenext != freenext_not_in_list); /* unconditionally remove buffer freelist */ strategycontrol->firstfreebuffer = buf->freenext; buf->freenext = freenext_not_in_list; /* * if buffer pinned or has nonzero usage_count, cannot utilize * it; discard , retry. (this can happen if vacuum set * valid buffer in freelist , else used before * got it.) */ lockbufhdr(buf); if (buf->refcount == 0 && buf->usage_count == 0) homecoming buf; unlockbufhdr(buf); } /* nil on freelist, run "clock sweep" algorithm */ trycounter = nbuffers; (;;) { buf = &bufferdescriptors[strategycontrol->nextvictimbuffer]; if (++strategycontrol->nextvictimbuffer >= nbuffers) strategycontrol->nextvictimbuffer = 0; /* * if buffer pinned or has nonzero usage_count, cannot utilize * it; decrement usage_count , maintain scanning. */ lockbufhdr(buf); if (buf->refcount == 0 && buf->usage_count == 0) homecoming buf; if (buf->usage_count > 0) { buf->usage_count--; trycounter = nbuffers; } else if (--trycounter == 0) { /* * we've scanned buffers without making state changes, * buffers pinned (or when looked @ them). * hope free 1 eventually, it's * improve fail risk getting stuck in * infinite loop. */ unlockbufhdr(buf); elog(error, "no unpinned buffers available"); } unlockbufhdr(buf); } /* not reached */ homecoming null; }

c algorithm postgresql

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -