Skip to content

Commit 449031c

Browse files
authored
SharedCache: refactor page counters and persist PageCollection pointer (#26461)
1 parent 7234c5c commit 449031c

File tree

2 files changed

+33
-36
lines changed

2 files changed

+33
-36
lines changed

ydb/core/tablet_flat/shared_sausagecache.cpp

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ using TPendingRequests = THashMap<TIntrusivePtr<TRequest>, ui32>;
5454

5555
struct TCollection {
5656
TLogoBlobID Id;
57-
TSet<TActorId> InMemoryOwners;
57+
TMap<TActorId, TIntrusiveConstPtr<NPageCollection::IPageCollection>> InMemoryOwners;
5858
TSet<TActorId> Owners;
5959
TPageMap<TIntrusivePtr<TPage>> PageMap;
6060
ui64 TotalSize;
@@ -765,8 +765,8 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
765765
}
766766

767767
if (loadedPages) {
768-
for (const auto& owner : collection->InMemoryOwners) {
769-
NotifyOwners(msg->PageCollection, loadedPages, owner);
768+
for (const auto& [owner, pageCollection] : collection->InMemoryOwners) {
769+
NotifyOwners(pageCollection, loadedPages, owner);
770770
}
771771
}
772772
}
@@ -1101,7 +1101,7 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
11011101
}
11021102

