diff options
author | kruall <kruall@ydb.tech> | 2023-02-07 20:28:32 +0300 |
---|---|---|
committer | kruall <kruall@ydb.tech> | 2023-02-07 20:28:32 +0300 |
commit | 840348d6ec22ac423ac3bfb7f586936bdc5d7059 (patch) | |
tree | c621fde61596b8bd3cf705ea8c67795d0d69058d /library | |
parent | f6b76976b4f69e9e547b44df4722a700dd98dbec (diff) | |
download | ydb-840348d6ec22ac423ac3bfb7f586936bdc5d7059.tar.gz |
Add metrics about thread count in pool,
Diffstat (limited to 'library')
-rw-r--r-- | library/cpp/actors/core/executor_pool_basic.cpp | 3 | ||||
-rw-r--r-- | library/cpp/actors/core/harmonizer.cpp | 7 | ||||
-rw-r--r-- | library/cpp/actors/core/harmonizer.h | 1 | ||||
-rw-r--r-- | library/cpp/actors/core/mon_stats.h | 3 | ||||
-rw-r--r-- | library/cpp/actors/helpers/pool_stats_collector.h | 9 |
5 files changed, 23 insertions, 0 deletions
diff --git a/library/cpp/actors/core/executor_pool_basic.cpp b/library/cpp/actors/core/executor_pool_basic.cpp index 0c984f8fb0..a0f5d4423c 100644 --- a/library/cpp/actors/core/executor_pool_basic.cpp +++ b/library/cpp/actors/core/executor_pool_basic.cpp @@ -334,6 +334,8 @@ namespace NActors { poolStats.MaxUtilizationTime = RelaxedLoad(&MaxUtilizationAccumulator) / (i64)(NHPTimer::GetCyclesPerSecond() / 1000); poolStats.WrongWakenedThreadCount = RelaxedLoad(&WrongWakenedThreadCount); poolStats.CurrentThreadCount = RelaxedLoad(&ThreadCount); + poolStats.DefaultThreadCount = DefaultThreadCount; + poolStats.MaxThreadCount = MaxThreadCount; if (Harmonizer) { TPoolHarmonizedStats stats = Harmonizer->GetPoolStats(PoolId); poolStats.IsNeedy = stats.IsNeedy; @@ -342,6 +344,7 @@ namespace NActors { poolStats.IncreasingThreadsByNeedyState = stats.IncreasingThreadsByNeedyState; poolStats.DecreasingThreadsByStarvedState = stats.DecreasingThreadsByStarvedState; poolStats.DecreasingThreadsByHoggishState = stats.DecreasingThreadsByHoggishState; + poolStats.PotentialMaxThreadCount = stats.PotentialMaxThreadCount; } statsCopy.resize(PoolThreads + 1); diff --git a/library/cpp/actors/core/harmonizer.cpp b/library/cpp/actors/core/harmonizer.cpp index f318d8909c..17f00f09c6 100644 --- a/library/cpp/actors/core/harmonizer.cpp +++ b/library/cpp/actors/core/harmonizer.cpp @@ -121,6 +121,7 @@ struct TPoolInfo { TAtomic IncreasingThreadsByNeedyState = 0; TAtomic DecreasingThreadsByStarvedState = 0; TAtomic DecreasingThreadsByHoggishState = 0; + TAtomic PotentialMaxThreadCount = 0; bool IsBeingStopped(i16 threadIdx); double GetBooked(i16 threadIdx); @@ -293,9 +294,14 @@ void THarmonizer::HarmonizeImpl(ui64 ts) { LWPROBE(HarmonizeCheckPool, poolIdx, pool.Pool->GetName(), poolBooked, poolConsumed, lastSecondPoolBooked, lastSecondPoolConsumed, pool.GetThreadCount(), pool.MaxThreadCount, isStarved, isNeedy, isHoggish); } double budget = total - Max(booked, lastSecondBooked); + i16 budgetInt = static_cast<i16>(Max(budget, 0.0)); if (budget < -0.1) { isStarvedPresent = true; } + for (size_t poolIdx = 0; poolIdx < Pools.size(); ++poolIdx) { + TPoolInfo& pool = Pools[poolIdx]; + AtomicSet(pool.PotentialMaxThreadCount, Min(pool.MaxThreadCount, budgetInt)); + } double overbooked = consumed - booked; if (isStarvedPresent) { // last_starved_at_consumed_value = сумма по всем пулам consumed; @@ -422,6 +428,7 @@ TPoolHarmonizedStats THarmonizer::GetPoolStats(i16 poolId) const { .IncreasingThreadsByNeedyState = static_cast<ui64>(RelaxedLoad(&pool.IncreasingThreadsByNeedyState)), .DecreasingThreadsByStarvedState = static_cast<ui64>(RelaxedLoad(&pool.DecreasingThreadsByStarvedState)), .DecreasingThreadsByHoggishState = static_cast<ui64>(RelaxedLoad(&pool.DecreasingThreadsByHoggishState)), + .PotentialMaxThreadCount = static_cast<i16>(RelaxedLoad(&pool.PotentialMaxThreadCount)), .IsNeedy = static_cast<bool>(flags & 1), .IsStarved = static_cast<bool>(flags & 2), .IsHoggish = static_cast<bool>(flags & 4), diff --git a/library/cpp/actors/core/harmonizer.h b/library/cpp/actors/core/harmonizer.h index 61f13e43ac..bc6b938fe8 100644 --- a/library/cpp/actors/core/harmonizer.h +++ b/library/cpp/actors/core/harmonizer.h @@ -10,6 +10,7 @@ namespace NActors { ui64 IncreasingThreadsByNeedyState = 0; ui64 DecreasingThreadsByStarvedState = 0; ui64 DecreasingThreadsByHoggishState = 0; + i16 PotentialMaxThreadCount = 0; bool IsNeedy = false; bool IsStarved = false; bool IsHoggish = false; diff --git a/library/cpp/actors/core/mon_stats.h b/library/cpp/actors/core/mon_stats.h index 38629e2aa1..0fcbf6fcf4 100644 --- a/library/cpp/actors/core/mon_stats.h +++ b/library/cpp/actors/core/mon_stats.h @@ -65,6 +65,9 @@ namespace NActors { ui64 DecreasingThreadsByHoggishState = 0; i16 WrongWakenedThreadCount = 0; i16 CurrentThreadCount = 0; + i16 PotentialMaxThreadCount = 0; + i16 DefaultThreadCount = 0; + i16 MaxThreadCount = 0; bool IsNeedy = false; bool IsStarved = false; bool IsHoggish = false; diff --git a/library/cpp/actors/helpers/pool_stats_collector.h b/library/cpp/actors/helpers/pool_stats_collector.h index b1217b1d63..a56b4d9799 100644 --- a/library/cpp/actors/helpers/pool_stats_collector.h +++ b/library/cpp/actors/helpers/pool_stats_collector.h @@ -126,6 +126,9 @@ private: NMonitoring::TDynamicCounters::TCounterPtr MailboxPushedOutByEventCount; NMonitoring::TDynamicCounters::TCounterPtr WrongWakenedThreadCount; NMonitoring::TDynamicCounters::TCounterPtr CurrentThreadCount; + NMonitoring::TDynamicCounters::TCounterPtr PotentialMaxThreadCount; + NMonitoring::TDynamicCounters::TCounterPtr DefaultThreadCount; + NMonitoring::TDynamicCounters::TCounterPtr MaxThreadCount; NMonitoring::TDynamicCounters::TCounterPtr IsNeedy; NMonitoring::TDynamicCounters::TCounterPtr IsStarved; NMonitoring::TDynamicCounters::TCounterPtr IsHoggish; @@ -178,6 +181,9 @@ private: MailboxPushedOutByEventCount = PoolGroup->GetCounter("MailboxPushedOutByEventCount", true); WrongWakenedThreadCount = PoolGroup->GetCounter("WrongWakenedThreadCount", true); CurrentThreadCount = PoolGroup->GetCounter("CurrentThreadCount", false); + PotentialMaxThreadCount = PoolGroup->GetCounter("PotentialMaxThreadCount", false); + DefaultThreadCount = PoolGroup->GetCounter("DefaultThreadCount", false); + MaxThreadCount = PoolGroup->GetCounter("MaxThreadCount", false); IsNeedy = PoolGroup->GetCounter("IsNeedy", false); IsStarved = PoolGroup->GetCounter("IsStarved", false); IsHoggish = PoolGroup->GetCounter("IsHoggish", false); @@ -222,6 +228,9 @@ private: *MailboxPushedOutByEventCount = stats.MailboxPushedOutByEventCount; *WrongWakenedThreadCount = poolStats.WrongWakenedThreadCount; *CurrentThreadCount = poolStats.CurrentThreadCount; + *PotentialMaxThreadCount = poolStats.PotentialMaxThreadCount; + *DefaultThreadCount = poolStats.DefaultThreadCount; + *MaxThreadCount = poolStats.MaxThreadCount; *IsNeedy = poolStats.IsNeedy; *IsStarved = poolStats.IsStarved; *IsHoggish = poolStats.IsHoggish; |