diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-29 12:29:40 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-11-29 21:48:12 +0000 |
commit | 8d4eb868704b3374c937f354f30533b174edb4fe (patch) | |
tree | dbfed24accc13fb53e9b05576a3c04a9d2534456 /fnet | |
parent | 12275ab8fb1f83935ba2a4ab2f7a72bd262cbcf3 (diff) |
In ADAPTIVE mode a wakeup will be done with 100 packets ready for write.
Diffstat (limited to 'fnet')
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/fnet/src/vespa/fnet/transport_thread.cpp b/fnet/src/vespa/fnet/transport_thread.cpp index 2064554392c..82c2353092f 100644 --- a/fnet/src/vespa/fnet/transport_thread.cpp +++ b/fnet/src/vespa/fnet/transport_thread.cpp @@ -18,9 +18,12 @@ LOG_SETUP(".fnet"); using vespalib::ServerSocket; using vespalib::SocketHandle; using vespalib::SocketSpec; +using OptimizeFor = vespalib::Executor::OptimizeFor; namespace { +constexpr size_t WAKEUP_LIMIT_IN_ADAPTIVE_MODE = 100; + struct Sync : public FNET_IExecutable { vespalib::Gate gate; @@ -29,6 +32,11 @@ 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 @@ -113,7 +121,7 @@ bool FNET_TransportThread::PostEvent(FNET_ControlPacket *cpacket, FNET_Context context) { - bool wasEmpty; + size_t qLen; { std::unique_lock<std::mutex> guard(_lock); if (IsShutDown()) { @@ -121,10 +129,10 @@ FNET_TransportThread::PostEvent(FNET_ControlPacket *cpacket, SafeDiscardEvent(cpacket, context); return false; } - wasEmpty = _queue.IsEmpty_NoLock() && _owner.optimizeFor() == vespalib::Executor::OptimizeFor::LATENCY; _queue.QueuePacket_NoLock(cpacket, context); + qLen = _queue.GetPacketCnt_NoLock(); } - if (wasEmpty) { + if (needWakeup(_owner.optimizeFor(), qLen)) { _selector.wakeup(); } return true; |