diff --git a/ydb/library/actors/interconnect/rdma/mem_pool.cpp b/ydb/library/actors/interconnect/rdma/mem_pool.cpp index 96155dfd7f87..e5cbdfc84041 100644 --- a/ydb/library/actors/interconnect/rdma/mem_pool.cpp +++ b/ydb/library/actors/interconnect/rdma/mem_pool.cpp @@ -666,9 +666,4 @@ namespace NInterconnect::NRdma { static TSlotMemPool pool(MakeCounters(counters), settings); return std::shared_ptr(&pool, [](TSlotMemPool*) {}); } - - // Just for UT - std::shared_ptr CreateNonStaticSlotMemPool(TDynamicCounters* counters, std::optional settings) noexcept { - return std::make_shared(MakeCounters(counters), settings); - } } diff --git a/ydb/library/actors/interconnect/rdma/ut/allocator_ut.cpp b/ydb/library/actors/interconnect/rdma/ut/allocator_ut.cpp index 35d4a6bb49ce..a04974946aea 100644 --- a/ydb/library/actors/interconnect/rdma/ut/allocator_ut.cpp +++ b/ydb/library/actors/interconnect/rdma/ut/allocator_ut.cpp @@ -16,14 +16,6 @@ bool IsFastPool(std::shared_ptr memPool) { return memPool->GetName() == "SlotMemPool" || memPool->GetName() == "IncrementalMemPool"; } -namespace NMonitoring { - struct TDynamicCounters; -} - -namespace NInterconnect::NRdma { - std::shared_ptr CreateNonStaticSlotMemPool(NMonitoring::TDynamicCounters* counters, std::optional settings) noexcept; -} - class TAllocatorSuite : public TSkipFixture {}; TEST_F(TAllocatorSuite, AllocMemoryManually) { @@ -379,39 +371,6 @@ TEST_P(WithAllPools, DetachAndDestroySrc) { UNIT_ASSERT_EQUAL(::memcmp(res, "test", 4), 0); } -TEST_F(TAllocatorSuite, SlotPoolLimit) { - const NInterconnect::NRdma::TMemPoolSettings settings { - .SizeLimitMb = 32 - }; - static auto pool = NInterconnect::NRdma::CreateNonStaticSlotMemPool(nullptr, settings); - - const size_t sz = 4 << 20; - std::vector regions; - regions.reserve(8); - size_t i = 0; - for (;;i++) { - auto reg = pool->Alloc(sz, 0); - if (!reg) { - UNIT_ASSERT(i == 8); // 32 / 4 - break; - } - ASSERT_TRUE(reg->GetAddr()) << "invalid address"; - ASSERT_TRUE(reg->GetSize() == sz) << "invalid size of allocated chunk"; - regions.push_back(reg); - } - - regions.erase(regions.begin()); // free one region - - { - auto reg = pool->Alloc(sz, 0); // allocate one - ASSERT_TRUE(reg->GetAddr()) << "invalid address"; - ASSERT_TRUE(reg->GetSize() == sz) << "invalid size of allocated chunk"; - UNIT_ASSERT(!pool->Alloc(sz, 0)); // pool is full - } - - regions.clear(); -} - INSTANTIATE_TEST_SUITE_P( TAllocatorSuite, WithAllPools, diff --git a/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/allocator_ut.cpp b/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/allocator_ut.cpp new file mode 100644 index 000000000000..21d8a6475229 --- /dev/null +++ b/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/allocator_ut.cpp @@ -0,0 +1,57 @@ +#include +#include + +#include +#include + +namespace NMonitoring { + struct TDynamicCounters; +} + +static void GTestSkip() { + GTEST_SKIP() << "Skipping all rdma tests for suit, set \"" + << NRdmaTest::RdmaTestEnvSwitchName << "\" env if it is RDMA compatible"; +} + +class TAllocatorSuite : public ::testing::Test { +protected: + void SetUp() override { + using namespace NRdmaTest; + if (IsRdmaTestDisabled()) { + GTestSkip(); + } + } +}; + +TEST_F(TAllocatorSuite, SlotPoolLimit) { + const NInterconnect::NRdma::TMemPoolSettings settings { + .SizeLimitMb = 32 + }; + static auto pool = NInterconnect::NRdma::CreateSlotMemPool(nullptr, settings); + + const size_t sz = 4 << 20; + std::vector regions; + regions.reserve(8); + size_t i = 0; + for (;;i++) { + auto reg = pool->Alloc(sz, 0); + if (!reg) { + UNIT_ASSERT(i == 8); // 32 / 4 + break; + } + ASSERT_TRUE(reg->GetAddr()) << "invalid address"; + ASSERT_TRUE(reg->GetSize() == sz) << "invalid size of allocated chunk"; + regions.push_back(reg); + } + + regions.erase(regions.begin()); // free one region + + { + auto reg = pool->Alloc(sz, 0); // allocate one + ASSERT_TRUE(reg->GetAddr()) << "invalid address"; + ASSERT_TRUE(reg->GetSize() == sz) << "invalid size of allocated chunk"; + UNIT_ASSERT(!pool->Alloc(sz, 0)); // pool is full + } + + regions.clear(); +} diff --git a/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/ya.make b/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/ya.make new file mode 100644 index 000000000000..40e41e647887 --- /dev/null +++ b/ydb/library/actors/interconnect/rdma/ut_mem_pool_limit/ya.make @@ -0,0 +1,23 @@ +GTEST() + +IF (OS_LINUX AND SANITIZER_TYPE != "memory") + +IF (SANITIZER_TYPE == "thread") + SIZE(LARGE) + TAG(ya:fat) +ELSE() + SIZE(MEDIUM) +ENDIF() + +SRCS( + allocator_ut.cpp +) + +PEERDIR( + ydb/library/actors/interconnect/rdma + ydb/library/actors/interconnect/rdma/ut/utils +) + +ENDIF() + +END() diff --git a/ydb/library/actors/interconnect/rdma/ya.make b/ydb/library/actors/interconnect/rdma/ya.make index 2e6d46e338f5..40f5a86a9bb9 100644 --- a/ydb/library/actors/interconnect/rdma/ya.make +++ b/ydb/library/actors/interconnect/rdma/ya.make @@ -12,8 +12,10 @@ IF (OS_LINUX) PEERDIR( ydb/library/actors/interconnect/address + ydb/library/actors/util contrib/libs/ibdrv contrib/libs/protobuf + library/cpp/monlib/dynamic_counters ) ELSE() @@ -26,7 +28,9 @@ ELSE() PEERDIR( ydb/library/actors/interconnect/address + ydb/library/actors/util contrib/libs/protobuf + library/cpp/monlib/dynamic_counters ) ENDIF() @@ -39,4 +43,5 @@ RECURSE( RECURSE_FOR_TESTS( ut + ut_mem_pool_limit )