You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2010/03/12 03:16:23 UTC

svn commit: r922117 - in /incubator/trafficserver/traffic/trunk: configure.ac proxy/Main.cc proxy/Makefile.am proxy/signals.cc

Author: bcall
Date: Fri Mar 12 02:16:23 2010
New Revision: 922117

URL: http://svn.apache.org/viewvc?rev=922117&view=rev
Log:
TS-240 Support to build traffic server with Google's profiler for
profiling the code.

Modified:
    incubator/trafficserver/traffic/trunk/configure.ac
    incubator/trafficserver/traffic/trunk/proxy/Main.cc
    incubator/trafficserver/traffic/trunk/proxy/Makefile.am
    incubator/trafficserver/traffic/trunk/proxy/signals.cc

Modified: incubator/trafficserver/traffic/trunk/configure.ac
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/configure.ac?rev=922117&r1=922116&r2=922117&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/configure.ac (original)
+++ incubator/trafficserver/traffic/trunk/configure.ac Fri Mar 12 02:16:23 2010
@@ -326,6 +326,15 @@ if test "${with_sqlite3}" = "no" -a "${w
    AC_MSG_ERROR([Need at least one DB backend, --with-sqlite3 and --with-libdb are supported])
 fi
 
+# Google profiler
+AC_MSG_CHECKING([whether to enable profiler])
+AC_ARG_WITH([profiler],
+  [AS_HELP_STRING([--with-profiler],[enable support for profiler [default=no]])],
+  [with_profiler=$withval],
+  [with_profiler=no]
+)
+AC_MSG_RESULT([$with_sqlite3])
+
           
 #
 # Installation directories
@@ -692,6 +701,14 @@ else
    AC_MSG_FAILURE([No suitable polling interface found])
 fi
 
+if test "x${with_profiler}" = "xyes"; then
+  AC_CHECK_LIB([profiler], [ProfilerStart], 
+    [AC_SUBST([LIBPROFILER], ["-lprofiler"])
+     AC_DEFINE([HAVE_PROFILER])
+    ],
+    [AC_MSG_FAILURE([check for profiler failed. Have you installed google-perftools-devel?])],
+  )
+fi
 
 # For SunPro 5.2 - we need the demangle symbol for
 #  ink_stack_trace.cc in libinktomi++.  Because this
@@ -807,6 +824,11 @@ AC_CHECK_HEADERS([sqlite3.h \
                   ], [], [])
 fi
 
+if test "x${with_profiler}" = "xyes"; then
+AC_CHECK_HEADERS([google/profiler.h \
+                  ], [], [])
+fi
+
 
 APR_CHECK_GETHOSTBYNAME_R_STYLE
 
@@ -965,6 +987,7 @@ AH_TEMPLATE([solaris],[solaris])
 AH_TEMPLATE([FIXME_NONMODULAR],[FIXME_NONMODULAR])
 AH_TEMPLATE([SPLIT_DNS],[SPLIT_DNS])
 AH_TEMPLATE([NON_MODULAR],[NON_MODULAR])
+AH_TEMPLATE([HAVE_PROFILER],[HAVE_PROFILER])
 
 AC_OUTPUT
 

Modified: incubator/trafficserver/traffic/trunk/proxy/Main.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/Main.cc?rev=922117&r1=922116&r2=922117&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/Main.cc (original)
+++ incubator/trafficserver/traffic/trunk/proxy/Main.cc Fri Mar 12 02:16:23 2010
@@ -30,8 +30,6 @@
   
  ****************************************************************************/
 
-
-
 #include "inktomi++.h"
 #if (HOST_OS != linux)
 #include <sys/lock.h>
@@ -105,6 +103,11 @@ extern "C" int plock(int);
 #include "RemapProcessor.h"
 
 #include "XmlUtils.h"
+
+#ifdef HAVE_PROFILER
+#include <google/profiler.h>
+#endif
+
 //
 // Global Data
 //
@@ -1682,6 +1685,7 @@ change_uid_gid(const char *user)
 }
 
 
+
 //
 // Main
 //
