diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-12-06 19:03:52 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-12-06 19:03:52 +0000 |
commit | 807a830319653ca32df389fdc61949dd3be922db (patch) | |
tree | 301c15168c303852b5cba097ed0f90c1e515d07d /staging_vespalib | |
parent | 7f71eddb09917cf59091236c7f1b0701c038d5f1 (diff) |
Compute watermarkRatio once
Diffstat (limited to 'staging_vespalib')
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/util/singleexecutor.cpp | 8 | ||||
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/util/singleexecutor.h | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/util/singleexecutor.cpp b/staging_vespalib/src/vespa/vespalib/util/singleexecutor.cpp index ff46f58cb84..99791c36a9e 100644 --- a/staging_vespalib/src/vespa/vespalib/util/singleexecutor.cpp +++ b/staging_vespalib/src/vespa/vespalib/util/singleexecutor.cpp @@ -11,7 +11,8 @@ SingleExecutor::SingleExecutor(init_fun_t func, uint32_t taskLimit) { } SingleExecutor::SingleExecutor(init_fun_t func, uint32_t taskLimit, uint32_t watermark, duration reactionTime) - : _taskLimit(vespalib::roundUp2inN(taskLimit)), + : _watermarkRatio(watermark < taskLimit ? double(watermark) / taskLimit : 1.0), + _taskLimit(vespalib::roundUp2inN(taskLimit)), _wantedTaskLimit(_taskLimit.load()), _rp(0), _tasks(std::make_unique<Task::UP[]>(_taskLimit)), @@ -27,7 +28,7 @@ SingleExecutor::SingleExecutor(init_fun_t func, uint32_t taskLimit, uint32_t wat _wakeupConsumerAt(0), _producerNeedWakeupAt(0), _wp(0), - _watermark(std::min(_taskLimit.load(), (watermark*_taskLimit)/taskLimit)), + _watermark(_taskLimit.load()*_watermarkRatio), _reactionTime(reactionTime), _closed(false) { @@ -158,9 +159,8 @@ SingleExecutor::wait_for_room(Lock & lock) { if (taskLimit != _wantedTaskLimit.load(std::memory_order_relaxed)) { drain(lock); _tasks = std::make_unique<Task::UP[]>(_wantedTaskLimit); - double waterMarkRatio = double(get_watermark()) / _taskLimit.load(std::memory_order_relaxed); _taskLimit = _wantedTaskLimit.load(); - _watermark = _taskLimit * waterMarkRatio; + _watermark = _taskLimit * _watermarkRatio; } _queueSize.add(numTasks()); while (numTasks() >= _taskLimit.load(std::memory_order_relaxed)) { diff --git a/staging_vespalib/src/vespa/vespalib/util/singleexecutor.h b/staging_vespalib/src/vespa/vespalib/util/singleexecutor.h index 9bc2f3ca837..e76e3f17a41 100644 --- a/staging_vespalib/src/vespa/vespalib/util/singleexecutor.h +++ b/staging_vespalib/src/vespa/vespalib/util/singleexecutor.h @@ -47,6 +47,7 @@ private: uint64_t numTasks() const { return _wp.load(std::memory_order_relaxed) - _rp.load(std::memory_order_acquire); } + const double _watermarkRatio; std::atomic<uint32_t> _taskLimit; std::atomic<uint32_t> _wantedTaskLimit; std::atomic<uint64_t> _rp; |