Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
kcenon::thread::metrics::MetricsBase Class Reference

Abstract base class for thread pool metrics. More...

#include <metrics_base.h>

Inheritance diagram for kcenon::thread::metrics::MetricsBase:
Inheritance graph
Collaboration diagram for kcenon::thread::metrics::MetricsBase:
Collaboration graph

Public Member Functions

virtual ~MetricsBase ()=default
 Virtual destructor for proper cleanup in derived classes.
 
void record_submission (std::size_t count=1)
 Record task submission(s).
 
void record_execution (std::uint64_t duration_ns, bool success)
 Record task execution completion.
 
void record_idle_time (std::uint64_t duration_ns)
 Record idle time.
 
virtual void reset ()
 Reset all metrics to their initial state.
 
std::uint64_t tasks_submitted () const
 Get the total number of tasks submitted.
 
std::uint64_t tasks_executed () const
 Get the total number of tasks successfully executed.
 
std::uint64_t tasks_failed () const
 Get the total number of failed tasks.
 
std::uint64_t total_busy_time_ns () const
 Get the total busy time in nanoseconds.
 
std::uint64_t total_idle_time_ns () const
 Get the total idle time in nanoseconds.
 
BaseSnapshot base_snapshot () const
 Get a base snapshot of common metrics.
 
double utilization () const
 Calculate worker utilization ratio.
 
double success_rate () const
 Calculate task success rate.
 

Protected Member Functions

 MetricsBase ()=default
 Default constructor.
 
 MetricsBase (const MetricsBase &)=delete
 Copy constructor (deleted for thread safety).
 
MetricsBaseoperator= (const MetricsBase &)=delete
 Copy assignment operator (deleted for thread safety).
 
 MetricsBase (MetricsBase &&)=delete
 Move constructor (deleted for thread safety).
 
MetricsBaseoperator= (MetricsBase &&)=delete
 Move assignment operator (deleted for thread safety).
 

Protected Attributes

std::atomic< std::uint64_t > tasks_submitted_ {0}
 Counter for submitted tasks.
 
std::atomic< std::uint64_t > tasks_executed_ {0}
 Counter for successfully executed tasks.
 
std::atomic< std::uint64_t > tasks_failed_ {0}
 Counter for failed tasks.
 
std::atomic< std::uint64_t > total_busy_time_ns_ {0}
 Accumulated busy time in nanoseconds.
 
std::atomic< std::uint64_t > total_idle_time_ns_ {0}
 Accumulated idle time in nanoseconds.
 

Detailed Description

Abstract base class for thread pool metrics.

This class provides the common atomic counters and recording methods shared between ThreadPoolMetrics and EnhancedThreadPoolMetrics, eliminating code duplication while maintaining a consistent interface.

Thread Safety

All methods are thread-safe using lock-free atomic operations with relaxed memory ordering for optimal performance.

Performance Characteristics

  • record_* overhead: < 50ns (single atomic fetch_add)
  • Memory footprint: 40 bytes (5 atomic counters)

Usage

This class is not intended to be used directly. Use ThreadPoolMetrics for lightweight metrics or EnhancedThreadPoolMetrics for full-featured production observability.

See also
ThreadPoolMetrics
EnhancedThreadPoolMetrics

Definition at line 84 of file metrics_base.h.

Constructor & Destructor Documentation

◆ ~MetricsBase()

virtual kcenon::thread::metrics::MetricsBase::~MetricsBase ( )
virtualdefault

Virtual destructor for proper cleanup in derived classes.

◆ MetricsBase() [1/3]

kcenon::thread::metrics::MetricsBase::MetricsBase ( )
protecteddefault

Default constructor.

◆ MetricsBase() [2/3]

kcenon::thread::metrics::MetricsBase::MetricsBase ( const MetricsBase & )
protecteddelete

Copy constructor (deleted for thread safety).

◆ MetricsBase() [3/3]

kcenon::thread::metrics::MetricsBase::MetricsBase ( MetricsBase && )
protecteddelete

Move constructor (deleted for thread safety).

Member Function Documentation

◆ base_snapshot()

BaseSnapshot kcenon::thread::metrics::MetricsBase::base_snapshot ( ) const
inlinenodiscard

Get a base snapshot of common metrics.

Returns
BaseSnapshot with current metric values.

Definition at line 187 of file metrics_base.h.

