[compiler-rt] [scudo] Add fragmentation info for each memory group (PR #107475)
Christopher Ferris via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 5 18:08:26 PDT 2024
================
@@ -1193,6 +1205,51 @@ template <typename Config> class SizeClassAllocator64 {
AllocatedPagesCount, InUseBytes >> 10, Integral, Fractional);
}
+ void getMemoryGroupFragmentationInfoInRegion(RegionInfo *Region, uptr ClassId,
+ ScopedString *Str)
+ REQUIRES(Region->MMLock) {
+ const uptr BlockSize = getSizeByClassId(ClassId);
+ const uptr AllocatedUserEnd =
+ Region->MemMapInfo.AllocatedUser + Region->RegionBeg;
+
+ SinglyLinkedList<BatchGroupT> GroupsToRelease;
+ {
+ ScopedLock L(Region->FLLock);
+ GroupsToRelease = Region->FreeListInfo.BlockList;
+ Region->FreeListInfo.BlockList.clear();
+ }
+
+ constexpr uptr GroupSize = (1UL << GroupSizeLog);
+ constexpr uptr MaxNumGroups = RegionSize / GroupSize;
+
+ MemoryGroupFragmentationRecorder<GroupSize, MaxNumGroups> Recorder;
+ if (!GroupsToRelease.empty()) {
+ PageReleaseContext Context =
+ markFreeBlocks(Region, BlockSize, AllocatedUserEnd,
+ getCompactPtrBaseByClassId(ClassId), GroupsToRelease);
+ auto SkipRegion = [](UNUSED uptr RegionIndex) { return false; };
+ releaseFreeMemoryToOS(Context, Recorder, SkipRegion);
+
+ mergeGroupsToReleaseBack(Region, GroupsToRelease);
+ }
+
+ Str->append("MemoryGroupFragmentationInfo in Region %zu (%zu)\n", ClassId,
+ BlockSize);
+
+ const uptr MaxNumGroupsInUse =
+ roundUp(Region->MemMapInfo.AllocatedUser, GroupSize) / GroupSize;
+ for (uptr I = 0; I < MaxNumGroupsInUse; ++I) {
+
----------------
cferris1000 wrote:
Super small nit, I think you can delete this blank line.
https://github.com/llvm/llvm-project/pull/107475
More information about the llvm-commits
mailing list