summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Reams <jbreams@mongodb.com>2017-11-15 11:39:10 -0500
committerJonathan Reams <jbreams@mongodb.com>2017-11-16 13:36:05 -0500
commit3decf4e1f669e70a1aa888305974411d453e277a (patch)
treed5fe942b8929c5bb849c7bbc4645d27cdb84574e
parente82f61c0ea6678520f7731857c20051ad6c99ce4 (diff)
downloadmongo-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.cpp12
-rw-r--r--src/mongo/transport/service_executor_adaptive.h2
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;