187 {
188 return BaseSnapshot{
189 tasks_submitted_.load(std::memory_order_relaxed),
190 tasks_executed_.load(std::memory_order_relaxed),
191 tasks_failed_.load(std::memory_order_relaxed),
192 total_busy_time_ns_.load(std::memory_order_relaxed),
193 total_idle_time_ns_.load(std::memory_order_relaxed),
194 };
195 }
std::atomic< std::uint64_t > tasks_failed_
Counter for failed tasks.
std::atomic< std::uint64_t > total_idle_time_ns_
Accumulated idle time in nanoseconds.
std::atomic< std::uint64_t > total_busy_time_ns_
Accumulated busy time in nanoseconds.
std::atomic< std::uint64_t > tasks_submitted_
Counter for submitted tasks.
std::atomic< std::uint64_t > tasks_executed_
Counter for successfully executed tasks.

References tasks_executed_, tasks_failed_, tasks_submitted_, total_busy_time_ns_, and total_idle_time_ns_.

◆ operator=() [1/2]

MetricsBase & kcenon::thread::metrics::MetricsBase::operator= ( const MetricsBase & )
protecteddelete

Copy assignment operator (deleted for thread safety).

◆ operator=() [2/2]

MetricsBase & kcenon::thread::metrics::MetricsBase::operator= ( MetricsBase && )
protecteddelete

Move assignment operator (deleted for thread safety).

◆ record_execution()

void kcenon::thread::metrics::MetricsBase::record_execution ( std::uint64_t duration_ns,
bool success )
inline

Record task execution completion.

Parameters
duration_nsExecution duration in nanoseconds.
successWhether the task completed successfully.

Definition at line 108 of file metrics_base.h.

108 {
109 if (success) {
110 tasks_executed_.fetch_add(1, std::memory_order_relaxed);
111 } else {
112 tasks_failed_.fetch_add(1, std::memory_order_relaxed);
113 }
114 total_busy_time_ns_.fetch_add(duration_ns, std::memory_order_relaxed);
115 }

References kcenon::thread::success, tasks_executed_, tasks_failed_, and total_busy_time_ns_.

◆ record_idle_time()

void kcenon::thread::metrics::MetricsBase::record_idle_time ( std::uint64_t duration_ns)
inline

Record idle time.

Parameters
duration_nsIdle duration in nanoseconds.

Definition at line 121 of file metrics_base.h.

121 {
122 total_idle_time_ns_.fetch_add(duration_ns, std::memory_order_relaxed);
123 }

References total_idle_time_ns_.

◆ record_submission()

void kcenon::thread::metrics::MetricsBase::record_submission ( std::size_t count = 1)
inline

Record task submission(s).

Parameters
countNumber of tasks submitted (default: 1).

Definition at line 99 of file metrics_base.h.

99 {
100 tasks_submitted_.fetch_add(count, std::memory_order_relaxed);
101 }

References tasks_submitted_.

◆ reset()

virtual void kcenon::thread::metrics::MetricsBase::reset ( )
inlinevirtual

Reset all metrics to their initial state.

Derived classes should override this method to reset their additional metrics, but must call the base implementation.

Reimplemented in kcenon::thread::metrics::EnhancedThreadPoolMetrics, and kcenon::thread::metrics::ThreadPoolMetrics.

Definition at line 131 of file metrics_base.h.

131 {
132 tasks_submitted_.store(0, std::memory_order_relaxed);
133 tasks_executed_.store(0, std::memory_order_relaxed);
134 tasks_failed_.store(0, std::memory_order_relaxed);
135 total_busy_time_ns_.store(0, std::memory_order_relaxed);
136 total_idle_time_ns_.store(0, std::memory_order_relaxed);
137 }

References tasks_executed_, tasks_failed_, tasks_submitted_, total_busy_time_ns_, and total_idle_time_ns_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::reset(), and kcenon::thread::metrics::ThreadPoolMetrics::reset().

Here is the caller graph for this function:

◆ success_rate()

double kcenon::thread::metrics::MetricsBase::success_rate ( ) const
inlinenodiscard

Calculate task success rate.

Returns
Success rate (0.0 - 1.0), or 1.0 if no tasks executed.

Calculated as: executed / (executed + failed)

Definition at line 216 of file metrics_base.h.

216 {
217 const auto executed = tasks_executed_.load(std::memory_order_relaxed);
218 const auto failed = tasks_failed_.load(std::memory_order_relaxed);
219 const auto total = executed + failed;
220 return (total > 0) ? static_cast<double>(executed) / static_cast<double>(total) : 1.0;
221 }
@ failed
Execution failed.

References kcenon::thread::failed, tasks_executed_, and tasks_failed_.

◆ tasks_executed()

