diff options
author | Jonathan Reams <jbreams@mongodb.com> | 2017-11-15 11:39:10 -0500 |
---|---|---|
committer | Jonathan Reams <jbreams@mongodb.com> | 2017-11-16 13:36:05 -0500 |
commit | 3decf4e1f669e70a1aa888305974411d453e277a (patch) | |
tree | d5fe942b8929c5bb849c7bbc4645d27cdb84574e | |
parent | e82f61c0ea6678520f7731857c20051ad6c99ce4 (diff) | |
download | mongo-3decf4e1f669e70a1aa888305974411d453e277a.tar.gz |
SERVER-31980 Track threads in use rather than tasks executing
(cherry picked from commit 9444931ce0e91bc7bfa150d5643e59d0693f2d95)
-rw-r--r-- | src/mongo/transport/service_executor_adaptive.cpp | 12 | ||||
-rw-r--r-- | src/mongo/transport/service_executor_adaptive.h | 2 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/mongo/transport/service_executor_adaptive.cpp b/src/mongo/transport/service_executor_adaptive.cpp index dbc91ed4c5f..daccfc6bc6a 100644 --- a/src/mongo/transport/service_executor_adaptive.cpp +++ b/src/mongo/transport/service_executor_adaptive.cpp @@ -82,7 +82,7 @@ constexpr auto kDeferredTasksQueued = "deferredTasksQueued"_sd; constexpr auto kTotalTimeExecutingUs = "totalTimeExecutingMicros"_sd; constexpr auto kTotalTimeRunningUs = "totalTimeRunningMicros"_sd; constexpr auto kTotalTimeQueuedUs = "totalTimeQueuedMicros"_sd; -constexpr auto kTasksExecuting = "tasksExecuting"_sd; +constexpr auto kThreadsInUse = "threadsInUse"_sd; constexpr auto kThreadsRunning = "threadsRunning"_sd; constexpr auto kThreadsPending = "threadsPending"_sd; constexpr auto kExecutorLabel = "executor"_sd; @@ -198,15 +198,15 @@ Status ServiceExecutorAdaptive::schedule(ServiceExecutorAdaptive::Task task, Sch pendingCounterPtr->subtractAndFetch(1); auto start = _tickSource->getTicks(); _totalSpentQueued.addAndFetch(start - scheduleTime); - _tasksExecuting.addAndFetch(1); if (_localThreadState->recursionDepth++ == 0) { _localThreadState->executing.markRunning(); + _threadsInUse.addAndFetch(1); } const auto guard = MakeGuard([this, start] { - _tasksExecuting.subtractAndFetch(1); if (--_localThreadState->recursionDepth == 0) { _localThreadState->executingCurRun += _localThreadState->executing.markStopped(); + _threadsInUse.subtractAndFetch(1); } _totalExecuted.addAndFetch(1); }); @@ -253,7 +253,7 @@ bool ServiceExecutorAdaptive::_isStarved() const { // The available threads is the number that are running - the number that are currently // executing - auto available = _threadsRunning.load() - _tasksExecuting.load(); + auto available = _threadsRunning.load() - _threadsInUse.load(); return (tasksQueued > available); } @@ -311,7 +311,7 @@ void ServiceExecutorAdaptive::_controllerThreadRoutine() { // In that case we should start the reserve number of threads so fully unblock the // thread pool. // - if ((_tasksExecuting.load() == _threadsRunning.load()) && + if ((_threadsInUse.load() == _threadsRunning.load()) && (sinceLastSchedule >= _config->stuckThreadTimeout())) { log() << "Detected blocked worker threads, " << "starting new reserve threads to unblock service executor"; @@ -540,7 +540,7 @@ void ServiceExecutorAdaptive::appendStats(BSONObjBuilder* bob) const { << kTotalExecuted << _totalExecuted.load() // << kTasksQueued << _tasksQueued.load() // << kDeferredTasksQueued << _deferredTasksQueued.load() // - << kTasksExecuting << _tasksExecuting.load() // + << kThreadsInUse << _threadsInUse.load() // << kTotalTimeRunningUs // << ticksToMicros(_getThreadTimerTotal(ThreadTimer::Running), _tickSource) // << kTotalTimeExecutingUs // diff --git a/src/mongo/transport/service_executor_adaptive.h b/src/mongo/transport/service_executor_adaptive.h index 961c952cbdd..3318924e602 100644 --- a/src/mongo/transport/service_executor_adaptive.h +++ b/src/mongo/transport/service_executor_adaptive.h @@ -199,7 +199,7 @@ private: // These counters are used to detect stuck threads and high task queuing. AtomicWord<int> _threadsRunning{0}; AtomicWord<int> _threadsPending{0}; - AtomicWord<int> _tasksExecuting{0}; + AtomicWord<int> _threadsInUse{0}; AtomicWord<int> _tasksQueued{0}; AtomicWord<int> _deferredTasksQueued{0}; TickTimer _lastScheduleTimer; |