Skip to content

Commit f799985

Browse files
authored
Shared Cache: remove ECacheTier::None (#20607)
1 parent ca39c1d commit f799985

9 files changed

+240
-451
lines changed

ydb/core/tablet_flat/shared_cache_counters.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,4 @@ TSharedPageCacheCounters::TCounterPtr TSharedPageCacheCounters::ReplacementPolic
3939
return Counters->GetCounter(TStringBuilder() << "ReplacementPolicySize/" << policy);
4040
}
4141

42-
TSharedPageCacheCounters::TCounterPtr TSharedPageCacheCounters::ActivePagesTier(ECacheTier tier) {
43-
return Counters->GetCounter(TStringBuilder() << "Tier" << tier << "ActivePages");
44-
}
45-
46-
TSharedPageCacheCounters::TCounterPtr TSharedPageCacheCounters::ActiveBytesTier(ECacheTier tier) {
47-
return Counters->GetCounter(TStringBuilder() << "Tier" << tier << "ActiveBytes");
48-
}
49-
50-
TSharedPageCacheCounters::TCounterPtr TSharedPageCacheCounters::LimitBytesTier(ECacheTier tier) {
51-
return Counters->GetCounter(TStringBuilder() << "Tier" << tier << "LimitBytes");
52-
}
53-
5442
} // namespace NKikimr::NSharedCache

ydb/core/tablet_flat/shared_cache_counters.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#pragma once
22

3-
#include "shared_cache_tiers.h"
43
#include <ydb/core/protos/shared_cache.pb.h>
54
#include <ydb/core/util/cache_cache.h>
65

@@ -48,10 +47,6 @@ struct TSharedPageCacheCounters final : public TAtomicRefCount<TSharedPageCacheC
4847
explicit TSharedPageCacheCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
4948

5049
TCounterPtr ReplacementPolicySize(TReplacementPolicy policy);
51-
52-
TCounterPtr ActivePagesTier(ECacheTier tier);
53-
TCounterPtr ActiveBytesTier(ECacheTier tier);
54-
TCounterPtr LimitBytesTier(ECacheTier tier);
5550
};
5651

5752
} // namespace NKikimr::NSharedCache

ydb/core/tablet_flat/shared_cache_tiered.h

