DTrace probe patch for OS X Leopard - Mailing list pgsql-patches
From | Robert Lor |
---|---|
Subject | DTrace probe patch for OS X Leopard |
Date | |
Msg-id | 47C58A45.1090000@sun.com Whole thread Raw |
Responses |
Re: DTrace probe patch for OS X Leopard
Re: DTrace probe patch for OS X Leopard Re: DTrace probe patch for OS X Leopard Re: DTrace probe patch for OS X Leopard Re: DTrace probe patch for OS X Leopard |
List | pgsql-patches |
Please find the patch attached per this thread http://archives.postgresql.org/pgsql-hackers/2008-02/msg00912.php Notes to committer. 1) Please remove src/include/pg_trace.h as it's no longer needed 2) Need help figuring out how to copy src/backend/util/probes.d from src tree to bld tree at build time. It works fine if compilation is done in the src tree. 3) Note on src/backend/Makefile The current rule below does not work. After expansion, utils/probes.d needs to come right after -s, but currently it shows up at the end after all the .o files. utils/probes.o: utils/probes.d $(SUBDIROBJS) $(DTRACE) $(DTRACEFLAGS) -G -s $(call expand_subsys,$^) -o $@ The following works, but I think the correct way is to include probes.d as a dependency and have it show up after -s. I couldn't get it to work this way with my somewhat limited knowledge of makefiles. utils/probes.o: $(SUBDIROBJS) $(DTRACE) $(DTRACEFLAGS) -G -s $(srcdir)/utils/probes.d -o $@ $(call expand_subsys,$^) Regards, -Robert ? src/include/probes_null.h Index: src/Makefile =================================================================== RCS file: /projects/cvsroot/pgsql/src/Makefile,v retrieving revision 1.42 diff -c -r1.42 Makefile *** src/Makefile 21 Aug 2007 01:11:12 -0000 1.42 --- src/Makefile 27 Feb 2008 03:22:55 -0000 *************** *** 14,19 **** --- 14,22 ---- all install installdirs uninstall distprep: + ifeq ($(enable_dtrace), yes) + $(DTRACE) -h -s $(top_builddir)/src/backend/utils/probes.d -o $(top_builddir)/src/include/probes.h + endif $(MAKE) -C port $@ $(MAKE) -C timezone $@ $(MAKE) -C backend $@ Index: src/backend/Makefile =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/Makefile,v retrieving revision 1.127 diff -c -r1.127 Makefile *** src/backend/Makefile 26 Feb 2008 14:42:27 -0000 1.127 --- src/backend/Makefile 27 Feb 2008 03:22:55 -0000 *************** *** 20,28 **** --- 20,30 ---- include $(srcdir)/common.mk + ifeq ($(PORTNAME), solaris) ifeq ($(enable_dtrace), yes) LOCALOBJS += utils/probes.o endif + endif OBJS = $(SUBDIROBJS) $(LOCALOBJS) $(top_builddir)/src/port/libpgport_srv.a *************** *** 135,144 **** cd $(dir $@) && rm -f $(notdir $@) && \ $(LN_S) ../../../$(subdir)/utils/fmgroids.h . ! ! utils/probes.o: utils/probes.d $(SUBDIROBJS) ! $(DTRACE) $(DTRACEFLAGS) -G -s $(call expand_subsys,$^) -o $@ ! ########################################################################## --- 137,146 ---- cd $(dir $@) && rm -f $(notdir $@) && \ $(LN_S) ../../../$(subdir)/utils/fmgroids.h . ! ifeq ($(PORTNAME), solaris) ! utils/probes.o: $(SUBDIROBJS) ! $(DTRACE) $(DTRACEFLAGS) -G -s $(srcdir)/utils/probes.d -o $@ $(call expand_subsys,$^) ! endif ########################################################################## Index: src/backend/access/transam/xact.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xact.c,v retrieving revision 1.257 diff -c -r1.257 xact.c *** src/backend/access/transam/xact.c 15 Jan 2008 18:56:59 -0000 1.257 --- src/backend/access/transam/xact.c 27 Feb 2008 03:22:56 -0000 *************** *** 1479,1485 **** Assert(MyProc->backendId == vxid.backendId); MyProc->lxid = vxid.localTransactionId; ! PG_TRACE1(transaction__start, vxid.localTransactionId); /* * set transaction_timestamp() (a/k/a now()). We want this to be the same --- 1479,1485 ---- Assert(MyProc->backendId == vxid.backendId); MyProc->lxid = vxid.localTransactionId; ! POSTGRESQL_TRANSACTION_START(vxid.localTransactionId); /* * set transaction_timestamp() (a/k/a now()). We want this to be the same *************** *** 1604,1610 **** */ latestXid = RecordTransactionCommit(); ! PG_TRACE1(transaction__commit, MyProc->lxid); /* * Let others know about no transaction in progress by me. Note that this --- 1604,1610 ---- */ latestXid = RecordTransactionCommit(); ! POSTGRESQL_TRANSACTION_COMMIT(MyProc->lxid); /* * Let others know about no transaction in progress by me. Note that this *************** *** 1990,1996 **** */ latestXid = RecordTransactionAbort(false); ! PG_TRACE1(transaction__abort, MyProc->lxid); /* * Let others know about no transaction in progress by me. Note that this --- 1990,1996 ---- */ latestXid = RecordTransactionAbort(false); ! POSTGRESQL_TRANSACTION_ABORT(MyProc->lxid); /* * Let others know about no transaction in progress by me. Note that this Index: src/backend/storage/lmgr/lock.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v retrieving revision 1.181 diff -c -r1.181 lock.c *** src/backend/storage/lmgr/lock.c 2 Feb 2008 22:26:17 -0000 1.181 --- src/backend/storage/lmgr/lock.c 27 Feb 2008 03:22:56 -0000 *************** *** 787,797 **** * Sleep till someone wakes me up. */ ! PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode); WaitOnLock(locallock, owner); ! PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode); /* * NOTE: do not do any material change of state between here and --- 787,797 ---- * Sleep till someone wakes me up. */ ! POSTGRESQL_LOCK_STARTWAIT(locktag->locktag_field2, lockmode); WaitOnLock(locallock, owner); ! POSTGRESQL_LOCK_ENDWAIT(locktag->locktag_field2, lockmode); /* * NOTE: do not do any material change of state between here and Index: src/backend/storage/lmgr/lwlock.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v retrieving revision 1.50 diff -c -r1.50 lwlock.c *** src/backend/storage/lmgr/lwlock.c 1 Jan 2008 19:45:52 -0000 1.50 --- src/backend/storage/lmgr/lwlock.c 27 Feb 2008 03:22:57 -0000 *************** *** 447,453 **** block_counts[lockid]++; #endif ! PG_TRACE2(lwlock__startwait, lockid, mode); for (;;) { --- 447,453 ---- block_counts[lockid]++; #endif ! POSTGRESQL_LWLOCK_STARTWAIT(lockid, mode); for (;;) { *************** *** 458,464 **** extraWaits++; } ! PG_TRACE2(lwlock__endwait, lockid, mode); LOG_LWDEBUG("LWLockAcquire", lockid, "awakened"); --- 458,464 ---- extraWaits++; } ! POSTGRESQL_LWLOCK_ENDWAIT(lockid, mode); LOG_LWDEBUG("LWLockAcquire", lockid, "awakened"); *************** *** 469,475 **** /* We are done updating shared state of the lock itself. */ SpinLockRelease(&lock->mutex); ! PG_TRACE2(lwlock__acquire, lockid, mode); /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks++] = lockid; --- 469,475 ---- /* We are done updating shared state of the lock itself. */ SpinLockRelease(&lock->mutex); ! POSTGRESQL_LWLOCK_ACQUIRE(lockid, mode); /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks++] = lockid; *************** *** 540,552 **** /* Failed to get lock, so release interrupt holdoff */ RESUME_INTERRUPTS(); LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed"); ! PG_TRACE2(lwlock__condacquire__fail, lockid, mode); } else { /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks++] = lockid; ! PG_TRACE2(lwlock__condacquire, lockid, mode); } return !mustwait; --- 540,552 ---- /* Failed to get lock, so release interrupt holdoff */ RESUME_INTERRUPTS(); LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed"); ! POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(lockid, mode); } else { /* Add lock to list of locks held by this backend */ held_lwlocks[num_held_lwlocks++] = lockid; ! POSTGRESQL_LWLOCK_CONDACQUIRE(lockid, mode); } return !mustwait; *************** *** 631,637 **** /* We are done updating shared state of the lock itself. */ SpinLockRelease(&lock->mutex); ! PG_TRACE1(lwlock__release, lockid); /* * Awaken any waiters I removed from the queue. --- 631,637 ---- /* We are done updating shared state of the lock itself. */ SpinLockRelease(&lock->mutex); ! POSTGRESQL_LWLOCK_RELEASE(lockid); /* * Awaken any waiters I removed from the queue. Index: src/include/c.h =================================================================== RCS file: /projects/cvsroot/pgsql/src/include/c.h,v retrieving revision 1.223 diff -c -r1.223 c.h *** src/include/c.h 23 Feb 2008 19:11:45 -0000 1.223 --- src/include/c.h 27 Feb 2008 03:22:57 -0000 *************** *** 57,63 **** #include "pg_config_os.h" /* must be before any system header files */ #endif #include "postgres_ext.h" ! #include "pg_trace.h" #if _MSC_VER >= 1400 #define errcode __msvc_errcode --- 57,67 ---- #include "pg_config_os.h" /* must be before any system header files */ #endif #include "postgres_ext.h" ! #ifdef ENABLE_DTRACE ! #include "probes.h" ! #else ! #include "probes_null.h" ! #endif #if _MSC_VER >= 1400 #define errcode __msvc_errcode /* ---------- * probes_null.h * * Definitions of probe macros used when DTrace is not enabled. * * Copyright (c) 2006-2008, PostgreSQL Global Development Group * * ---------- */ #ifndef _PROBES_NULL_H #define _PROBES_NULL_H #define POSTGRESQL_LOCK_ENDWAIT(arg0, arg1) #define POSTGRESQL_LOCK_ENDWAIT_ENABLED() #define POSTGRESQL_LOCK_STARTWAIT(arg0, arg1) #define POSTGRESQL_LOCK_STARTWAIT_ENABLED() #define POSTGRESQL_LWLOCK_ACQUIRE(arg0, arg1) #define POSTGRESQL_LWLOCK_ACQUIRE_ENABLED() #define POSTGRESQL_LWLOCK_CONDACQUIRE(arg0, arg1) #define POSTGRESQL_LWLOCK_CONDACQUIRE_ENABLED() #define POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(arg0, arg1) #define POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL_ENABLED() #define POSTGRESQL_LWLOCK_ENDWAIT(arg0, arg1) #define POSTGRESQL_LWLOCK_ENDWAIT_ENABLED() #define POSTGRESQL_LWLOCK_RELEASE(arg0) #define POSTGRESQL_LWLOCK_RELEASE_ENABLED() #define POSTGRESQL_LWLOCK_STARTWAIT(arg0, arg1) #define POSTGRESQL_LWLOCK_STARTWAIT_ENABLED() #define POSTGRESQL_TRANSACTION_ABORT(arg0) #define POSTGRESQL_TRANSACTION_ABORT_ENABLED() #define POSTGRESQL_TRANSACTION_COMMIT(arg0) #define POSTGRESQL_TRANSACTION_COMMIT_ENABLED() #define POSTGRESQL_TRANSACTION_START(arg0) #define POSTGRESQL_TRANSACTION_START_ENABLED() #endif /* _PROBES_NULL_H */
pgsql-patches by date: