aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkruall <kruall@ydb.tech>2023-12-22 13:42:25 +0300
committerGitHub <noreply@github.com>2023-12-22 13:42:25 +0300
commitc289f6bb70f494aa875e12396954278764e98578 (patch)
treeae4311981a74104b61b6ce40e7b6edb5b6673a95
parent145901833ba639ef66ed095644a6b81994493c7a (diff)
downloadydb-c289f6bb70f494aa875e12396954278764e98578.tar.gz
add StarvingInRowForNotEnoughCpu for tcp sessions (#625)
Co-authored-by: Aleksandr Kriukov <kruall@ydb.ru>
-rw-r--r--ydb/library/actors/interconnect/interconnect_tcp_input_session.cpp7
-rw-r--r--ydb/library/actors/interconnect/interconnect_tcp_session.cpp3
-rw-r--r--ydb/library/actors/interconnect/interconnect_tcp_session.h7
3 files changed, 15 insertions, 2 deletions
diff --git a/ydb/library/actors/interconnect/interconnect_tcp_input_session.cpp b/ydb/library/actors/interconnect/interconnect_tcp_input_session.cpp
index a62ccb53c2..3fce38af6f 100644
--- a/ydb/library/actors/interconnect/interconnect_tcp_input_session.cpp
+++ b/ydb/library/actors/interconnect/interconnect_tcp_input_session.cpp
@@ -260,7 +260,12 @@ namespace NActors {
}
}
- SetEnoughCpu(enoughCpu);
+ if (enoughCpu) {
+ SetEnoughCpu(true);
+ StarvingInRow = 0;
+ } else {
+ SetEnoughCpu(++StarvingInRow < StarvingInRowForNotEnoughCpu);
+ }
// calculate ping time
auto it = std::min_element(PingQ.begin(), PingQ.end());
diff --git a/ydb/library/actors/interconnect/interconnect_tcp_session.cpp b/ydb/library/actors/interconnect/interconnect_tcp_session.cpp
index f0f2416536..e1f2bc7351 100644
--- a/ydb/library/actors/interconnect/interconnect_tcp_session.cpp
+++ b/ydb/library/actors/interconnect/interconnect_tcp_session.cpp
@@ -402,9 +402,10 @@ namespace NActors {
if (!canProducePackets && !canWriteData) {
SetEnoughCpu(true); // we do not starve
+ StarvingInRow = 0;
break;
} else if (TimeLimit->CheckExceeded()) {
- SetEnoughCpu(false);
+ SetEnoughCpu(++StarvingInRow < StarvingInRowForNotEnoughCpu);
IssueRam(false);
break;
}
diff --git a/ydb/library/actors/interconnect/interconnect_tcp_session.h b/ydb/library/actors/interconnect/interconnect_tcp_session.h
index 6f40ef4c77..86116fd7db 100644
--- a/ydb/library/actors/interconnect/interconnect_tcp_session.h
+++ b/ydb/library/actors/interconnect/interconnect_tcp_session.h
@@ -33,6 +33,9 @@
#include <unordered_map>
namespace NActors {
+
+ static constexpr ui64 StarvingInRowForNotEnoughCpu = 32;
+
class TSlowPathChecker {
using TTraceCallback = std::function<void(double)>;
TTraceCallback Callback;
@@ -299,6 +302,8 @@ namespace NActors {
std::array<ui32, 16> InputTrafficArray;
THashMap<ui16, ui32> InputTrafficMap;
+ ui64 StarvingInRow = 0;
+
bool CloseInputSessionRequested = false;
void CloseInputSession();
@@ -634,6 +639,8 @@ namespace NActors {
bool StartHandshakeOnSessionClose = false;
ui64 EqualizeCounter = 0;
+
+ ui64 StarvingInRow = 0;
};
class TInterconnectSessionKiller