Lines changed: 8 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -10,115 +10,20 @@ namespace NKikimr::NSharedCache {
1010
class TTieredCache {
1111
using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
1212
using TReplacementPolicy = NKikimrSharedCache::TReplacementPolicy;
13-
14-
class TCacheTier {
15-
public:
16-
template <typename TCacheBuilder>
17-
TCacheTier(ui64 limit, TCacheBuilder createCache, ECacheTier tier, TReplacementPolicy policy, TSharedPageCacheCounters& cacheCounters)
18-
: Cache(TSwitchableCache<TPage, TPageTraits>(limit, createCache(), cacheCounters.ReplacementPolicySize(policy)))
19-
, Tier(tier)
20-
, ActivePagesCounter(cacheCounters.ActivePagesTier(tier))
21-
, ActiveBytesCounter(cacheCounters.ActiveBytesTier(tier))
22-
, LimitBytesCounter(cacheCounters.LimitBytesTier(tier))
23-
{
24-
LimitBytesCounter->Set(limit);
25-
}
26-
27-
TIntrusiveList<TPage> Switch(THolder<ICacheCache<TPage>>&& cache, TCounterPtr sizeCounter) Y_WARN_UNUSED_RESULT {
28-
return ProcessEvicted(Cache.Switch(std::move(cache), std::move(sizeCounter)));
29-
}
30-
31-
TIntrusiveList<TPage> EvictNext() Y_WARN_UNUSED_RESULT {
32-
return ProcessEvicted(Cache.EvictNext());
33-
}
34-
35-
TIntrusiveList<TPage> Touch(TPage *page) Y_WARN_UNUSED_RESULT {
36-
ECacheTier tier = TPageTraits::GetTier(page);
37-
if (tier == ECacheTier::None) {
38-
tier = Tier;
39-
TPageTraits::SetTier(page, tier);
40-
ActivePagesCounter->Inc();
41-
ActiveBytesCounter->Add(TPageTraits::GetSize(page));
42-
}
43-
return ProcessEvicted(Cache.Touch(page));
44-
}
45-
46-
void Erase(TPage *page) {
47-
ActivePagesCounter->Dec();
48-
ActiveBytesCounter->Sub(TPageTraits::GetSize(page));
49-
TPageTraits::SetTier(page, ECacheTier::None);
50-
Cache.Erase(page);
51-
}
52-
53-
void UpdateLimit(ui64 limit) {
54-
Cache.UpdateLimit(limit);
55-
LimitBytesCounter->Set(limit);
56-
}
57-
58-
ui64 GetSize() const {
59-
return Cache.GetSize();
60-
}
61-
62-
TString Dump() const {
63-
return TStringBuilder() << Tier << "Tier: " << Cache.Dump();
64-
}
65-
66-
private:
67-
68-
TIntrusiveList<TPage> ProcessEvicted(TIntrusiveList<TPage>&& evictedList) Y_WARN_UNUSED_RESULT {
69-
if (evictedList.Empty()) {
70-
return evictedList;
71-
}
72-
73-
ui64 evictedPages = 0;
74-
ui64 evictedSize = 0;
75-
76-
for (auto& page_ : evictedList) {
77-
TPage* page = &page_;
78-
TPageTraits::SetTier(page, ECacheTier::None);
79-
++evictedPages;
80-
evictedSize += TPageTraits::GetSize(page);
81-
}
82-
83-
ActivePagesCounter->Sub(evictedPages);
84-
ActiveBytesCounter->Sub(evictedSize);
85-
86-
return evictedList;
87-
}
88-
89-
private:
90-
TSwitchableCache<TPage, TPageTraits> Cache;
91-
ECacheTier Tier;
92-
TCounterPtr ActivePagesCounter;
93-
TCounterPtr ActiveBytesCounter;
94-
TCounterPtr LimitBytesCounter;
95-
};
13+
using TCache = TSwitchableCache<TPage, TPageTraits>;
9614

9715
public:
9816
template <typename TCacheBuilder>
9917
TTieredCache(ui64 limit, TCacheBuilder createCache, TReplacementPolicy policy, TSharedPageCacheCounters& cacheCounters)
10018
: CacheTiers(::Reserve(2))
10119
{
102-
CacheTiers.emplace_back(limit, createCache, ECacheTier::Regular, policy, cacheCounters);
20+
CacheTiers.emplace_back(limit, createCache(), cacheCounters.ReplacementPolicySize(policy));
10321
RegularTier = &CacheTiers.back();
10422

105-
CacheTiers.emplace_back(0, createCache, ECacheTier::TryKeepInMemory, policy, cacheCounters);
23+
CacheTiers.emplace_back(0, createCache(), cacheCounters.ReplacementPolicySize(policy));
10624
TryInMemoryTier = &CacheTiers.back();
10725
}
10826

109-
TIntrusiveList<TPage> TryMove(TPage *page, ECacheTier targetTier) Y_WARN_UNUSED_RESULT {
110-
ECacheTier sourceTier = TPageTraits::GetTier(page);
111-
Y_ENSURE(targetTier != ECacheTier::None);
112-
113-
if (sourceTier == ECacheTier::None || sourceTier == targetTier) {
114-
// nothing to move
115-
return {};
116-
}
117-
118-
CacheTiers[static_cast<size_t>(sourceTier)].Erase(page);
119-
return CacheTiers[static_cast<size_t>(targetTier)].Touch(page);
120-
}
121-
12227
template <typename TCacheBuilder>
12328
TIntrusiveList<TPage> Switch(TCacheBuilder createCache, TCounterPtr sizeCounter) Y_WARN_UNUSED_RESULT {
12429
TIntrusiveList<TPage> evictedList;
@@ -140,29 +45,11 @@ namespace NKikimr::NSharedCache {
14045

14146
TIntrusiveList<TPage> Touch(TPage *page) Y_WARN_UNUSED_RESULT {
14247
ECacheTier tier = TPageTraits::GetTier(page);
143-
if (tier == ECacheTier::None) {
144-
return RegularTier->Touch(page);
145-
}
14648
return CacheTiers[static_cast<size_t>(tier)].Touch(page);
14749
}
14850

149-
TIntrusiveList<TPage> MoveTouch(TPage *page, ECacheTier targetTier) Y_WARN_UNUSED_RESULT {
150-
ECacheTier sourceTier = TPageTraits::GetTier(page);
151-
Y_ENSURE(targetTier != ECacheTier::None);
152-
153-
if (sourceTier != ECacheTier::None && sourceTier != targetTier) {
154-
CacheTiers[static_cast<size_t>(sourceTier)].Erase(page);
155-
}
156-
157-
return CacheTiers[static_cast<size_t>(targetTier)].Touch(page);
158-
}
159-
16051
void Erase(TPage *page) {
16152
ECacheTier tier = TPageTraits::GetTier(page);
162-
if (tier == ECacheTier::None) {
163-
return;
164-
}
165-
16653
CacheTiers[static_cast<size_t>(tier)].Erase(page);
16754
}
16855

@@ -184,22 +71,22 @@ namespace NKikimr::NSharedCache {
18471
TStringBuilder result;
18572
bool first = true;
18673

187-
for (const auto& cacheTier : CacheTiers) {
74+
for (size_t i = 0; i < CacheTiers.size(); ++i) {
18875
if (first) {
18976
first = false;
19077
} else {
19178
result << "; ";
19279
}
193-
result << cacheTier.Dump();
80+
result << static_cast<ECacheTier>(i) << "Tier: " << CacheTiers[i].Dump();
19481
}
19582

19683
return result;
19784
}
19885

19986
private:
200-
TVector<TCacheTier> CacheTiers;
201-
TCacheTier* RegularTier;
202-
TCacheTier* TryInMemoryTier;
87+
TVector<TCache> CacheTiers;
88+
TCache* RegularTier;
89+
TCache* TryInMemoryTier;
20390
};
20491

20592
} // namespace NKikimr::NSharedCache

0 commit comments

Comments
 (0)