diff options
author | kruall <kruall@ydb.tech> | 2023-12-22 13:42:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-22 13:42:25 +0300 |
commit | c289f6bb70f494aa875e12396954278764e98578 (patch) | |
tree | ae4311981a74104b61b6ce40e7b6edb5b6673a95 | |
parent | 145901833ba639ef66ed095644a6b81994493c7a (diff) | |
download | ydb-c289f6bb70f494aa875e12396954278764e98578.tar.gz |
add StarvingInRowForNotEnoughCpu for tcp sessions (#625)
Co-authored-by: Aleksandr Kriukov <kruall@ydb.ru>
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 |