From 863631319bbf838ad15690805d7bf59c5a20b89b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 24 Feb 2011 06:00:27 -0800 Subject: [PATCH] add --with-profiler to link in google perftools libprofiler Signed-off-by: Sage Weil --- configure.ac | 14 +++++++ src/Makefile.am | 83 ++++++++++++++++++++++----------------- src/common/common_init.cc | 13 ++++++ 3 files changed, 73 insertions(+), 37 deletions(-) diff --git a/configure.ac b/configure.ac index ecbadb2a70e33..9985e0b5c77d1 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,20 @@ AC_CHECK_LIB([pthread], [pthread_create], [true], AC_MSG_FAILURE([libpthread not PKG_CHECK_MODULES([CRYPTOPP], [libcrypto++], [], [ AC_SEARCH_LIBS([_ZTIN8CryptoPP14CBC_EncryptionE], [crypto++ cryptopp], [true], AC_MSG_FAILURE([libcrypto++ not found]), [-lpthread])]) +# profiler? +AC_ARG_WITH([profiler], + [AS_HELP_STRING([--with-profiler], [build extra profiler binaries])], + [with_profiler=yes], + [with_profiler=no]) +AS_IF([test "x$with_profiler" != xyes], + [AC_CHECK_LIB([profiler], [ProfilerFlush], [], + [AC_MSG_FAILURE([--with-profiler was given but libprofiler (libgoogle-perftools-dev on debian) not found])])], + []) +AM_CONDITIONAL(WITH_PROFILER, test "$with_profiler" = "yes") +AS_IF([test "$with_profiler" = "yes"], + [AC_DEFINE([HAVE_PROFILER], [1], [Define if you have perftools profiler enabled])], + []) + # debug crap? AC_ARG_WITH([debug], [AS_HELP_STRING([--with-debug], [build extra debug binaries])], diff --git a/src/Makefile.am b/src/Makefile.am index c9c9799ab50cb..152a098771bd3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,21 +17,28 @@ check_PROGRAMS = # target by target TESTS = $(check_PROGRAMS) + +EXTRALIBS = +if WITH_PROFILER +EXTRALIBS += -lprofiler +endif + + # monitor cmon_SOURCES = cmon.cc msg/SimpleMessenger.cc -cmon_LDADD = libmon.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +cmon_LDADD = libmon.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += cmon # osd cosd_SOURCES = cosd.cc msg/SimpleMessenger.cc objclass/class_debug.cc \ objclass/class_api.cc -cosd_LDADD = libosd.a libos.a libcrush.a libcommon.a -ldl -lpthread -lm $(CRYPTOPP_LIBS) +cosd_LDADD = libosd.a libos.a libcrush.a libcommon.a -ldl -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += cosd cosd_CXXFLAGS = ${AM_CXXFLAGS} # mds cmds_SOURCES = cmds.cc msg/SimpleMessenger.cc -cmds_LDADD = libmds.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +cmds_LDADD = libmds.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += cmds cmds_CXXFLAGS = ${AM_CXXFLAGS} @@ -40,7 +47,7 @@ ceph_SOURCES = \ msg/SimpleMessenger.cc \ tools/ceph.cc \ tools/common.cc -ceph_LDADD = libcrush.a libcommon.a -ledit -lpthread -lm $(CRYPTOPP_LIBS) +ceph_LDADD = libcrush.a libcommon.a -ledit -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) ceph_CXXFLAGS = ${AM_CXXFLAGS} if WITH_GTK2 @@ -69,24 +76,24 @@ gceph_SOURCES = \ tools/gceph.cc \ tools/gui.cc gceph_LDADD = libcrush.a libcommon.a -ledit -lpthread -lm $(CRYPTOPP_LIBS) \ - $(GTKMM_LIBS) + $(GTKMM_LIBS) $(EXTRALIBS) gceph_CXXFLAGS = ${AM_CXXFLAGS} $(GTKMM_CFLAGS) \ -DCEPH_TOOL_GUIDIR="\"${ceph_tool_guidir}\"" bin_PROGRAMS += gceph endif cconf_SOURCES = cconf.cc -cconf_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +cconf_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) cauthtool_SOURCES = cauthtool.cc -cauthtool_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +cauthtool_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += ceph cconf cauthtool monmaptool_SOURCES = monmaptool.cc -monmaptool_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +monmaptool_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) crushtool_SOURCES = crushtool.cc -crushtool_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +crushtool_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) osdmaptool_SOURCES = osdmaptool.cc -osdmaptool_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +osdmaptool_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += monmaptool crushtool osdmaptool mount_ceph_SOURCES = mount/mount.ceph.c @@ -97,12 +104,12 @@ cephfs_SOURCES = cephfs.cc bin_PROGRAMS += cephfs librados_config_SOURCES = librados-config.cc -librados_config_LDADD = librados.la +librados_config_LDADD = librados.la $(EXTRALIBS) bin_PROGRAMS += librados-config # synthetic client csyn_SOURCES = csyn.cc msg/SimpleMessenger.cc -csyn_LDADD = libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +csyn_LDADD = libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += csyn core: cmon cosd cmds ceph cephfs librados-config cconf monmaptool osdmaptool crushtool csyn @@ -111,7 +118,7 @@ core: cmon cosd cmds ceph cephfs librados-config cconf monmaptool osdmaptool cru # fuse targets? if WITH_FUSE cfuse_SOURCES = cfuse.cc msg/SimpleMessenger.cc client/fuse_ll.cc -cfuse_LDADD = -lfuse libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +cfuse_LDADD = -lfuse libclient.a libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) cfuse_CXXFLAGS = ${AM_CXXFLAGS} bin_PROGRAMS += cfuse @@ -134,30 +141,30 @@ endif # WITH_TCMALLOC if WITH_DEBUG psim_SOURCES = psim.cc -psim_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +psim_LDADD = libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += psim testmsgr_SOURCES = testmsgr.cc msg/SimpleMessenger.cc -testmsgr_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +testmsgr_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testmsgr test_ioctls_SOURCES = client/test_ioctls.c bin_PROGRAMS += test_ioctls dumpjournal_SOURCES = dumpjournal.cc msg/SimpleMessenger.cc -dumpjournal_LDADD = libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +dumpjournal_LDADD = libosdc.a libcrush.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) dupstore_SOURCES = dupstore.cc -dupstore_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +dupstore_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) streamtest_SOURCES = streamtest.cc -streamtest_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +streamtest_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += dumpjournal dupstore streamtest test_trans_SOURCES = test_trans.cc -test_trans_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +test_trans_LDADD = libos.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += test_trans testsnaps_SOURCES = test/osd/TestSnaps.cc -testsnaps_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) +testsnaps_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testsnaps endif @@ -188,17 +195,17 @@ libceph_la_SOURCES = \ ${libosdc_a_SOURCES} libceph_la_CFLAGS = ${AM_CFLAGS} libceph_la_CXXFLAGS= ${AM_CXXFLAGS} -libceph_la_LIBADD = libcrush.la -lpthread $(CRYPTOPP_LIBS) +libceph_la_LIBADD = libcrush.la -lpthread $(CRYPTOPP_LIBS) $(EXTRALIBS) libceph_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '^ceph_.*' lib_LTLIBRARIES += libceph.la if WITH_DEBUG testceph_SOURCES = client/testceph.cc -testceph_LDADD = libceph.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) +testceph_LDADD = libceph.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testceph testtimers_SOURCES = test/TestTimers.cc -testtimers_LDADD = libceph.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) +testtimers_LDADD = libceph.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testtimers testdout_streambuf_SOURCES = test/TestDoutStreambuf.cc @@ -220,7 +227,7 @@ librados_SOURCES = \ librados_la_SOURCES = ${librados_SOURCES} librados_la_CFLAGS = ${AM_CFLAGS} librados_la_CXXFLAGS = ${AM_CXXFLAGS} -librados_la_LIBADD = libcrush.la -lpthread $(CRYPTOPP_LIBS) +librados_la_LIBADD = libcrush.la -lpthread $(CRYPTOPP_LIBS) $(EXTRALIBS) librados_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '^rados_.*' lib_LTLIBRARIES += librados.la @@ -235,7 +242,7 @@ librbd_SOURCES = \ librbd_la_SOURCES = ${librbd_SOURCES} librbd_la_CFLAGS = ${AM_CFLAGS} librbd_la_CXXFLAGS = ${AM_CXXFLAGS} -librbd_la_LIBADD = librados.la libcrush.la -lpthread $(CRYPTOPP_LIBS) +librbd_la_LIBADD = librados.la libcrush.la -lpthread $(CRYPTOPP_LIBS) $(EXTRALIBS) librbd_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '^rbd_.*' lib_LTLIBRARIES += librbd.la @@ -244,29 +251,31 @@ librbd_a_CFLAGS = ${AM_CFLAGS} librbd_a_CXXFLAGS = ${AM_CXXFLAGS} rados_SOURCES = rados.cc -rados_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) +rados_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += rados if WITH_DEBUG testrados_SOURCES = testrados.c -testrados_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) +testrados_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) testradospp_SOURCES = testradospp.cc testradospp_LDADD = librados.la -lpthread -lm radosacl_SOURCES = radosacl.cc -radosacl_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) +radosacl_LDADD = librados.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testrados testradospp radosacl endif rbd_SOURCES = rbd.cc common/fiemap.cc rbd_CXXFLAGS = ${AM_CXXFLAGS} -rbd_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) +rbd_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += rbd if WITH_DEBUG testlibrbd_SOURCES = testlibrbd.c -testlibrbd_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) +testlibrbd_LDADD = librbd.la librados.la libcrush.la -lpthread -lm \ + $(CRYPTOPP_LIBS) $(EXTRALIBS) testlibrbdpp_SOURCES = testlibrbdpp.cc -testlibrbdpp_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS) +testlibrbdpp_LDADD = librbd.la libcrush.la -lpthread -lm \ + $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += testlibrbd testlibrbdpp endif @@ -285,21 +294,21 @@ libradosgw_a_CXXFLAGS = ${AM_CXXFLAGS} # lib_LTLIBRARIES += libradosgw.a radosgw_SOURCES = rgw/rgw_main.cc -radosgw_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lexpat -lpthread -lm $(CRYPTOPP_LIBS) +radosgw_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lexpat -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) radosgw_CXXFLAGS = ${AM_CXXFLAGS} radosgw_admin_SOURCES = rgw/rgw_admin.cc -radosgw_admin_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lexpat -lpthread -lm $(CRYPTOPP_LIBS) +radosgw_admin_LDADD = libradosgw.a librados.a libcrush.a -lfcgi -lexpat -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) bin_PROGRAMS += radosgw radosgw_admin endif if WITH_DEBUG testcrypto_SOURCES = testcrypto.cc -testcrypto_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +testcrypto_LDADD = libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) testcrypto_CXXFLAGS = ${AM_CXXFLAGS} bin_PROGRAMS += testcrypto testkeys_SOURCES = testkeys.cc -testkeys_LDADD = libmon.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) +testkeys_LDADD = libmon.a libcommon.a -lpthread -lm $(CRYPTOPP_LIBS) $(EXTRALIBS) testkeys_CXXFLAGS = ${AM_CXXFLAGS} bin_PROGRAMS += testkeys endif @@ -311,7 +320,7 @@ endif libcls_rbd_la_SOURCES = cls_rbd.cc libcls_rbd_la_CFLAGS = ${AM_CFLAGS} libcls_rbd_la_CXXFLAGS= ${AM_CXXFLAGS} -libcls_rbd_la_LIBADD = -lpthread +libcls_rbd_la_LIBADD = -lpthread $(EXTRALIBS) libcls_rbd_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '.*__cls_.*' radoslibdir = $(libdir)/rados-classes @@ -404,7 +413,6 @@ CLEANFILES += \ sample.fetch_config ## -LDADD = AM_CXXFLAGS = -Wall -D__CEPH__ -D_FILE_OFFSET_BITS=64 -D_REENTRANT -D_THREAD_SAFE -rdynamic @@ -419,6 +427,7 @@ if WITH_LIBATOMIC AM_LDFLAGS += -latomic_ops endif + noinst_LIBRARIES = \ libcommon.a libcrush.a \ libmon.a libmds.a libosdc.a libosd.a libclient.a \ diff --git a/src/common/common_init.cc b/src/common/common_init.cc index 8ab269e2f186d..5f2ad3e6c2ed8 100644 --- a/src/common/common_init.cc +++ b/src/common/common_init.cc @@ -25,6 +25,10 @@ #include +#ifdef HAVE_PROFILER +# include +#endif + /* Set foreground logging * * Forces the process to log only to stderr, overriding whatever was in the ceph.conf. @@ -143,6 +147,15 @@ void common_init(std::vector& args, const char *module_type, int fl if (g_conf.daemonize) cout << ceph_version_to_string() << std::endl; +#ifdef HAVE_PROFILER + /* + * We need to call _something_ in libprofile.so so that the + * --as-needed stuff doesn't drop it from our .so dependencies. + * This is basically a no-op. + */ + ProfilerFlush(); +#endif + parse_config_options(args); install_standard_sighandlers(); -- 2.39.5