"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
TracepointProvider::initialize<osd_tracepoint_traits>(g_ceph_context);
TracepointProvider::initialize<os_tracepoint_traits>(g_ceph_context);
+#ifdef WITH_OSD_INSTRUMENT_FUNCTIONS
+ TracepointProvider::initialize<cyg_profile_traits>(g_ceph_context);
+#endif
MonClient mc(g_ceph_context);
if (mc.build_initial_monmap() < 0)
${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
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
if(WITH_LTTNG AND WITH_EVENTTRACE)
add_dependencies(osd eventtrace_tp)
endif()
+if(WITH_OSD_INSTRUMENT_FUNCTIONS)
+ add_dependencies(osd cyg_profile_tp)
+endif()
--- /dev/null
+#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
+}
+