]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tracing: add -finstrument-functions for OSD
authorMohamad Gebai <mgebai@suse.com>
Thu, 11 May 2017 13:16:31 +0000 (09:16 -0400)
committerMohamad Gebai <mgebai@suse.com>
Thu, 25 May 2017 19:16:21 +0000 (15:16 -0400)
Signed-off-by: Mohamad Gebai <mgebai@suse.com>
src/ceph_osd.cc
src/osd/CMakeLists.txt
src/tracing/cyg_profile_functions.c [new file with mode: 0644]

index f4d28751a1688c90f850bd15498d0a5129fa6726..a4061079c638be4953f8a87149a1ee5c22ee60e2 100644 (file)
@@ -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<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)
index ecc944b182b7d24a9b93e626c57b5166b40eb494..4423039588d095241d8f5d8383a045e2d0e89231 100644 (file)
@@ -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 (file)
index 0000000..d09c14c
--- /dev/null
@@ -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
+}
+