From 32065b5a38dcad1a7c30d89509ee9be02ad5373d Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 30 Nov 2020 11:21:19 +0000 Subject: Simplify and use a single events_before_wakup number in the transport thread for controlling wakeup frequency. --- fnet/src/vespa/fnet/transport.cpp | 2 +- fnet/src/vespa/fnet/transport.h | 8 ++++---- fnet/src/vespa/fnet/transport_thread.cpp | 16 ++++------------ 3 files changed, 9 insertions(+), 17 deletions(-) (limited to 'fnet/src') 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(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 _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 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) { -- cgit v1.2.3