diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-30 11:21:19 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-30 11:21:19 +0000 |
commit | 32065b5a38dcad1a7c30d89509ee9be02ad5373d (patch) | |
tree | 655f0603d2ef4e8d63b8504b7ebf34d700fe7ca5 /fnet | |
parent | 8d4eb868704b3374c937f354f30533b174edb4fe (diff) |
Simplify and use a single events_before_wakup number in the transport thread for controlling wakeup frequency.
Diffstat (limited to 'fnet')
-rw-r--r-- | fnet/src/vespa/fnet/transport.cpp | 2 | ||||
-rw-r--r-- | fnet/src/vespa/fnet/transport.h | 8 | ||||
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.cpp | 16 |
3 files changed, 9 insertions, 17 deletions
diff --git a/fnet/src/vespa/fnet/transport.cpp b/fnet/src/vespa/fnet/transport.cpp index 445eed20ce4..e59186069ce 100644 --- a/fnet/src/vespa/fnet/transport.cpp +++ b/fnet/src/vespa/fnet/transport.cpp @@ -30,7 +30,7 @@ FNET_Transport::FNET_Transport(vespalib::AsyncResolver::SP resolver, vespalib::C _crypto_engine(std::move(crypto)), _work_pool(std::make_unique<vespalib::ThreadStackExecutor>(1, 128 * 1024, fnet_work_pool, 1024)), _threads(), - _optimizeFor(vespalib::Executor::OptimizeFor::LATENCY) + _events_before_wakeup(1) { assert(num_threads >= 1); for (size_t i = 0; i < num_threads; ++i) { diff --git a/fnet/src/vespa/fnet/transport.h b/fnet/src/vespa/fnet/transport.h index 45a2122c9c9..1126f68e69f 100644 --- a/fnet/src/vespa/fnet/transport.h +++ b/fnet/src/vespa/fnet/transport.h @@ -31,7 +31,7 @@ private: vespalib::CryptoEngine::SP _crypto_engine; std::unique_ptr<vespalib::SyncableThreadExecutor> _work_pool; Threads _threads; - vespalib::Executor::OptimizeFor _optimizeFor; + size_t _events_before_wakeup; public: /** @@ -53,9 +53,9 @@ public: : FNET_Transport(vespalib::AsyncResolver::get_shared(), vespalib::CryptoEngine::get_default(), 1) {} ~FNET_Transport(); - vespalib::Executor::OptimizeFor optimizeFor() const { return _optimizeFor; } - void optimizeFor(vespalib::Executor::OptimizeFor optimizeFor_in) { - _optimizeFor = optimizeFor_in; + size_t events_before_wakeup() const { return _events_before_wakeup; } + void events_before_wakeup(size_t events_before_wakeup_in) { + _events_before_wakeup = events_before_wakeup_in; } /** diff --git a/fnet/src/vespa/fnet/transport_thread.cpp b/fnet/src/vespa/fnet/transport_thread.cpp index 82c2353092f..1200d2ad6f9 100644 --- a/fnet/src/vespa/fnet/transport_thread.cpp +++ b/fnet/src/vespa/fnet/transport_thread.cpp @@ -22,8 +22,6 @@ using OptimizeFor = vespalib::Executor::OptimizeFor; namespace { -constexpr size_t WAKEUP_LIMIT_IN_ADAPTIVE_MODE = 100; - struct Sync : public FNET_IExecutable { vespalib::Gate gate; @@ -32,11 +30,6 @@ struct Sync : public FNET_IExecutable } }; -bool needWakeup(vespalib::Executor::OptimizeFor mode, size_t qLen) { - return ((mode == OptimizeFor::LATENCY) && (qLen == 1)) || - ((mode == OptimizeFor::ADAPTIVE) && (qLen == WAKEUP_LIMIT_IN_ADAPTIVE_MODE)); -} - } // namespace<unnamed> void @@ -132,7 +125,7 @@ FNET_TransportThread::PostEvent(FNET_ControlPacket *cpacket, _queue.QueuePacket_NoLock(cpacket, context); qLen = _queue.GetPacketCnt_NoLock(); } - if (needWakeup(_owner.optimizeFor(), qLen)) { + if (qLen == _owner.events_before_wakeup()) { _selector.wakeup(); } return true; @@ -488,11 +481,10 @@ FNET_TransportThread::EventLoopIteration() // sample current time (performed once per event loop iteration) _now = clock::now(); - // handle wakeup and io-events + // handle io-events _selector.dispatch(*this); - if (owner().optimizeFor() != vespalib::Executor::OptimizeFor::LATENCY) { - handle_wakeup(); - } + + handle_wakeup(); // handle IOC time-outs if (_config._iocTimeOut > 0) { |