@@ -54,7 +54,7 @@ using TPendingRequests = THashMap<TIntrusivePtr<TRequest>, ui32>;
5454
5555struct 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
13031303public:
0 commit comments