@@ -1689,6 +1693,9 @@ change_uid_gid(const char *user)
 int
 main(int argc, char **argv)
 {
+#ifdef HAVE_PROFILER
+  ProfilerStart("/tmp/ts.prof");
+#endif
   int mem_throttling;
 
   NOWARN_UNUSED(argc);

Modified: incubator/trafficserver/traffic/trunk/proxy/Makefile.am
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/Makefile.am?rev=922117&r1=922116&r2=922117&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/Makefile.am (original)
+++ incubator/trafficserver/traffic/trunk/proxy/Makefile.am Fri Mar 12 02:16:23 2010
@@ -173,7 +173,7 @@ traffic_server_LDADD = \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBREGEX@ @LIBPCRE@ @LIBDB@ @LIBSQLITE3@ @LIBSSL@ @LIBTCL@ @LIBDL@ \
   @LIBEXPAT@ @LIBDEMANGLE@ @LIBICONV@ \
-  @LIBMLD@ @LIBEXC@ @LIBM@ @LIBEV@
+  @LIBMLD@ @LIBEXC@ @LIBM@ @LIBEV@ @LIBPROFILER@
 
 traffic_logcat_SOURCES = logcat.cc
 traffic_logcat_LDFLAGS = @EXTRA_CXX_LDFLAGS@
@@ -231,7 +231,7 @@ traffic_logcat_LDADD = \
   $(top_builddir)/libinktomi++/libinktomi++.a \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBREGEX@ @LIBPCRE@ @LIBDB@ @LIBSQLITE3@ @LIBSSL@ @LIBTCL@ @LIBDL@ @LIBEV@ \
-  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@
+  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@ @LIBPROFILER@
 
 traffic_logstats_SOURCES = logstats.cc
 traffic_logstats_LDFLAGS = @EXTRA_CXX_LDFLAGS@
@@ -291,7 +291,7 @@ traffic_logstats_LDADD = \
   $(top_builddir)/libinktomi++/libinktomi++.a \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBREGEX@ @LIBPCRE@ @LIBDB@ @LIBSQLITE3@ @LIBSSL@ @LIBTCL@ @LIBDL@ @LIBEV@ \
-  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@
+  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@ @LIBPROFILER@
 
 traffic_sac_SOURCES = sac.cc
 traffic_sac_LDFLAGS = @EXTRA_CXX_LDFLAGS@
@@ -349,7 +349,7 @@ traffic_sac_LDADD = \
   $(top_builddir)/libinktomi++/libinktomi++.a \
   @LIBTHREAD@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ @LIBRT@ \
   @LIBREGEX@ @LIBPCRE@ @LIBDB@ @LIBSQLITE3@ @LIBSSL@ @LIBTCL@ @LIBDL@ @LIBEV@ \
-  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@
+  @LIBEXPAT@ @LIBDEMANGLE@ @LIBMLD@ @LIBEXC@ @LIBICONV@ @LIBM@ @LIBPROFILER@
 
 traffic_cust_log_fmt_cnvrt_SOURCES = cust_log_fmt_cnvrt.cc
 traffic_cust_log_fmt_cnvrt_LDADD = \

Modified: incubator/trafficserver/traffic/trunk/proxy/signals.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/signals.cc?rev=922117&r1=922116&r2=922117&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/signals.cc (original)
+++ incubator/trafficserver/traffic/trunk/proxy/signals.cc Fri Mar 12 02:16:23 2010
@@ -27,6 +27,7 @@
 
 **************************************************************************/
 
+
 #include "inktomi++.h"
 #include <unistd.h>
 #include "signals.h"
@@ -40,16 +41,20 @@
 // For backtraces on crash
 #include "ink_stack_trace.h"
 
+
 #ifdef __alpha
 #include <obj.h>
 #include <sym.h>
 #include <demangle.h>
 #include <ucontext.h>
 #include <excpt.h>
-
 struct obj_list *ObjList;
 #endif
 
+#ifdef HAVE_PROFILER
+#include <google/profiler.h>
+#endif
+
 #if (HOST_OS != linux) && (HOST_OS != freebsd)
 typedef void (*SigActionFunc_t) (int sig, siginfo_t * t, void *f);
 #else
@@ -220,6 +225,7 @@ print_context(sigcontext & c, int frame)
 #endif
 
 
+
 static void
 interrupt_handler(int sig)
 {
@@ -316,6 +322,9 @@ signal_handler(int sig, siginfo_t * t, v
   //syslog(LOG_ERR, sig_msg); 
 #endif
 
+#ifdef HAVE_PROFILER
+  ProfilerStop();
+#endif
   shutdown_system();
 
   // Make sure to drop a core for signals that normally