This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 314d79760e4 branch-3.0: [opt](metrics) More precise task execution and
wait worker time #48750 (#51319)
314d79760e4 is described below
commit 314d79760e40756e599cdc951d9ed87dbce6211e
Author: zhiqiang <[email protected]>
AuthorDate: Wed Jun 11 10:36:21 2025 +0800
branch-3.0: [opt](metrics) More precise task execution and wait worker time
#48750 (#51319)
cherry pick from #48750
---
be/src/util/threadpool.cpp | 28 ++++++++++++++++------------
be/src/util/threadpool.h | 9 ++++-----
2 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/be/src/util/threadpool.cpp b/be/src/util/threadpool.cpp
index a5220be08a8..7bd656a81b7 100644
--- a/be/src/util/threadpool.cpp
+++ b/be/src/util/threadpool.cpp
@@ -46,10 +46,12 @@ DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(thread_pool_queue_size,
MetricUnit::NOUNIT);
DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(thread_pool_max_queue_size,
MetricUnit::NOUNIT);
DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(thread_pool_max_threads,
MetricUnit::NOUNIT);
DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(thread_pool_submit_failed,
MetricUnit::NOUNIT);
-DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(task_execution_time_ns_avg_in_last_1000_times,
- MetricUnit::NANOSECONDS);
-DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(task_wait_worker_ns_avg_in_last_1000_times,
- MetricUnit::NANOSECONDS);
+DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(thread_pool_task_execution_time_ns_total,
+ MetricUnit::NANOSECONDS);
+DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(thread_pool_task_execution_count_total,
MetricUnit::NOUNIT);
+DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(thread_pool_task_wait_worker_time_ns_total,
+ MetricUnit::NANOSECONDS);
+DEFINE_COUNTER_METRIC_PROTOTYPE_2ARG(thread_pool_task_wait_worker_count_total,
MetricUnit::NOUNIT);
using namespace ErrorCode;
using std::string;
@@ -297,8 +299,10 @@ Status ThreadPool::init() {
INT_GAUGE_METRIC_REGISTER(_metric_entity, thread_pool_max_threads);
INT_GAUGE_METRIC_REGISTER(_metric_entity, thread_pool_queue_size);
INT_GAUGE_METRIC_REGISTER(_metric_entity, thread_pool_max_queue_size);
- INT_GAUGE_METRIC_REGISTER(_metric_entity,
task_execution_time_ns_avg_in_last_1000_times);
- INT_GAUGE_METRIC_REGISTER(_metric_entity,
task_wait_worker_ns_avg_in_last_1000_times);
+ INT_COUNTER_METRIC_REGISTER(_metric_entity,
thread_pool_task_execution_time_ns_total);
+ INT_COUNTER_METRIC_REGISTER(_metric_entity,
thread_pool_task_execution_count_total);
+ INT_COUNTER_METRIC_REGISTER(_metric_entity,
thread_pool_task_wait_worker_time_ns_total);
+ INT_COUNTER_METRIC_REGISTER(_metric_entity,
thread_pool_task_wait_worker_count_total);
INT_COUNTER_METRIC_REGISTER(_metric_entity, thread_pool_submit_failed);
_metric_entity->register_hook("update", [this]() {
@@ -313,10 +317,6 @@ Status ThreadPool::init() {
thread_pool_queue_size->set_value(get_queue_size());
thread_pool_max_queue_size->set_value(get_max_queue_size());
thread_pool_max_threads->set_value(max_threads());
- task_execution_time_ns_avg_in_last_1000_times->set_value(
- _task_execution_time_ns_statistic.mean());
- task_wait_worker_ns_avg_in_last_1000_times->set_value(
- _task_wait_worker_time_ns_statistic.mean());
});
return Status::OK();
}
@@ -588,7 +588,9 @@ void ThreadPool::dispatch_thread() {
DCHECK_EQ(ThreadPoolToken::State::RUNNING, token->state());
DCHECK(!token->_entries.empty());
Task task = std::move(token->_entries.front());
-
_task_wait_worker_time_ns_statistic.add(task.submit_time_wather.elapsed_time());
+ thread_pool_task_wait_worker_time_ns_total->increment(
+ task.submit_time_wather.elapsed_time());
+ thread_pool_task_wait_worker_count_total->increment(1);
token->_entries.pop_front();
token->_active_threads++;
--_total_queued_tasks;
@@ -606,7 +608,9 @@ void ThreadPool::dispatch_thread() {
// with this threadpool, and produce a deadlock.
task.runnable.reset();
l.lock();
-
_task_execution_time_ns_statistic.add(task_execution_time_watch.elapsed_time());
+ thread_pool_task_execution_time_ns_total->increment(
+ task_execution_time_watch.elapsed_time());
+ thread_pool_task_execution_count_total->increment(1);
// Possible states:
// 1. The token was shut down while we ran its task. Transition to
QUIESCED.
// 2. The token has no more queued tasks. Transition back to IDLE.
diff --git a/be/src/util/threadpool.h b/be/src/util/threadpool.h
index 716a59a3787..de274e54af1 100644
--- a/be/src/util/threadpool.h
+++ b/be/src/util/threadpool.h
@@ -411,11 +411,10 @@ private:
IntGauge* thread_pool_queue_size = nullptr;
IntGauge* thread_pool_max_queue_size = nullptr;
IntGauge* thread_pool_max_threads = nullptr;
- IntGauge* task_execution_time_ns_avg_in_last_1000_times = nullptr;
- IntGauge* task_wait_worker_ns_avg_in_last_1000_times = nullptr;
-
- IntervalHistogramStat<int64_t> _task_execution_time_ns_statistic {1000};
- IntervalHistogramStat<int64_t> _task_wait_worker_time_ns_statistic {1000};
+ IntCounter* thread_pool_task_execution_time_ns_total = nullptr;
+ IntCounter* thread_pool_task_execution_count_total = nullptr;
+ IntCounter* thread_pool_task_wait_worker_time_ns_total = nullptr;
+ IntCounter* thread_pool_task_wait_worker_count_total = nullptr;
IntCounter* thread_pool_submit_failed = nullptr;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]