From: Mohamad Gebai Date: Thu, 11 May 2017 13:16:31 +0000 (-0400) Subject: tracing: add -finstrument-functions for OSD X-Git-Tag: v12.1.0~57^2~15^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=73ab6c2d13473be60fa8a53edf762095dcfd1681;p=ceph.git tracing: add -finstrument-functions for OSD Signed-off-by: Mohamad Gebai --- diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index f4d28751a168..a4061079c638 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -56,6 +56,10 @@ TracepointProvider::Traits osd_tracepoint_traits("libosd_tp.so", "osd_tracing"); TracepointProvider::Traits os_tracepoint_traits("libos_tp.so", "osd_objectstore_tracing"); +#ifdef WITH_OSD_INSTRUMENT_FUNCTIONS +TracepointProvider::Traits cyg_profile_traits("libcyg_profile_tp.so", + "osd_function_tracing"); +#endif } // anonymous namespace @@ -582,6 +586,9 @@ flushjournal_out: TracepointProvider::initialize(g_ceph_context); TracepointProvider::initialize(g_ceph_context); +#ifdef WITH_OSD_INSTRUMENT_FUNCTIONS + TracepointProvider::initialize(g_ceph_context); +#endif MonClient mc(g_ceph_context); if (mc.build_initial_monmap() < 0) diff --git a/src/osd/CMakeLists.txt b/src/osd/CMakeLists.txt index ecc944b182b7..4423039588d0 100644 --- a/src/osd/CMakeLists.txt +++ b/src/osd/CMakeLists.txt @@ -2,6 +2,13 @@ set(osdc_osd_srcs ${CMAKE_SOURCE_DIR}/src/osdc/Objecter.cc ${CMAKE_SOURCE_DIR}/src/osdc/Striper.cc) +if(WITH_OSD_INSTRUMENT_FUNCTIONS AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) + set(GCC_C_FLAGS "-finstrument-functions") + set(GCC_C_FLAGS "${GCC_C_FLAGS} -finstrument-functions-exclude-function-list=_mm_loadu_si128,_mm_cmpeq_epi32,_mm_movemask_epi8") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_C_FLAGS}") + set(osd_cyg_functions_src ${CMAKE_SOURCE_DIR}/src/tracing/cyg_profile_functions.c) +endif() + set(osd_srcs OSD.cc Watch.cc @@ -23,6 +30,7 @@ set(osd_srcs ECUtil.cc ExtentCache.cc ${CMAKE_SOURCE_DIR}/src/common/TrackedOp.cc + ${osd_cyg_functions_src} ${osdc_osd_srcs}) if(HAS_VTA) set_source_files_properties(osdcap.cc @@ -41,3 +49,6 @@ endif() if(WITH_LTTNG AND WITH_EVENTTRACE) add_dependencies(osd eventtrace_tp) endif() +if(WITH_OSD_INSTRUMENT_FUNCTIONS) + add_dependencies(osd cyg_profile_tp) +endif() diff --git a/src/tracing/cyg_profile_functions.c b/src/tracing/cyg_profile_functions.c new file mode 100644 index 000000000000..d09c14c9d678 --- /dev/null +++ b/src/tracing/cyg_profile_functions.c @@ -0,0 +1,31 @@ +#include "acconfig.h" + +#ifdef WITH_LTTNG +#define TRACEPOINT_DEFINE +#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE +#include "tracing/cyg_profile.h" +#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE +#undef TRACEPOINT_DEFINE +#endif + +void __cyg_profile_func_enter(void *this_fn, void *call_site) + __attribute__((no_instrument_function)); + +void __cyg_profile_func_exit(void *this_fn, void *call_site) + __attribute__((no_instrument_function)); + + +void __cyg_profile_func_enter(void *this_fn, void *call_site) +{ +#ifdef WITH_LTTNG + tracepoint(lttng_ust_cyg_profile, func_entry, this_fn, call_site); +#endif +} + +void __cyg_profile_func_exit(void *this_fn, void *call_site) +{ +#ifdef WITH_LTTNG + tracepoint(lttng_ust_cyg_profile, func_exit, this_fn, call_site); +#endif +} +