Skip to content

Commit 1c0e968

Browse files
committed
[scudo] Add last release time info to getStats
Knowing when the last page release happened can help us figure out if the page release is skipped or not.
1 parent 024dd56 commit 1c0e968

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

compiler-rt/lib/scudo/standalone/primary64.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1146,17 +1146,27 @@ void SizeClassAllocator64<Config>::getStats(ScopedString *Str, uptr ClassId,
11461146
BytesInFreeList - Region->ReleaseInfo.BytesInFreeListAtLastCheckpoint;
11471147
}
11481148
const uptr TotalChunks = Region->MemMapInfo.AllocatedUser / BlockSize;
1149+
const s32 IntervalMs = atomic_load_relaxed(&ReleaseToOsIntervalMs);
1150+
const u64 IntervalNs = static_cast<u64>(IntervalMs) * 1000000;
1151+
const u64 CurTimeNs = getMonotonicTime();
1152+
const u64 DiffSinceLastReleaseNs =
1153+
CurTimeNs - Region->ReleaseInfo.LastReleaseAtNs;
1154+
11491155
Str->append(
11501156
"%s %02zu (%6zu): mapped: %6zuK popped: %7zu pushed: %7zu "
11511157
"inuse: %6zu total: %6zu releases attempted: %6zu last "
11521158
"released: %6zuK latest pushed bytes: %6zuK region: 0x%zx "
1153-
"(0x%zx)\n",
1159+
"(0x%zx) ",
11541160
Region->Exhausted ? "E" : " ", ClassId, getSizeByClassId(ClassId),
11551161
Region->MemMapInfo.MappedUser >> 10, Region->FreeListInfo.PoppedBlocks,
11561162
Region->FreeListInfo.PushedBlocks, InUseBlocks, TotalChunks,
11571163
Region->ReleaseInfo.NumReleasesAttempted,
11581164
Region->ReleaseInfo.LastReleasedBytes >> 10, RegionPushedBytesDelta >> 10,
11591165
Region->RegionBeg, getRegionBaseByClassId(ClassId));
1166+
if (DiffSinceLastReleaseNs > IntervalNs)
1167+
Str->append("Last page release > ReleaseToOsInterval\n");
1168+
else
1169+
Str->append("Last page release <= ReleaseToOsInterval\n");
11601170
}
11611171

11621172
template <typename Config>

0 commit comments

Comments
 (0)