[compiler-rt] 885cb59 - [scudo] Release to OS if a large amount of memory is deallocated. (#160621)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 25 12:29:40 PDT 2025
Author: Christopher Ferris
Date: 2025-09-25T12:29:35-07:00
New Revision: 885cb59315f974b261945686177cfa23833793bd
URL: https://github.com/llvm/llvm-project/commit/885cb59315f974b261945686177cfa23833793bd
DIFF: https://github.com/llvm/llvm-project/commit/885cb59315f974b261945686177cfa23833793bd.diff
LOG: [scudo] Release to OS if a large amount of memory is deallocated. (#160621)
Before this change, if large amounts of memory are deallocated within a
release interval, the release is put off until the release interval
occurs. Unfortunately, for larger class sizes, this could mean that a
lot of this memory accumulates and is never released since no more
deallocations occur in that size class.
To fix this, if `RegionPushedBytesDelta` grows larger than a group size,
immediately do a release.
This work was originally done by ChiaHungDuan.
Added:
Modified:
compiler-rt/lib/scudo/standalone/primary64.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h
index d08103008ef7c..747b1a2233d32 100644
--- a/compiler-rt/lib/scudo/standalone/primary64.h
+++ b/compiler-rt/lib/scudo/standalone/primary64.h
@@ -1565,6 +1565,13 @@ bool SizeClassAllocator64<Config>::hasChanceToReleasePages(
if (DiffSinceLastReleaseNs < 2 * IntervalNs)
return false;
} else if (DiffSinceLastReleaseNs < IntervalNs) {
+ // `TryReleaseThreshold` is capped by (1UL << GroupSizeLog) / 2). If
+ // RegionPushedBytesDelta grows to twice the threshold, it implies some
+ // huge deallocations have happened so we better try to release some
+ // pages. Note this tends to happen for larger block sizes.
+ if (RegionPushedBytesDelta > (1ULL << GroupSizeLog))
+ return true;
+
// In this case, we are over the threshold but we just did some page
// release in the same release interval. This is a hint that we may want
// a higher threshold so that we can release more memory at once.
More information about the llvm-commits
mailing list