From c289f6bb70f494aa875e12396954278764e98578 Mon Sep 17 00:00:00 2001 From: kruall Date: Fri, 22 Dec 2023 13:42:25 +0300 Subject: [PATCH] add StarvingInRowForNotEnoughCpu for tcp sessions (#625) Co-authored-by: Aleksandr Kriukov --- .../actors/interconnect/interconnect_tcp_input_session.cpp | 7 ++++++- .../actors/interconnect/interconnect_tcp_session.cpp | 3 ++- ydb/library/actors/interconnect/interconnect_tcp_session.h | 7 +++++++ 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 a62ccb53c241..3fce38af6f99 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 f0f241653655..e1f2bc735130 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 6f40ef4c77a9..86116fd7db54 100644 --- a/ydb/library/actors/interconnect/interconnect_tcp_session.h +++ b/ydb/library/actors/interconnect/interconnect_tcp_session.h @@ -33,6 +33,9 @@ #include namespace NActors { + + static constexpr ui64 StarvingInRowForNotEnoughCpu = 32; + class TSlowPathChecker { using TTraceCallback = std::function; TTraceCallback Callback; @@ -299,6 +302,8 @@ namespace NActors { std::array InputTrafficArray; THashMap 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