diff options
author | ChiaHungDuan <chiahungduan@google.com> | 2024-04-29 08:41:46 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-29 08:41:46 -0700 |
commit | 11f4f458d985ba20aae58df1c3092655ec2310bd (patch) | |
tree | cf07edcc8a99bf481476097b7ffd4a666f3d980b | |
parent | 1563a8752b33a854c3ab5a4e8b3dce39ac9831b8 (diff) | |
download | llvm-11f4f458d985ba20aae58df1c3092655ec2310bd.zip llvm-11f4f458d985ba20aae58df1c3092655ec2310bd.tar.gz llvm-11f4f458d985ba20aae58df1c3092655ec2310bd.tar.bz2 |
[scudo] Support setting default value of ReleaseToOsIntervalMs in config (#90256)
-rw-r--r-- | compiler-rt/lib/scudo/standalone/allocator_config.def | 2 | ||||
-rw-r--r-- | compiler-rt/lib/scudo/standalone/combined.h | 3 | ||||
-rw-r--r-- | compiler-rt/lib/scudo/standalone/flags.inc | 2 | ||||
-rw-r--r-- | compiler-rt/lib/scudo/standalone/primary32.h | 4 | ||||
-rw-r--r-- | compiler-rt/lib/scudo/standalone/primary64.h | 3 | ||||
-rw-r--r-- | compiler-rt/lib/scudo/standalone/secondary.h | 3 |
6 files changed, 16 insertions, 1 deletions
diff --git a/compiler-rt/lib/scudo/standalone/allocator_config.def b/compiler-rt/lib/scudo/standalone/allocator_config.def index 9691a00..dcd130a 100644 --- a/compiler-rt/lib/scudo/standalone/allocator_config.def +++ b/compiler-rt/lib/scudo/standalone/allocator_config.def @@ -89,6 +89,7 @@ PRIMARY_REQUIRED(const s32, MaxReleaseToOsIntervalMs) // Indicates support for offsetting the start of a region by a random number of // pages. This is only used if `EnableContiguousRegions` is enabled. PRIMARY_OPTIONAL(const bool, EnableRandomOffset, false) +PRIMARY_OPTIONAL(const s32, DefaultReleaseToOsIntervalMs, INT32_MIN) // When `EnableContiguousRegions` is true, all regions will be be arranged in // adjacency. This will reduce the fragmentation caused by region allocations @@ -118,6 +119,7 @@ SECONDARY_CACHE_OPTIONAL(const u32, DefaultMaxEntriesCount, 0) SECONDARY_CACHE_OPTIONAL(const uptr, DefaultMaxEntrySize, 0) SECONDARY_CACHE_OPTIONAL(const s32, MinReleaseToOsIntervalMs, INT32_MIN) SECONDARY_CACHE_OPTIONAL(const s32, MaxReleaseToOsIntervalMs, INT32_MAX) +SECONDARY_CACHE_OPTIONAL(const s32, DefaultReleaseToOsIntervalMs, INT32_MIN) #undef SECONDARY_CACHE_OPTIONAL #undef SECONDARY_REQUIRED_TEMPLATE_TYPE diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h index e7bc90c..927513d 100644 --- a/compiler-rt/lib/scudo/standalone/combined.h +++ b/compiler-rt/lib/scudo/standalone/combined.h @@ -173,6 +173,9 @@ public: static_cast<u32>(getFlags()->quarantine_max_chunk_size); Stats.init(); + // TODO(chiahungduan): Given that we support setting the default value in + // the PrimaryConfig and CacheConfig, consider to deprecate the use of + // `release_to_os_interval_ms` flag. const s32 ReleaseToOsIntervalMs = getFlags()->release_to_os_interval_ms; Primary.init(ReleaseToOsIntervalMs); Secondary.init(&Stats, ReleaseToOsIntervalMs); diff --git a/compiler-rt/lib/scudo/standalone/flags.inc b/compiler-rt/lib/scudo/standalone/flags.inc index f5a2bab..ff0c28e 100644 --- a/compiler-rt/lib/scudo/standalone/flags.inc +++ b/compiler-rt/lib/scudo/standalone/flags.inc @@ -42,7 +42,7 @@ SCUDO_FLAG(bool, may_return_null, true, "returning NULL in otherwise non-fatal error scenarios, eg: OOM, " "invalid allocation alignments, etc.") -SCUDO_FLAG(int, release_to_os_interval_ms, SCUDO_ANDROID ? INT32_MIN : 5000, +SCUDO_FLAG(int, release_to_os_interval_ms, 5000, "Interval (in milliseconds) at which to attempt release of unused " "memory to the OS. Negative values disable the feature.") diff --git a/compiler-rt/lib/scudo/standalone/primary32.h b/compiler-rt/lib/scudo/standalone/primary32.h index 1d8a77b..ebfb8df 100644 --- a/compiler-rt/lib/scudo/standalone/primary32.h +++ b/compiler-rt/lib/scudo/standalone/primary32.h @@ -88,6 +88,10 @@ public: Sci->MinRegionIndex = NumRegions; Sci->ReleaseInfo.LastReleaseAtNs = Time; } + + // The default value in the primary config has the higher priority. + if (Config::getDefaultReleaseToOsIntervalMs() != INT32_MIN) + ReleaseToOsInterval = Config::getDefaultReleaseToOsIntervalMs(); setOption(Option::ReleaseInterval, static_cast<sptr>(ReleaseToOsInterval)); } diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h index d611905..bed2ccb 100644 --- a/compiler-rt/lib/scudo/standalone/primary64.h +++ b/compiler-rt/lib/scudo/standalone/primary64.h @@ -147,6 +147,9 @@ public: for (uptr I = 0; I < NumClasses; I++) getRegionInfo(I)->FLLockCV.bindTestOnly(getRegionInfo(I)->FLLock); + // The default value in the primary config has the higher priority. + if (Config::getDefaultReleaseToOsIntervalMs() != INT32_MIN) + ReleaseToOsInterval = Config::getDefaultReleaseToOsIntervalMs(); setOption(Option::ReleaseInterval, static_cast<sptr>(ReleaseToOsInterval)); } diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h index 674af50..d8c9f5b 100644 --- a/compiler-rt/lib/scudo/standalone/secondary.h +++ b/compiler-rt/lib/scudo/standalone/secondary.h @@ -209,6 +209,9 @@ public: static_cast<sptr>(Config::getDefaultMaxEntriesCount())); setOption(Option::MaxCacheEntrySize, static_cast<sptr>(Config::getDefaultMaxEntrySize())); + // The default value in the cache config has the higher priority. + if (Config::getDefaultReleaseToOsIntervalMs() != INT32_MIN) + ReleaseToOsInterval = Config::getDefaultReleaseToOsIntervalMs(); setOption(Option::ReleaseInterval, static_cast<sptr>(ReleaseToOsInterval)); } |