[compiler-rt] [scudo] Cap the PendingPushedBytesDelta [DO NOT MERGE] (PR #158339)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 11:11:53 PDT 2025
https://github.com/ChiaHungDuan created https://github.com/llvm/llvm-project/pull/158339
When there are huge deallocation happened in a short period of time (less than the release interval), we will leave all PendingPushedBytesDelta unreleased and it needs to wait until the next releaseToOSMaybe() (which has to be called after the release interval).
Thus we set a limitation for PendingPushedBytesDelta to avoid keeping too many unused pages.
>From d427c16bca7d5fe3b0be24f3d7aabf0141e73d59 Mon Sep 17 00:00:00 2001
From: Chia-hung Duan <chiahungduan at google.com>
Date: Fri, 12 Sep 2025 18:04:54 +0000
Subject: [PATCH] [scudo] Cap the PendingPushedBytesDelta [DO NOT MERGE]
When there are huge deallocation happened in a short period of time
(less than the release interval), we will leave all
PendingPushedBytesDelta unreleased and it needs to wait until the next
releaseToOSMaybe() (which has to be called after the release interval).
Thus we set a limitation for PendingPushedBytesDelta to avoid keeping
too many unused pages.
---
compiler-rt/lib/scudo/standalone/primary64.h | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h
index 7727049426b47..6d46c02691c83 100644
--- a/compiler-rt/lib/scudo/standalone/primary64.h
+++ b/compiler-rt/lib/scudo/standalone/primary64.h
@@ -1561,6 +1561,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 twice of the threshold, it implies some
+ // huge deallocations happening so we'd better still try to release some
+ // pages. Note that this is likely happened with large blocks.
+ 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