Robert Lor wrote: > I can't seem to apply the patch on Solaris. Perhaps the attached patch in -c format will work better.
-- Peter Eisentraut http://developer.postgresql.org/~petere/
diff -cNr ../cvs-pgsql/configure ./configure *** ../cvs-pgsql/configure 2006-07-21 23:35:48.000000000 +0200 --- ./configure 2006-07-22 01:21:54.000000000 +0200 *************** *** 314,320 **** # include <unistd.h> #endif" ! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. --- 314,320 ---- # include <unistd.h> #endif" ! ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug DTRACE DTRACEFLAGS enable_dtrace CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. *************** *** 865,870 **** --- 865,871 ---- --disable-rpath do not embed shared library search path in executables --disable-spinlocks do not use spinlocks --enable-debug build with debugging symbols (-g) + --enable-dtrace build with DTrace support --enable-depend turn on automatic dependency tracking --enable-cassert enable assertion checks (for debugging) --enable-thread-safety make client libraries thread-safe *************** *** 1947,1952 **** --- 1948,2029 ---- # + # DTrace + # + + + + # Check whether --enable-dtrace or --disable-dtrace was given. + if test "${enable_dtrace+set}" = set; then + enableval="$enable_dtrace" + + case $enableval in + yes) + + cat >>confdefs.h <<\_ACEOF + #define ENABLE_DTRACE 1 + _ACEOF + + for ac_prog in dtrace + do + # Extract the first word of "$ac_prog", so it can be a program name with args. + set dummy $ac_prog; ac_word=$2 + echo "$as_me:$LINENO: checking for $ac_word" >&5 + echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 + if test "${ac_cv_prog_DTRACE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + if test -n "$DTRACE"; then + ac_cv_prog_DTRACE="$DTRACE" # Let the user override the test. + else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in $PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DTRACE="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi + done + done + + fi + fi + DTRACE=$ac_cv_prog_DTRACE + if test -n "$DTRACE"; then + echo "$as_me:$LINENO: result: $DTRACE" >&5 + echo "${ECHO_T}$DTRACE" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 + fi + + test -n "$DTRACE" && break + done + + + ;; + no) + : + ;; + *) + { { echo "$as_me:$LINENO: error: no argument expected for --enable-dtrace option" >&5 + echo "$as_me: error: no argument expected for --enable-dtrace option" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + else + enable_dtrace=no + + fi; + + + + # # C compiler # *************** *** 22759,22764 **** --- 22836,22842 ---- enable_rpath) ;; enable_spinlocks) ;; enable_debug) ;; + enable_dtrace) ;; with_CC) ;; enable_depend) ;; enable_cassert) ;; *************** *** 23431,23436 **** --- 23509,23517 ---- s,@enable_shared@,$enable_shared,;t t s,@enable_rpath@,$enable_rpath,;t t s,@enable_debug@,$enable_debug,;t t + s,@DTRACE@,$DTRACE,;t t + s,@DTRACEFLAGS@,$DTRACEFLAGS,;t t + s,@enable_dtrace@,$enable_dtrace,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t diff -cNr ../cvs-pgsql/configure.in ./configure.in *** ../cvs-pgsql/configure.in 2006-07-21 23:35:48.000000000 +0200 --- ./configure.in 2006-07-22 01:09:54.000000000 +0200 *************** *** 206,211 **** --- 206,222 ---- AC_SUBST(enable_debug) # + # DTrace + # + PGAC_ARG_BOOL(enable, dtrace, no, + [ --enable-dtrace build with DTrace support], + [AC_DEFINE([ENABLE_DTRACE], 1, + [Define to 1 to enable DTrace support. (--enable-dtrace)]) + AC_CHECK_PROGS(DTRACE, dtrace) + AC_SUBST(DTRACEFLAGS)]) + AC_SUBST(enable_dtrace) + + # # C compiler # diff -cNr ../cvs-pgsql/src/backend/access/transam/xact.c ./src/backend/access/transam/xact.c *** ../cvs-pgsql/src/backend/access/transam/xact.c 2006-07-21 23:36:01.000000000 +0200 --- ./src/backend/access/transam/xact.c 2006-07-22 00:46:42.000000000 +0200 *************** *** 1384,1389 **** --- 1384,1391 ---- XactLockTableInsert(s->transactionId); + PG_TRACE1 (transaction__start, s->transactionId); + /* * set transaction_timestamp() (a/k/a now()). We want this to be the * same as the first command's statement_timestamp(), so don't do a *************** *** 1535,1540 **** --- 1537,1544 ---- LWLockRelease(ProcArrayLock); } + PG_TRACE1 (transaction__commit, s->transactionId); + /* * This is all post-commit cleanup. Note that if an error is raised here, * it's too late to abort the transaction. This should be just *************** *** 1931,1936 **** --- 1935,1942 ---- LWLockRelease(ProcArrayLock); } + PG_TRACE1 (transaction__abort, s->transactionId); + /* * Post-abort cleanup. See notes in CommitTransaction() concerning * ordering. diff -cNr ../cvs-pgsql/src/backend/Makefile ./src/backend/Makefile *** ../cvs-pgsql/src/backend/Makefile 2006-07-21 23:36:00.000000000 +0200 --- ./src/backend/Makefile 2006-07-22 01:21:06.000000000 +0200 *************** *** 19,25 **** SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o) ! OBJS := $(SUBSYSOBJS) $(top_builddir)/src/port/libpgport_srv.a # We put libpgport into OBJS, so remove it from LIBS LIBS := $(filter-out -lpgport, $(LIBS)) --- 19,29 ---- SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o) ! OBJS = $(SUBSYSOBJS) $(top_builddir)/src/port/libpgport_srv.a ! ! ifeq ($(enable_dtrace), yes) ! OBJS += probes.o ! endif # We put libpgport into OBJS, so remove it from LIBS LIBS := $(filter-out -lpgport, $(LIBS)) *************** *** 135,140 **** --- 139,148 ---- $(LN_S) ../../../$(subdir)/utils/fmgroids.h . + probes.o: probes.d $(SUBSYSOBJS) + $(DTRACE) $(DTRACEFLAGS) -G -s $^ + + ########################################################################## distprep: diff -cNr ../cvs-pgsql/src/backend/probes.d ./src/backend/probes.d *** ../cvs-pgsql/src/backend/probes.d 1970-01-01 01:00:00.000000000 +0100 --- ./src/backend/probes.d 2006-07-22 01:17:59.000000000 +0200 *************** *** 0 **** --- 1,24 ---- + /* ---------- + * DTrace probes for PostgreSQL backend + * + * Copyright (c) 2006, PostgreSQL Global Development Group + * + * $PostgreSQL$ + * ---------- + */ + + provider postgresql { + + probe transaction__start(int); + probe transaction__commit(int); + probe transaction__abort(int); + probe lwlock__acquire(int, int); + probe lwlock__release(int); + probe lwlock__startwait(int, int); + probe lwlock__endwait(int, int); + probe lwlock__condacquire(int, int); + probe lwlock__condacquire__fail(int, int); + probe lock__startwait(int, int); + probe lock__endwait(int, int); + + }; diff -cNr ../cvs-pgsql/src/backend/storage/lmgr/lock.c ./src/backend/storage/lmgr/lock.c *** ../cvs-pgsql/src/backend/storage/lmgr/lock.c 2006-07-21 23:36:08.000000000 +0200 --- ./src/backend/storage/lmgr/lock.c 2006-07-22 00:49:47.000000000 +0200 *************** *** 752,759 **** --- 752,764 ---- /* * 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 * return. All required changes in locktable state must have been diff -cNr ../cvs-pgsql/src/backend/storage/lmgr/lwlock.c ./src/backend/storage/lmgr/lwlock.c *** ../cvs-pgsql/src/backend/storage/lmgr/lwlock.c 2006-07-21 23:36:08.000000000 +0200 --- ./src/backend/storage/lmgr/lwlock.c 2006-07-22 00:50:23.000000000 +0200 *************** *** 424,429 **** --- 424,431 ---- block_counts[lockid]++; #endif + PG_TRACE2(lwlock__startwait, lockid, mode); + for (;;) { /* "false" means cannot accept cancel/die interrupt here. */ *************** *** 433,438 **** --- 435,442 ---- extraWaits++; } + PG_TRACE2(lwlock__endwait, lockid, mode); + LOG_LWDEBUG("LWLockAcquire", lockid, "awakened"); /* Now loop back and try to acquire lock again. */ *************** *** 442,447 **** --- 446,453 ---- /* 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; *************** *** 511,521 **** --- 517,529 ---- /* 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; *************** *** 600,605 **** --- 608,615 ---- /* 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. */ diff -cNr ../cvs-pgsql/src/include/c.h ./src/include/c.h *** ../cvs-pgsql/src/include/c.h 2006-07-21 23:36:15.000000000 +0200 --- ./src/include/c.h 2006-07-22 00:46:42.000000000 +0200 *************** *** 56,61 **** --- 56,62 ---- #include "pg_config_os.h" /* must be before any system header files */ #endif #include "postgres_ext.h" + #include "pg_trace.h" #if defined(_MSC_VER) || defined(__BORLANDC__) #define WIN32_ONLY_COMPILER diff -cNr ../cvs-pgsql/src/include/pg_config.h.in ./src/include/pg_config.h.in *** ../cvs-pgsql/src/include/pg_config.h.in 2006-07-21 23:36:15.000000000 +0200 --- ./src/include/pg_config.h.in 2006-07-22 00:46:42.000000000 +0200 *************** *** 36,41 **** --- 36,44 ---- /* Define to the default TCP port number as a string constant. */ #undef DEF_PGPORT_STR + /* Define to 1 to enable DTrace support. (--enable-dtrace) */ + #undef ENABLE_DTRACE + /* Define to 1 if you want National Language Support. (--enable-nls) */ #undef ENABLE_NLS diff -cNr ../cvs-pgsql/src/include/pg_trace.h ./src/include/pg_trace.h *** ../cvs-pgsql/src/include/pg_trace.h 1970-01-01 01:00:00.000000000 +0100 --- ./src/include/pg_trace.h 2006-07-22 00:54:22.000000000 +0200 *************** *** 0 **** --- 1,56 ---- + /* ---------- + * pg_trace.h + * + * Definitions for the PostgreSQL tracing framework + * + * Copyright (c) 2006, PostgreSQL Global Development Group + * + * $PostgreSQL$ + * ---------- + */ + + #ifndef PG_TRACE_H + #define PG_TRACE_H + + #ifdef ENABLE_DTRACE + + #include <sys/sdt.h> + + /* + * The PG_TRACE macros are mapped to the appropriate macros used by DTrace. + * + * Only one DTrace provider called "postgresql" will be used for PostgreSQL, + * so the name is hard-coded here to avoid having to specify it in the + * source code. + */ + + #define PG_TRACE(name) \ + DTRACE_PROBE(postgresql, name) + #define PG_TRACE1(name, arg1) \ + DTRACE_PROBE1(postgresql, name, arg1) + #define PG_TRACE2(name, arg1, arg2) \ + DTRACE_PROBE2(postgresql, name, arg1, arg2) + #define PG_TRACE3(name, arg1, arg2, arg3) \ + DTRACE_PROBE3(postgresql, name, arg1, arg2, arg3) + #define PG_TRACE4(name, arg1, arg2, arg3, arg4) \ + DTRACE_PROBE4(postgresql, name, arg1, arg2, arg3, arg4) + #define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5) \ + DTRACE_PROBE5(postgresql, name, arg1, arg2, arg3, arg4, arg5) + + #else /* not ENABLE_DTRACE */ + + /* + * Unless DTrace is explicitly enabled with --enable-dtrace, the PG_TRACE + * macros will expand to no-ops. + */ + + #define PG_TRACE(name) + #define PG_TRACE1(name, arg1) + #define PG_TRACE2(name, arg1, arg2) + #define PG_TRACE3(name, arg1, arg2, arg3) + #define PG_TRACE4(name, arg1, arg2, arg3, arg4) + #define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5) + + #endif /* not ENABLE_DTRACE */ + + #endif /* PG_TRACE_H */ diff -cNr ../cvs-pgsql/src/Makefile.global.in ./src/Makefile.global.in *** ../cvs-pgsql/src/Makefile.global.in 2006-07-22 00:37:37.000000000 +0200 --- ./src/Makefile.global.in 2006-07-22 01:09:53.000000000 +0200 *************** *** 157,162 **** --- 157,163 ---- enable_rpath = @enable_rpath@ enable_nls = @enable_nls@ enable_debug = @enable_debug@ + enable_dtrace = @enable_dtrace@ enable_thread_safety = @enable_thread_safety@ python_includespec = @python_includespec@ *************** *** 212,217 **** --- 213,220 ---- YFLAGS = @YFLAGS@ FLEX = @FLEX@ FLEXFLAGS = @FLEXFLAGS@ $(LFLAGS) + DTRACE = @DTRACE@ + DTRACEFLAGS = @DTRACEFLAGS@ # Linking
---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq