diff options
author | kungasc <kungasc@yandex-team.com> | 2023-06-01 13:32:20 +0300 |
---|---|---|
committer | kungasc <kungasc@yandex-team.com> | 2023-06-01 13:32:20 +0300 |
commit | 3192203c5b698d14f82e5ffe551878694a52204d (patch) | |
tree | c971c0f004694a37ec9079905816f3e867de4797 | |
parent | 0a4ac4987ce610b0ba68042fa0db4b4aebe0af59 (diff) | |
download | ydb-3192203c5b698d14f82e5ffe551878694a52204d.tar.gz |
Call evict immideately on new pages
-rw-r--r-- | ydb/core/tablet_flat/flat_sausagecache.cpp | 46 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_sausagecache.h | 21 | ||||
-rw-r--r-- | ydb/core/tablet_flat/flat_sausagecache_ut.cpp | 49 | ||||
-rw-r--r-- | ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt | 1 | ||||
-rw-r--r-- | ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt | 1 | ||||
-rw-r--r-- | ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt | 1 |
7 files changed, 30 insertions, 90 deletions
diff --git a/ydb/core/tablet_flat/flat_sausagecache.cpp b/ydb/core/tablet_flat/flat_sausagecache.cpp index 4d396e8f758..350bfffcd98 100644 --- a/ydb/core/tablet_flat/flat_sausagecache.cpp +++ b/ydb/core/tablet_flat/flat_sausagecache.cpp @@ -42,9 +42,8 @@ TPrivatePageCache::TInfo::TInfo(const TInfo &info) } } -TPrivatePageCache::TPrivatePageCache(const TCacheCacheConfig &cacheConfig, bool prepareForSharedCache) +TPrivatePageCache::TPrivatePageCache(const TCacheCacheConfig &cacheConfig) : Cache(cacheConfig) - , PrepareForSharedCache(prepareForSharedCache) { } @@ -53,13 +52,27 @@ void TPrivatePageCache::RegisterPageCollection(TIntrusivePtr<TInfo> info) { Y_VERIFY(itpair.second, "double registration of page collection is forbidden. logic flaw?"); ++Stats.TotalCollections; - TPage* evicted = nullptr; - for (const auto& kv : info->PageMap) { auto* page = kv.second.Get(); Y_VERIFY_DEBUG(page); if (page->LoadState == TPage::LoadStateLoaded && !page->Sticky) { - evicted = TPage::Join(evicted, Cache.Touch(page)); + auto &x = ToTouchShared[page->Info->Id][page->Id]; + if (!page->SharedPending && !page->SharedBody && page->PinnedBody) { + // We keep pinned body around until it's either + // accepted or dropped by the shared cache + page->SharedPending = true; + x = page->PinnedBody; + } + + if (!page->PinPad) { + page->LoadState = TPage::LoadStateNo; + if (!page->SharedPending && page->PinnedBody) { + page->PinnedBody = { }; + } + page->SharedBody.UnUse(); + } + + Y_VERIFY_DEBUG(!page->IsUnnecessary()); } if (page->SharedBody) Stats.TotalSharedBody += page->Size; @@ -67,12 +80,12 @@ void TPrivatePageCache::RegisterPageCollection(TIntrusivePtr<TInfo> info) { Stats.TotalPinnedBody += page->Size; if (page->PinnedBody && !page->SharedBody) Stats.TotalExclusive += page->Size; + if (page->SharedPending) + Stats.TotalSharedPending += page->Size; if (page->Sticky) Stats.TotalSticky += page->Size; } - Evict(evicted); - ++info->Users; } @@ -419,16 +432,14 @@ void TPrivatePageCache::Evict(TPage *pages) { case TPage::LoadStateRequested: case TPage::LoadStateRequestedAsync: break; - case TPage::LoadStateLoaded: - if (PrepareForSharedCache) { - auto &x = ToTouchShared[page->Info->Id][page->Id]; - if (!page->SharedPending && !page->SharedBody && page->PinnedBody) { - // We keep pinned body around until it's either - // accepted or dropped by the shared cache - Stats.TotalSharedPending += page->Size; - page->SharedPending = true; - x = page->PinnedBody; - } + case TPage::LoadStateLoaded: { + auto &x = ToTouchShared[page->Info->Id][page->Id]; + if (!page->SharedPending && !page->SharedBody && page->PinnedBody) { + // We keep pinned body around until it's either + // accepted or dropped by the shared cache + Stats.TotalSharedPending += page->Size; + page->SharedPending = true; + x = page->PinnedBody; } if (!page->PinPad) { @@ -446,6 +457,7 @@ void TPrivatePageCache::Evict(TPage *pages) { } break; + } default: Y_FAIL("unknown load state"); } diff --git a/ydb/core/tablet_flat/flat_sausagecache.h b/ydb/core/tablet_flat/flat_sausagecache.h index ac040eb0171..4dd2c2895a9 100644 --- a/ydb/core/tablet_flat/flat_sausagecache.h +++ b/ydb/core/tablet_flat/flat_sausagecache.h @@ -104,24 +104,6 @@ public: return { }; } - /** - * Joins two disjoint page lists a and b - */ - static TPage* Join(TPage* a, TPage* b) { - if (a == nullptr) { - return b; - } else if (b == nullptr) { - return a; - } - TPage* aLast = a->Prev()->Node(); - TPage* bLast = b->Prev()->Node(); - aLast->SetNext(b); - b->SetPrev(aLast); - bLast->SetNext(a); - a->SetPrev(bLast); - return a; - } - struct TWeight { static ui64 Get(TPage *x) { return x->Size; @@ -235,7 +217,7 @@ public: }; public: - TPrivatePageCache(const TCacheCacheConfig &cacheConfig, bool prepareForSharedCache = true); + TPrivatePageCache(const TCacheCacheConfig &cacheConfig); void RegisterPageCollection(TIntrusivePtr<TInfo> info); TPage::TWaitQueuePtr ForgetPageCollection(TLogoBlobID id); @@ -276,7 +258,6 @@ private: TStats Stats; TCacheCache<TPage, TPage::TWeight> Cache; - bool PrepareForSharedCache; bool Restore(TPage *page); void Touch(TPage *page); diff --git a/ydb/core/tablet_flat/flat_sausagecache_ut.cpp b/ydb/core/tablet_flat/flat_sausagecache_ut.cpp deleted file mode 100644 index ef443c981e0..00000000000 --- a/ydb/core/tablet_flat/flat_sausagecache_ut.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "flat_sausagecache.h" - -#include <library/cpp/testing/unittest/registar.h> - -namespace NKikimr { -namespace NTabletFlatExecutor { - -Y_UNIT_TEST_SUITE(TPrivatePageCacheTest) { - using TPage = TPrivatePageCache::TPage; - - Y_UNIT_TEST(PageJoinSingle) { - TPage a(123, 1, nullptr); - TPage b(234, 2, nullptr); - TPage* l = TPage::Join(&a, &b); - - UNIT_ASSERT(l == &a); - - UNIT_ASSERT(a.Next()->Node() == &b); - UNIT_ASSERT(b.Next()->Node() == &a); - - UNIT_ASSERT(b.Prev()->Node() == &a); - UNIT_ASSERT(a.Prev()->Node() == &b); - } - - Y_UNIT_TEST(PageJoinMultipleChains) { - TPage a(123, 1, nullptr); - TPage b(234, 2, nullptr); - TPage c(345, 3, nullptr); - TPage d(456, 4, nullptr); - a.LinkBefore(&b); - c.LinkBefore(&d); - TPage* l = TPage::Join(&a, &c); - - UNIT_ASSERT(l == &a); - - UNIT_ASSERT(a.Next()->Node() == &b); - UNIT_ASSERT(b.Next()->Node() == &c); - UNIT_ASSERT(c.Next()->Node() == &d); - UNIT_ASSERT(d.Next()->Node() == &a); - - UNIT_ASSERT(d.Prev()->Node() == &c); - UNIT_ASSERT(c.Prev()->Node() == &b); - UNIT_ASSERT(b.Prev()->Node() == &a); - UNIT_ASSERT(a.Prev()->Node() == &d); - } -} - -} -} diff --git a/ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt b/ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt index 9e78da82476..e76cc7340f0 100644 --- a/ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt @@ -49,7 +49,6 @@ target_sources(ydb-core-tablet_flat-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_executor_leases_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_range_cache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_row_versions_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_sausagecache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_table_part_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut/flat_test_db.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/shared_handle_ut.cpp diff --git a/ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt b/ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt index ea6afe8e315..232fb00f893 100644 --- a/ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt +++ b/ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt @@ -52,7 +52,6 @@ target_sources(ydb-core-tablet_flat-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_executor_leases_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_range_cache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_row_versions_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_sausagecache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_table_part_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut/flat_test_db.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/shared_handle_ut.cpp diff --git a/ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt b/ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt index 1541c9280ce..4f9b399a405 100644 --- a/ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt +++ b/ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt @@ -53,7 +53,6 @@ target_sources(ydb-core-tablet_flat-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_executor_leases_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_range_cache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_row_versions_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_sausagecache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_table_part_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut/flat_test_db.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/shared_handle_ut.cpp diff --git a/ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt b/ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt index 91d860e059b..716aa62ec4f 100644 --- a/ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt +++ b/ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt @@ -42,7 +42,6 @@ target_sources(ydb-core-tablet_flat-ut PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_executor_leases_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_range_cache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_row_versions_ut.cpp - ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_sausagecache_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/flat_table_part_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/ut/flat_test_db.cpp ${CMAKE_SOURCE_DIR}/ydb/core/tablet_flat/shared_handle_ut.cpp |