aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkungasc <kungasc@yandex-team.com>2023-06-01 13:32:20 +0300
committerkungasc <kungasc@yandex-team.com>2023-06-01 13:32:20 +0300
commit3192203c5b698d14f82e5ffe551878694a52204d (patch)
treec971c0f004694a37ec9079905816f3e867de4797
parent0a4ac4987ce610b0ba68042fa0db4b4aebe0af59 (diff)
downloadydb-3192203c5b698d14f82e5ffe551878694a52204d.tar.gz
Call evict immideately on new pages
-rw-r--r--ydb/core/tablet_flat/flat_sausagecache.cpp46
-rw-r--r--ydb/core/tablet_flat/flat_sausagecache.h21
-rw-r--r--ydb/core/tablet_flat/flat_sausagecache_ut.cpp49
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.windows-x86_64.txt1
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