From 641a72e500b07483fc9efe5daa519efaac930006 Mon Sep 17 00:00:00 2001 From: lianxuechao Date: Fri, 31 May 2024 15:45:45 +0800 Subject: [PATCH 1/3] [feat] latency scale factor --- src/brpc/details/method_status.cpp | 3 ++- src/brpc/details/method_status.h | 2 +- src/brpc/server.cpp | 5 ++++- src/brpc/server.h | 2 ++ src/bvar/latency_recorder.cpp | 1 + src/bvar/latency_recorder.h | 9 +++++---- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/brpc/details/method_status.cpp b/src/brpc/details/method_status.cpp index faf6449c3c..a9118429c1 100644 --- a/src/brpc/details/method_status.cpp +++ b/src/brpc/details/method_status.cpp @@ -36,11 +36,12 @@ static int cast_cl(void* arg) { return 0; } -MethodStatus::MethodStatus() +MethodStatus::MethodStatus(size_t scale_) : _nconcurrency(0) , _nconcurrency_bvar(cast_int, &_nconcurrency) , _eps_bvar(&_nerror_bvar) , _max_concurrency_bvar(cast_cl, &_cl) + , _latency_rec(scale_) { } diff --git a/src/brpc/details/method_status.h b/src/brpc/details/method_status.h index b49b6754d0..d9cc20b8a3 100644 --- a/src/brpc/details/method_status.h +++ b/src/brpc/details/method_status.h @@ -32,7 +32,7 @@ class Server; // Record accessing stats of a method. class MethodStatus : public Describable { public: - MethodStatus(); + MethodStatus(size_t scale_ = 1); ~MethodStatus(); // Call this function when the method is about to be called. diff --git a/src/brpc/server.cpp b/src/brpc/server.cpp index 9322828947..c9a5567c67 100644 --- a/src/brpc/server.cpp +++ b/src/brpc/server.cpp @@ -123,6 +123,8 @@ const int INITIAL_CERT_MAP = 64; // compilation units is undefined. const int s_ncore = sysconf(_SC_NPROCESSORS_ONLN); +DEFINE_uint64(latency_scale_factor, 1, "latency scale factor, used by method status, etc., latency_us = latency * latency_scale_factor"); + ServerOptions::ServerOptions() : idle_timeout_sec(-1) , nshead_service(NULL) @@ -149,7 +151,8 @@ ServerOptions::ServerOptions() , health_reporter(NULL) , rtmp_service(NULL) , redis_service(NULL) - , bthread_tag(BTHREAD_TAG_INVALID) { + , bthread_tag(BTHREAD_TAG_INVALID) + , latency_scale_factor(FLAGS_latency_scale_factor) { if (s_ncore > 0) { num_threads = s_ncore + 1; } diff --git a/src/brpc/server.h b/src/brpc/server.h index 4843d0d0f6..34c4e1d49f 100644 --- a/src/brpc/server.h +++ b/src/brpc/server.h @@ -266,6 +266,8 @@ struct ServerOptions { // Default: BTHREAD_TAG_DEFAULT bthread_tag_t bthread_tag; + // latency_us = latency * latency_scale_factor, default value is 1 + size_t latency_scale_factor; private: // SSLOptions is large and not often used, allocate it on heap to // prevent ServerOptions from being bloated in most cases. diff --git a/src/bvar/latency_recorder.cpp b/src/bvar/latency_recorder.cpp index c6532958e6..6f016bab4b 100644 --- a/src/bvar/latency_recorder.cpp +++ b/src/bvar/latency_recorder.cpp @@ -281,6 +281,7 @@ void LatencyRecorder::hide() { } LatencyRecorder& LatencyRecorder::operator<<(int64_t latency) { + latency = latency / scale; _latency << latency; _max_latency << latency; _latency_percentile << latency; diff --git a/src/bvar/latency_recorder.h b/src/bvar/latency_recorder.h index 5e7029923b..095e6c97c9 100644 --- a/src/bvar/latency_recorder.h +++ b/src/bvar/latency_recorder.h @@ -48,7 +48,7 @@ class CDF : public Variable { // For mimic constructor inheritance. class LatencyRecorderBase { public: - explicit LatencyRecorderBase(time_t window_size); + explicit LatencyRecorderBase(time_t window_size, size_t scale); time_t window_size() const { return _latency_window.window_size(); } protected: IntRecorder _latency; @@ -67,6 +67,7 @@ class LatencyRecorderBase { PassiveStatus _latency_9999; // 99.99% CDF _latency_cdf; PassiveStatus > _latency_percentiles; + size_t scale; }; } // namespace detail @@ -75,9 +76,9 @@ class LatencyRecorderBase { class LatencyRecorder : public detail::LatencyRecorderBase { typedef detail::LatencyRecorderBase Base; public: - LatencyRecorder() : Base(-1) {} - explicit LatencyRecorder(time_t window_size) : Base(window_size) {} - explicit LatencyRecorder(const butil::StringPiece& prefix) : Base(-1) { + LatencyRecorder(size_t scale_ = 1) : Base(-1, scale_) {} + explicit LatencyRecorder(time_t window_size, size_t scale_ = 1) : Base(window_size, scale_) {} + explicit LatencyRecorder(const butil::StringPiece& prefix, size_t scale_ = 1) : Base(-1, scale_) { expose(prefix); } LatencyRecorder(const butil::StringPiece& prefix, From d4e0c0cb031cee0411f57b1d948a85800ea00c9b Mon Sep 17 00:00:00 2001 From: lianxuechao Date: Fri, 31 May 2024 16:47:03 +0800 Subject: [PATCH 2/3] [fix] fix build --- src/bvar/latency_recorder.cpp | 4 +++- src/bvar/latency_recorder.h | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/bvar/latency_recorder.cpp b/src/bvar/latency_recorder.cpp index 6f016bab4b..a759eda0cd 100644 --- a/src/bvar/latency_recorder.cpp +++ b/src/bvar/latency_recorder.cpp @@ -17,6 +17,7 @@ // Date: 2014/09/22 11:57:43 +#include #include #include "butil/unique_ptr.h" #include "bvar/latency_recorder.h" @@ -154,7 +155,7 @@ static Vector get_latencies(void *arg) { return result; } -LatencyRecorderBase::LatencyRecorderBase(time_t window_size) +LatencyRecorderBase::LatencyRecorderBase(time_t window_size, size_t scale_) : _max_latency(0) , _latency_window(&_latency, window_size) , _max_latency_window(&_max_latency, window_size) @@ -168,6 +169,7 @@ LatencyRecorderBase::LatencyRecorderBase(time_t window_size) , _latency_9999(get_percetile<9999, 10000>, this) , _latency_cdf(&_latency_percentile_window) , _latency_percentiles(get_latencies, &_latency_percentile_window) + , scale(scale_) {} } // namespace detail diff --git a/src/bvar/latency_recorder.h b/src/bvar/latency_recorder.h index 095e6c97c9..ff9bf30230 100644 --- a/src/bvar/latency_recorder.h +++ b/src/bvar/latency_recorder.h @@ -82,16 +82,19 @@ class LatencyRecorder : public detail::LatencyRecorderBase { expose(prefix); } LatencyRecorder(const butil::StringPiece& prefix, - time_t window_size) : Base(window_size) { + time_t window_size, + size_t scale_ = 1) : Base(window_size, scale_) { expose(prefix); } LatencyRecorder(const butil::StringPiece& prefix1, - const butil::StringPiece& prefix2) : Base(-1) { + const butil::StringPiece& prefix2, + size_t scale_ = 1) : Base(-1, scale_) { expose(prefix1, prefix2); } LatencyRecorder(const butil::StringPiece& prefix1, const butil::StringPiece& prefix2, - time_t window_size) : Base(window_size) { + time_t window_size, + size_t scale_ = 1) : Base(window_size, scale_) { expose(prefix1, prefix2); } From 7f4fd26a8e29c5b01a81251fdacdf2279c65c0e5 Mon Sep 17 00:00:00 2001 From: lianxuechao Date: Mon, 3 Jun 2024 23:42:46 +0800 Subject: [PATCH 3/3] [feat] define gflags in latency_recorder.cpp --- src/brpc/details/method_status.cpp | 3 +-- src/brpc/details/method_status.h | 2 +- src/brpc/server.cpp | 5 +---- src/brpc/server.h | 2 -- src/bvar/latency_recorder.cpp | 8 ++++---- src/bvar/latency_recorder.h | 18 +++++++----------- 6 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/brpc/details/method_status.cpp b/src/brpc/details/method_status.cpp index a9118429c1..faf6449c3c 100644 --- a/src/brpc/details/method_status.cpp +++ b/src/brpc/details/method_status.cpp @@ -36,12 +36,11 @@ static int cast_cl(void* arg) { return 0; } -MethodStatus::MethodStatus(size_t scale_) +MethodStatus::MethodStatus() : _nconcurrency(0) , _nconcurrency_bvar(cast_int, &_nconcurrency) , _eps_bvar(&_nerror_bvar) , _max_concurrency_bvar(cast_cl, &_cl) - , _latency_rec(scale_) { } diff --git a/src/brpc/details/method_status.h b/src/brpc/details/method_status.h index d9cc20b8a3..b49b6754d0 100644 --- a/src/brpc/details/method_status.h +++ b/src/brpc/details/method_status.h @@ -32,7 +32,7 @@ class Server; // Record accessing stats of a method. class MethodStatus : public Describable { public: - MethodStatus(size_t scale_ = 1); + MethodStatus(); ~MethodStatus(); // Call this function when the method is about to be called. diff --git a/src/brpc/server.cpp b/src/brpc/server.cpp index c9a5567c67..9322828947 100644 --- a/src/brpc/server.cpp +++ b/src/brpc/server.cpp @@ -123,8 +123,6 @@ const int INITIAL_CERT_MAP = 64; // compilation units is undefined. const int s_ncore = sysconf(_SC_NPROCESSORS_ONLN); -DEFINE_uint64(latency_scale_factor, 1, "latency scale factor, used by method status, etc., latency_us = latency * latency_scale_factor"); - ServerOptions::ServerOptions() : idle_timeout_sec(-1) , nshead_service(NULL) @@ -151,8 +149,7 @@ ServerOptions::ServerOptions() , health_reporter(NULL) , rtmp_service(NULL) , redis_service(NULL) - , bthread_tag(BTHREAD_TAG_INVALID) - , latency_scale_factor(FLAGS_latency_scale_factor) { + , bthread_tag(BTHREAD_TAG_INVALID) { if (s_ncore > 0) { num_threads = s_ncore + 1; } diff --git a/src/brpc/server.h b/src/brpc/server.h index 34c4e1d49f..4843d0d0f6 100644 --- a/src/brpc/server.h +++ b/src/brpc/server.h @@ -266,8 +266,6 @@ struct ServerOptions { // Default: BTHREAD_TAG_DEFAULT bthread_tag_t bthread_tag; - // latency_us = latency * latency_scale_factor, default value is 1 - size_t latency_scale_factor; private: // SSLOptions is large and not often used, allocate it on heap to // prevent ServerOptions from being bloated in most cases. diff --git a/src/bvar/latency_recorder.cpp b/src/bvar/latency_recorder.cpp index a759eda0cd..791bc62693 100644 --- a/src/bvar/latency_recorder.cpp +++ b/src/bvar/latency_recorder.cpp @@ -17,7 +17,6 @@ // Date: 2014/09/22 11:57:43 -#include #include #include "butil/unique_ptr.h" #include "bvar/latency_recorder.h" @@ -155,7 +154,7 @@ static Vector get_latencies(void *arg) { return result; } -LatencyRecorderBase::LatencyRecorderBase(time_t window_size, size_t scale_) +LatencyRecorderBase::LatencyRecorderBase(time_t window_size) : _max_latency(0) , _latency_window(&_latency, window_size) , _max_latency_window(&_max_latency, window_size) @@ -169,7 +168,6 @@ LatencyRecorderBase::LatencyRecorderBase(time_t window_size, size_t scale_) , _latency_9999(get_percetile<9999, 10000>, this) , _latency_cdf(&_latency_percentile_window) , _latency_percentiles(get_latencies, &_latency_percentile_window) - , scale(scale_) {} } // namespace detail @@ -282,8 +280,10 @@ void LatencyRecorder::hide() { _latency_percentiles.hide(); } +DEFINE_uint64(latency_scale_factor, 1, "latency scale factor, used by method status, etc., latency_us = latency * latency_scale_factor"); + LatencyRecorder& LatencyRecorder::operator<<(int64_t latency) { - latency = latency / scale; + latency = latency / FLAGS_latency_scale_factor; _latency << latency; _max_latency << latency; _latency_percentile << latency; diff --git a/src/bvar/latency_recorder.h b/src/bvar/latency_recorder.h index ff9bf30230..5e7029923b 100644 --- a/src/bvar/latency_recorder.h +++ b/src/bvar/latency_recorder.h @@ -48,7 +48,7 @@ class CDF : public Variable { // For mimic constructor inheritance. class LatencyRecorderBase { public: - explicit LatencyRecorderBase(time_t window_size, size_t scale); + explicit LatencyRecorderBase(time_t window_size); time_t window_size() const { return _latency_window.window_size(); } protected: IntRecorder _latency; @@ -67,7 +67,6 @@ class LatencyRecorderBase { PassiveStatus _latency_9999; // 99.99% CDF _latency_cdf; PassiveStatus > _latency_percentiles; - size_t scale; }; } // namespace detail @@ -76,25 +75,22 @@ class LatencyRecorderBase { class LatencyRecorder : public detail::LatencyRecorderBase { typedef detail::LatencyRecorderBase Base; public: - LatencyRecorder(size_t scale_ = 1) : Base(-1, scale_) {} - explicit LatencyRecorder(time_t window_size, size_t scale_ = 1) : Base(window_size, scale_) {} - explicit LatencyRecorder(const butil::StringPiece& prefix, size_t scale_ = 1) : Base(-1, scale_) { + LatencyRecorder() : Base(-1) {} + explicit LatencyRecorder(time_t window_size) : Base(window_size) {} + explicit LatencyRecorder(const butil::StringPiece& prefix) : Base(-1) { expose(prefix); } LatencyRecorder(const butil::StringPiece& prefix, - time_t window_size, - size_t scale_ = 1) : Base(window_size, scale_) { + time_t window_size) : Base(window_size) { expose(prefix); } LatencyRecorder(const butil::StringPiece& prefix1, - const butil::StringPiece& prefix2, - size_t scale_ = 1) : Base(-1, scale_) { + const butil::StringPiece& prefix2) : Base(-1) { expose(prefix1, prefix2); } LatencyRecorder(const butil::StringPiece& prefix1, const butil::StringPiece& prefix2, - time_t window_size, - size_t scale_ = 1) : Base(window_size, scale_) { + time_t window_size) : Base(window_size) { expose(prefix1, prefix2); }