11031103
void TryMoveToTryKeepInMemoryCache(TCollection& collection, TIntrusiveConstPtr<NPageCollection::IPageCollection> pageCollection, const TActorId& owner) {
1104-
if (!collection.InMemoryOwners.insert(owner).second) {
1104+
if (!collection.InMemoryOwners.emplace(owner, pageCollection).second) {
11051105
return;
11061106
}
11071107

@@ -1175,15 +1175,9 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
11751175
case PageStateLoaded:
11761176
Cache.Erase(page);
11771177
page->EnsureNoCacheFlags();
1178+
RemoveActivePage(page);
11781179
page->CacheMode = targetMode;
1179-
switch (page->CacheMode) {
1180-
case ECacheMode::Regular:
1181-
Counters.ActiveInMemoryBytes->Sub(TPageTraits::GetSize(page));
1182-
break;
1183-
case ECacheMode::TryKeepInMemory:
1184-
Counters.ActiveInMemoryBytes->Add(TPageTraits::GetSize(page));
1185-
break;
1186-
}
1180+
AddActivePage(page);
11871181
Evict(Cache.Insert(page));
11881182
break;
11891183
default:
@@ -1256,48 +1250,54 @@ class TSharedPageCache : public TActorBootstrapped<TSharedPageCache> {
12561250
}
12571251

12581252
inline void AddActivePage(const TPage* page) {
1259-
StatActiveBytes += sizeof(TPage) + page->Size;
1253+
auto pageSize = TPageTraits::GetSize(page);
1254+
StatActiveBytes += pageSize;
12601255
Counters.ActivePages->Inc();
1261-
Counters.ActiveBytes->Add(sizeof(TPage) + page->Size);
1256+
Counters.ActiveBytes->Add(pageSize);
12621257
if (page->CacheMode == ECacheMode::TryKeepInMemory) {
1263-
Counters.ActiveInMemoryBytes->Add(sizeof(TPage) + page->Size);
1258+
Counters.ActiveInMemoryBytes->Add(pageSize);
12641259
}
12651260
}
12661261

12671262
inline void RemoveActivePage(const TPage* page) {
1268-
Y_DEBUG_ABORT_UNLESS(StatActiveBytes >= sizeof(TPage) + page->Size);
1269-
StatActiveBytes -= sizeof(TPage) + page->Size;
1263+
auto pageSize = TPageTraits::GetSize(page);
1264+
Y_DEBUG_ABORT_UNLESS(StatActiveBytes >= pageSize);
1265+
StatActiveBytes -= pageSize;
12701266
Counters.ActivePages->Dec();
1271-
Counters.ActiveBytes->Sub(sizeof(TPage) + page->Size);
1267+
Counters.ActiveBytes->Sub(pageSize);
12721268
if (page->CacheMode == ECacheMode::TryKeepInMemory) {
1273-
Counters.ActiveInMemoryBytes->Sub(sizeof(TPage) + page->Size);
1269+
Counters.ActiveInMemoryBytes->Sub(pageSize);
12741270
}
12751271
}
12761272

12771273
inline void AddPassivePage(const TPage* page) {
1278-
StatPassiveBytes += sizeof(TPage) + page->Size;
1274+
auto pageSize = TPageTraits::GetSize(page);
1275+
StatPassiveBytes += pageSize;
12791276
Counters.PassivePages->Inc();
1280-
Counters.PassiveBytes->Add(sizeof(TPage) + page->Size);
1277+
Counters.PassiveBytes->Add(pageSize);
12811278
}
12821279

12831280
inline void RemovePassivePage(const TPage* page) {
1284-
Y_DEBUG_ABORT_UNLESS(StatPassiveBytes >= sizeof(TPage) + page->Size);
1285-
StatPassiveBytes -= sizeof(TPage) + page->Size;
1281+
auto pageSize = TPageTraits::GetSize(page);
1282+
Y_DEBUG_ABORT_UNLESS(StatPassiveBytes >= pageSize);
1283+
StatPassiveBytes -= pageSize;
12861284
Counters.PassivePages->Dec();
1287-
Counters.PassiveBytes->Sub(sizeof(TPage) + page->Size);
1285+
Counters.PassiveBytes->Sub(pageSize);
12881286
}
12891287

12901288
inline void AddInFlyPages(ui64 count, ui64 size) {
1291-
StatLoadInFlyBytes += size;
1289+
ui64 totalBytes = size + sizeof(TPage) * count;
1290+
StatLoadInFlyBytes += totalBytes;
12921291
Counters.LoadInFlyPages->Add(count);
1293-
Counters.LoadInFlyBytes->Add(size);
1292+
Counters.LoadInFlyBytes->Add(totalBytes);
12941293
}
12951294

12961295
inline void RemoveInFlyPages(ui64 count, ui64 size) {
1297-
Y_ENSURE(StatLoadInFlyBytes >= size);
1298-
StatLoadInFlyBytes -= size;
1296+
ui64 totalBytes = size + sizeof(TPage) * count;
1297+
Y_ENSURE(StatLoadInFlyBytes >= totalBytes);
1298+
StatLoadInFlyBytes -= totalBytes;
12991299
Counters.LoadInFlyPages->Sub(count);
1300-
Counters.LoadInFlyBytes->Sub(size);
1300+
Counters.LoadInFlyBytes->Sub(totalBytes);
13011301
}
13021302

13031303
public:

ydb/core/tablet_flat/ut/ut_shared_sausagecache_actor.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1841,22 +1841,19 @@ Y_UNIT_TEST_SUITE(TSharedPageCache_Actor) {
18411841
});
18421842
sharedCache.Provide(sharedCache.Collection2, {0, 1, 2, 3}, TRY_KEEP_IN_MEMORY_PRELOAD_COOKIE);
18431843
sharedCache.CheckResults({
1844-
TFetch{0, sharedCache.Collection2, {2, 3}}
1844+
TFetch{0, sharedCache.Collection2, {0, 1, 2, 3}}
18451845
});
18461846

18471847
// collection#1 pages has reads and prioritized, read collection#2 again to evict their pages
18481848
sharedCache.Request(sharedCache.Sender1, sharedCache.Collection2, {0, 1, 2, 3});
1849-
sharedCache.CheckFetches({
1850-
TFetch{20, sharedCache.Collection2, {0, 1}}
1851-
});
1852-
sharedCache.Provide(sharedCache.Collection2, {0, 1});
1849+
sharedCache.CheckFetches({});
18531850
sharedCache.CheckResults({
18541851
TFetch{fetchNo++, sharedCache.Collection2, {0, 1, 2, 3}}
18551852
});
18561853
sharedCache.Wakeup();
18571854

1858-
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->CacheHitPages->Val(), cacheHits += 2);
1859-
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->CacheMissPages->Val(), cacheMisses += 2);
1855+
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->CacheHitPages->Val(), cacheHits += 4);
1856+
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->CacheMissPages->Val(), cacheMisses);
18601857
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->ActivePages->Val(), 0);
18611858
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->PassivePages->Val(), 2);
18621859
UNIT_ASSERT_VALUES_EQUAL(sharedCache.Counters->TargetInMemoryBytes->Val(), collection1TotalSize + collection2TotalSize);

0 commit comments

Comments
 (0)