std::uint64_t kcenon::thread::metrics::MetricsBase::tasks_executed ( ) const
inlinenodiscard

Get the total number of tasks successfully executed.

Returns
Number of executed tasks.

Definition at line 155 of file metrics_base.h.

155 {
156 return tasks_executed_.load(std::memory_order_relaxed);
157 }

References tasks_executed_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::snapshot(), and kcenon::thread::metrics::ThreadPoolMetrics::snapshot().

Here is the caller graph for this function:

◆ tasks_failed()

std::uint64_t kcenon::thread::metrics::MetricsBase::tasks_failed ( ) const
inlinenodiscard

Get the total number of failed tasks.

Returns
Number of failed tasks.

Definition at line 163 of file metrics_base.h.

163 {
164 return tasks_failed_.load(std::memory_order_relaxed);
165 }

References tasks_failed_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::snapshot(), and kcenon::thread::metrics::ThreadPoolMetrics::snapshot().

Here is the caller graph for this function:

◆ tasks_submitted()

std::uint64_t kcenon::thread::metrics::MetricsBase::tasks_submitted ( ) const
inlinenodiscard

Get the total number of tasks submitted.

Returns
Number of submitted tasks.

Definition at line 147 of file metrics_base.h.

147 {
148 return tasks_submitted_.load(std::memory_order_relaxed);
149 }

References tasks_submitted_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::snapshot(), and kcenon::thread::metrics::ThreadPoolMetrics::snapshot().

Here is the caller graph for this function:

◆ total_busy_time_ns()

std::uint64_t kcenon::thread::metrics::MetricsBase::total_busy_time_ns ( ) const
inlinenodiscard

Get the total busy time in nanoseconds.

Returns
Total busy time across all workers.

Definition at line 171 of file metrics_base.h.

171 {
172 return total_busy_time_ns_.load(std::memory_order_relaxed);
173 }

References total_busy_time_ns_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::snapshot(), and kcenon::thread::metrics::ThreadPoolMetrics::snapshot().

Here is the caller graph for this function:

◆ total_idle_time_ns()

std::uint64_t kcenon::thread::metrics::MetricsBase::total_idle_time_ns ( ) const
inlinenodiscard

Get the total idle time in nanoseconds.

Returns
Total idle time across all workers.

Definition at line 179 of file metrics_base.h.

179 {
180 return total_idle_time_ns_.load(std::memory_order_relaxed);
181 }

References total_idle_time_ns_.

Referenced by kcenon::thread::metrics::EnhancedThreadPoolMetrics::snapshot(), and kcenon::thread::metrics::ThreadPoolMetrics::snapshot().

Here is the caller graph for this function:

◆ utilization()

double kcenon::thread::metrics::MetricsBase::utilization ( ) const
inlinenodiscard

Calculate worker utilization ratio.

Returns
Utilization ratio (0.0 - 1.0), or 0.0 if no time recorded.

Calculated as: busy_time / (busy_time + idle_time)

Definition at line 203 of file metrics_base.h.

203 {
204 const auto busy = total_busy_time_ns_.load(std::memory_order_relaxed);
205 const auto idle = total_idle_time_ns_.load(std::memory_order_relaxed);
206 const auto total = busy + idle;
207 return (total > 0) ? static_cast<double>(busy) / static_cast<double>(total) : 0.0;
208 }
@ idle
Worker is idle, waiting for work.

References kcenon::thread::idle, total_busy_time_ns_, and total_idle_time_ns_.

Member Data Documentation

◆ tasks_executed_

std::atomic<std::uint64_t> kcenon::thread::metrics::MetricsBase::tasks_executed_ {0}
protected

Counter for successfully executed tasks.

Definition at line 261 of file metrics_base.h.

261{0};

Referenced by base_snapshot(), kcenon::thread::metrics::EnhancedThreadPoolMetrics::record_execution(), record_execution(), reset(), success_rate(), and tasks_executed().

◆ tasks_failed_

std::atomic<std::uint64_t> kcenon::thread::metrics::MetricsBase::tasks_failed_ {0}
protected

◆ tasks_submitted_

std::atomic<std::uint64_t> kcenon::thread::metrics::MetricsBase::tasks_submitted_ {0}
protected

◆ total_busy_time_ns_

std::atomic<std::uint64_t> kcenon::thread::metrics::MetricsBase::total_busy_time_ns_ {0}
protected

◆ total_idle_time_ns_

std::atomic<std::uint64_t> kcenon::thread::metrics::MetricsBase::total_idle_time_ns_ {0}
protected

The documentation for this class was generated from the following file: