From 73ab6c2d13473be60fa8a53edf762095dcfd1681 Mon Sep 17 00:00:00 2001 From: Mohamad Gebai Date: Thu, 11 May 2017 09:16:31 -0400 Subject: [PATCH] tracing: add -finstrument-functions for OSD Signed-off-by: Mohamad Gebai --- src/ceph_osd.cc | 7 +++++++ src/osd/CMakeLists.txt | 11 ++++++++++ src/tracing/cyg_profile_functions.c | 31 +++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 src/tracing/cyg_profile_functions.c diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index f4d28751a16..a4061079c63 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 ecc944b182b..4423039588d 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 00000000000..d09c14c9d67 --- /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 +} + -- 2.39.5