From 4d272b98c584a49201a725e646c90e2ff0f5e45c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 9 Aug 2019 12:00:26 -0700 Subject: [PATCH] bluestore: revamp tracepoints, add sampling This patch adds per-io bluestore specific tracepoints detailing the throttle state at queue time as well as state latencies during execution. Additionally, bluestore_throttle_trace_rate will limit the rate at which ios have tracepoints emitted. Signed-off-by: Samuel Just --- src/ceph_osd.cc | 3 + src/common/ceph_time.h | 14 ++ src/common/options.cc | 8 + src/os/bluestore/BlueStore.cc | 231 +++++++++++++++++++++++---- src/os/bluestore/BlueStore.h | 108 +++++++++++-- src/test/fio/fio_ceph_objectstore.cc | 6 + src/tracing/CMakeLists.txt | 1 + src/tracing/bluestore.c | 5 + src/tracing/bluestore.tp | 148 +++++++++++++++++ 9 files changed, 478 insertions(+), 46 deletions(-) create mode 100644 src/tracing/bluestore.c create mode 100644 src/tracing/bluestore.tp diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index 145f404f423..b24ca32ab02 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -59,6 +59,8 @@ TracepointProvider::Traits osd_tracepoint_traits("libosd_tp.so", "osd_tracing"); TracepointProvider::Traits os_tracepoint_traits("libos_tp.so", "osd_objectstore_tracing"); +TracepointProvider::Traits bluestore_tracepoint_traits("libbluestore_tp.so", + "bluestore_tracing"); #ifdef WITH_OSD_INSTRUMENT_FUNCTIONS TracepointProvider::Traits cyg_profile_traits("libcyg_profile_tp.so", "osd_function_tracing"); @@ -655,6 +657,7 @@ flushjournal_out: TracepointProvider::initialize(g_ceph_context); TracepointProvider::initialize(g_ceph_context); + TracepointProvider::initialize(g_ceph_context); #ifdef WITH_OSD_INSTRUMENT_FUNCTIONS TracepointProvider::initialize(g_ceph_context); #endif diff --git a/src/common/ceph_time.h b/src/common/ceph_time.h index 74236bfd4ef..ae4a17c7812 100644 --- a/src/common/ceph_time.h +++ b/src/common/ceph_time.h @@ -503,6 +503,20 @@ struct converts_to_timespec constexpr bool converts_to_timespec_v = converts_to_timespec::value; +template +static Rep to_seconds(T t) { + return std::chrono::duration_cast< + std::chrono::duration>(t).count(); +} + +template +static Rep to_microseconds(T t) { + return std::chrono::duration_cast< + std::chrono::duration< + Rep, + std::micro>>(t).count(); +} + } // namespace ceph #endif // COMMON_CEPH_TIME_H diff --git a/src/common/options.cc b/src/common/options.cc index f60182b5fa5..db043b5ac3f 100644 --- a/src/common/options.cc +++ b/src/common/options.cc @@ -5564,6 +5564,14 @@ std::vector