aboutsummaryrefslogtreecommitdiffstats
path: root/fnet
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-11-30 11:21:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-11-30 11:21:19 +0000
commit32065b5a38dcad1a7c30d89509ee9be02ad5373d (patch)
tree655f0603d2ef4e8d63b8504b7ebf34d700fe7ca5 /fnet
parent8d4eb868704b3374c937f354f30533b174edb4fe (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.cpp2
-rw-r--r--fnet/src/vespa/fnet/transport.h8
-rw-r--r--fnet/src/vespa/fnet/transport_thread.cpp16
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) {