diff -rupN ./postgresql-9.3.5_original/config.log ./postgresql-9.3.5_trace/config.log --- ./postgresql-9.3.5_original/config.log 2014-10-15 10:30:11.552923099 +0200 +++ ./postgresql-9.3.5_trace/config.log 2014-10-15 10:35:45.786580479 +0200 @@ -349,7 +349,7 @@ configure:7734: $? = 0 configure:7755: result: yes configure:7766: checking for library containing setproctitle configure:7807: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lm >&5 -/tmp/ccf4os1l.o: In function `main': +/tmp/ccMWb4Lv.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `setproctitle' collect2: ld returned 1 exit status configure:7814: $? = 1 @@ -389,7 +389,7 @@ configure: failed program was: | return 0; | } configure:7807: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lutil -lm >&5 -/tmp/ccSriijn.o: In function `main': +/tmp/ccxsb80w.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `setproctitle' collect2: ld returned 1 exit status configure:7814: $? = 1 @@ -431,7 +431,7 @@ configure: failed program was: configure:7845: result: no configure:7853: checking for library containing dlopen configure:7894: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lm >&5 -/tmp/ccZgGSzt.o: In function `main': +/tmp/ccBvyipD.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `dlopen' collect2: ld returned 1 exit status configure:7901: $? = 1 @@ -479,7 +479,7 @@ configure:7988: $? = 0 configure:8019: result: none required configure:8027: checking for library containing shl_load configure:8068: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -ldl -lm >&5 -/tmp/cc2JE0qC.o: In function `main': +/tmp/ccSVMb9F.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `shl_load' collect2: ld returned 1 exit status configure:8075: $? = 1 @@ -564,7 +564,7 @@ configure:8254: $? = 0 configure:8285: result: none required configure:8293: checking for library containing crypt configure:8334: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -ldl -lm >&5 -/tmp/ccX9NprQ.o: In function `main': +/tmp/cc5xTu8N.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `crypt' collect2: ld returned 1 exit status configure:8341: $? = 1 @@ -4077,7 +4077,7 @@ configure:19825: $? = 0 configure:19847: result: yes configure:19762: checking for getpeerucred configure:19818: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccyZfPFD.o: In function `main': +/tmp/ccULVa3H.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `getpeerucred' collect2: ld returned 1 exit status configure:19825: $? = 1 @@ -4215,7 +4215,7 @@ configure:19825: $? = 0 configure:19847: result: yes configure:19762: checking for mbstowcs_l configure:19818: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccOjxb0M.o: In function `main': +/tmp/ccizj96T.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `mbstowcs_l' collect2: ld returned 1 exit status configure:19825: $? = 1 @@ -4359,7 +4359,7 @@ configure:19825: $? = 0 configure:19847: result: yes configure:19762: checking for pstat configure:19818: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccIKM0o0.o: In function `main': +/tmp/ccXCQWr8.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `pstat' collect2: ld returned 1 exit status configure:19825: $? = 1 @@ -4500,7 +4500,7 @@ configure:19825: $? = 0 configure:19847: result: yes configure:19762: checking for setproctitle configure:19818: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccqGf9Bb.o: In function `main': +/tmp/cchW5Kzf.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `setproctitle' collect2: ld returned 1 exit status configure:19825: $? = 1 @@ -4671,7 +4671,7 @@ configure:19825: $? = 0 configure:19847: result: yes configure:19762: checking for wcstombs_l configure:19818: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccPbEXIG.o: In function `main': +/tmp/ccT128IO.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `wcstombs_l' collect2: ld returned 1 exit status configure:19825: $? = 1 @@ -5590,7 +5590,7 @@ configure:21389: $? = 0 configure:21411: result: yes configure:21326: checking for fls configure:21382: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/cc3q3U3I.o: In function `main': +/tmp/ccmFSRqS.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `fls' collect2: ld returned 1 exit status configure:21389: $? = 1 @@ -5784,7 +5784,7 @@ configure:21389: $? = 0 configure:21411: result: yes configure:21326: checking for strlcat configure:21382: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/cc8EiwIp.o: In function `main': +/tmp/cc0djF2m.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `strlcat' collect2: ld returned 1 exit status configure:21389: $? = 1 @@ -5953,7 +5953,7 @@ configure: failed program was: configure:21411: result: no configure:21326: checking for strlcpy configure:21382: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccmSyguw.o: In function `main': +/tmp/ccrAbcKt.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `strlcpy' collect2: ld returned 1 exit status configure:21389: $? = 1 @@ -6126,7 +6126,7 @@ configure:21519: $? = 0 configure:21541: result: yes configure:21456: checking for getpeereid configure:21512: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/ccb838LF.o: In function `main': +/tmp/ccchSDXz.o: In function `main': conftest.c:(.text.startup+0x7): undefined reference to `getpeereid' collect2: ld returned 1 exit status configure:21519: $? = 1 @@ -6330,7 +6330,7 @@ configure:22509: $? = 0 configure:22529: result: yes configure:22539: checking for optreset configure:22565: gcc -o conftest -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -D_GNU_SOURCE conftest.c -lz -lcrypt -ldl -lm >&5 -/tmp/cc2IKXv3.o: In function `main': +/tmp/ccg21Fuc.o: In function `main': conftest.c:(.text.startup+0x2): undefined reference to `optreset' collect2: ld returned 1 exit status configure:22572: $? = 1 @@ -6673,7 +6673,7 @@ conftest.c:144:22: warning: null argumen conftest.c:145:22: warning: null argument where non-null required (argument 1) [-Wnonnull] conftest.c:145:22: warning: null argument where non-null required (argument 3) [-Wnonnull] conftest.c:143:27: warning: 'th' is used uninitialized in this function [-Wuninitialized] -/tmp/cc8sk1gT.o: In function `main': +/tmp/ccykBF5P.o: In function `main': conftest.c:(.text.startup+0x9): undefined reference to `pthread_join' conftest.c:(.text.startup+0x26): undefined reference to `__pthread_register_cancel' conftest.c:(.text.startup+0x33): undefined reference to `pthread_create' diff -rupN ./postgresql-9.3.5_original/config.status ./postgresql-9.3.5_trace/config.status --- ./postgresql-9.3.5_original/config.status 2014-10-15 10:30:11.304921877 +0200 +++ ./postgresql-9.3.5_trace/config.status 2014-10-15 10:35:45.538579249 +0200 @@ -367,7 +367,7 @@ Copyright (C) 2008 Free Software Foundat This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -ac_pwd='/home/postgres/postgresql-9.3.5_original' +ac_pwd='/home/postgres/postgresql-9.3.5_trace' srcdir='.' INSTALL='/usr/bin/install -c' MKDIR_P='/bin/mkdir -p' diff -rupN ./postgresql-9.3.5_original/src/backend/storage/buffer/buf_init.c ./postgresql-9.3.5_trace/src/backend/storage/buffer/buf_init.c --- ./postgresql-9.3.5_original/src/backend/storage/buffer/buf_init.c 2014-07-21 21:10:42.000000000 +0200 +++ ./postgresql-9.3.5_trace/src/backend/storage/buffer/buf_init.c 2014-10-15 10:37:03.894967795 +0200 @@ -21,6 +21,7 @@ BufferDesc *BufferDescriptors; char *BufferBlocks; int32 *PrivateRefCount; +bool *PrivateDirtyFlag; /* @@ -144,6 +145,8 @@ InitBufferPool(void) void InitBufferPoolAccess(void) { + PrivateDirtyFlag = (bool *) calloc(NBuffers, sizeof(bool)); + /* * Allocate and zero local arrays of per-buffer info. */ diff -rupN ./postgresql-9.3.5_original/src/backend/storage/buffer/bufmgr.c ./postgresql-9.3.5_trace/src/backend/storage/buffer/bufmgr.c --- ./postgresql-9.3.5_original/src/backend/storage/buffer/bufmgr.c 2014-07-21 21:10:42.000000000 +0200 +++ ./postgresql-9.3.5_trace/src/backend/storage/buffer/bufmgr.c 2014-10-15 10:42:09.188481660 +0200 @@ -33,6 +33,8 @@ #include #include +#include + #include "catalog/catalog.h" #include "catalog/storage.h" #include "common/relpath.h" @@ -839,6 +841,7 @@ BufferAlloc(SMgrRelation smgr, char relp */ buf->tag = newTag; buf->flags &= ~(BM_VALID | BM_DIRTY | BM_JUST_DIRTIED | BM_CHECKPOINT_NEEDED | BM_IO_ERROR | BM_PERMANENT); + PrivateDirtyFlag[buf->buf_id] = false; if (relpersistence == RELPERSISTENCE_PERMANENT) buf->flags |= BM_TAG_VALID | BM_PERMANENT; else @@ -1019,6 +1022,7 @@ MarkBufferDirty(Buffer buffer) } bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED); + PrivateDirtyFlag[buffer - 1] = true; UnlockBufHdr(bufHdr); } @@ -1066,6 +1070,29 @@ ReleaseAndReadBuffer(Buffer buffer, RelFileNodeEquals(bufHdr->tag.rnode, relation->rd_node) && bufHdr->tag.forkNum == forkNum) return buffer; + + FILE* f; + f = fopen("/usr/local/pgsql/data/trace", "a"); + if(f != NULL) { + char str[128]; + if(PrivateDirtyFlag[buffer - 1] == true) { + PrivateDirtyFlag[buffer - 1] = false; + sprintf(str, "U,%d,%d,%d,%d\n", bufHdr->tag.rnode.spcNode, + bufHdr->tag.rnode.dbNode, + bufHdr->tag.rnode.relNode, + bufHdr->tag.blockNum); + } + else { + sprintf(str, "R,%d,%d,%d,%d\n", bufHdr->tag.rnode.spcNode, + bufHdr->tag.rnode.dbNode, + bufHdr->tag.rnode.relNode, + bufHdr->tag.blockNum); + } + //fprintf(stdout, str); + fputs(str, f); + fclose(f); + } + /* ************************************************************* */ UnpinBuffer(bufHdr, true); } } @@ -2537,6 +2564,29 @@ ReleaseBuffer(Buffer buffer) Assert(PrivateRefCount[buffer - 1] > 0); + FILE* f; + f = fopen("/usr/local/pgsql/data/trace", "a"); + if(f != NULL) { + char str[128]; + if(PrivateDirtyFlag[buffer - 1] == true) { + PrivateDirtyFlag[buffer - 1] = false; + sprintf(str, "U,%d,%d,%d,%d\n", bufHdr->tag.rnode.spcNode, + bufHdr->tag.rnode.dbNode, + bufHdr->tag.rnode.relNode, + bufHdr->tag.blockNum); + } + else { + sprintf(str, "R,%d,%d,%d,%d\n", bufHdr->tag.rnode.spcNode, + bufHdr->tag.rnode.dbNode, + bufHdr->tag.rnode.relNode, + bufHdr->tag.blockNum); + } + //fprintf(stdout, str); + fputs(str, f); + fclose(f); + } + /* ************************************************************* */ + if (PrivateRefCount[buffer - 1] > 1) PrivateRefCount[buffer - 1]--; else @@ -2700,6 +2750,7 @@ MarkBufferDirtyHint(Buffer buffer, bool PageSetLSN(page, lsn); } bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED); + PrivateDirtyFlag[bufHdr->buf_id] = true; UnlockBufHdr(bufHdr); if (delayChkpt) diff -rupN ./postgresql-9.3.5_original/src/include/storage/bufmgr.h ./postgresql-9.3.5_trace/src/include/storage/bufmgr.h --- ./postgresql-9.3.5_original/src/include/storage/bufmgr.h 2014-07-21 21:10:42.000000000 +0200 +++ ./postgresql-9.3.5_trace/src/include/storage/bufmgr.h 2014-10-06 14:33:23.783472937 +0200 @@ -56,6 +56,7 @@ extern int target_prefetch_pages; /* in buf_init.c */ extern PGDLLIMPORT char *BufferBlocks; extern PGDLLIMPORT int32 *PrivateRefCount; +extern PGDLLIMPORT bool *PrivateDirtyFlag; /* in localbuf.c */ extern PGDLLIMPORT int NLocBuffer; diff -rupN ./postgresql-9.3.5_original/src/Makefile.global ./postgresql-9.3.5_trace/src/Makefile.global --- ./postgresql-9.3.5_original/src/Makefile.global 2014-10-15 10:30:11.416922427 +0200 +++ ./postgresql-9.3.5_trace/src/Makefile.global 2014-10-15 10:35:45.630579704 +0200 @@ -40,7 +40,7 @@ MAJORVERSION = 9.3 # Support for VPATH builds vpath_build = no -abs_top_srcdir = /home/postgres/postgresql-9.3.5_original +abs_top_srcdir = /home/postgres/postgresql-9.3.5_trace ifneq ($(vpath_build),yes) top_srcdir = $(top_builddir)