diff --git a/tcmalloc/parameters.cc b/tcmalloc/parameters.cc index 715affca1..1c1c92bae 100644 --- a/tcmalloc/parameters.cc +++ b/tcmalloc/parameters.cc @@ -30,7 +30,6 @@ #include "tcmalloc/huge_page_aware_allocator.h" #include "tcmalloc/internal/allocation_guard.h" #include "tcmalloc/internal/config.h" -#include "tcmalloc/internal/environment.h" #include "tcmalloc/internal/logging.h" #include "tcmalloc/internal_malloc_extension.h" #include "tcmalloc/malloc_extension.h" @@ -209,23 +208,10 @@ absl::Duration Parameters::huge_cache_release_time() { return absl::Seconds(v.load(std::memory_order_relaxed)); } -// As background_release_rate() is determined at runtime, we cannot require -// constant initialization for the atomic. This avoids an initialization order -// fiasco. -static std::atomic& malloc_release_rate() { - ABSL_CONST_INIT static absl::once_flag flag; - ABSL_CONST_INIT static std::atomic - v(MallocExtension::BytesPerSecond{0}); - - absl::base_internal::LowLevelCallOnce(&flag, [&]() { - }); - - return v; -} - -MallocExtension::BytesPerSecond Parameters::background_release_rate() { - return malloc_release_rate().load(std::memory_order_relaxed); -} +ABSL_CONST_INIT std::atomic + Parameters::background_release_rate_(MallocExtension::BytesPerSecond{ + 0 + }); ABSL_CONST_INIT std::atomic Parameters::guarded_sampling_interval_( DefaultOrDebugValue(/*default_val=*/50, /*debug_val=*/5) * @@ -446,9 +432,8 @@ void MallocExtension_Internal_SetBackgroundReleaseRate( } void TCMalloc_Internal_SetBackgroundReleaseRate(size_t value) { - tcmalloc::tcmalloc_internal::malloc_release_rate().store( - static_cast(value), - std::memory_order_relaxed); + Parameters::background_release_rate_.store( + static_cast(value)); } uint64_t TCMalloc_Internal_GetHeapSizeHardLimit() { diff --git a/tcmalloc/parameters.h b/tcmalloc/parameters.h index c7e92bd17..3aa898087 100644 --- a/tcmalloc/parameters.h +++ b/tcmalloc/parameters.h @@ -33,7 +33,9 @@ namespace tcmalloc_internal { class Parameters { public: - static MallocExtension::BytesPerSecond background_release_rate(); + static MallocExtension::BytesPerSecond background_release_rate() { + return background_release_rate_.load(std::memory_order_relaxed); + } static void set_background_release_rate( MallocExtension::BytesPerSecond value) { @@ -256,6 +258,7 @@ class Parameters { tcmalloc::tcmalloc_internal::MadvisePreference v); friend void ::TCMalloc_Internal_SetMinHotAccessHint(uint8_t v); + static std::atomic background_release_rate_; static std::atomic guarded_sampling_interval_; static std::atomic max_span_cache_size_; static std::atomic max_span_cache_array_size_; diff --git a/tcmalloc/testing/BUILD b/tcmalloc/testing/BUILD index 85023d216..0d5cd6bed 100644 --- a/tcmalloc/testing/BUILD +++ b/tcmalloc/testing/BUILD @@ -534,7 +534,6 @@ create_tcmalloc_testsuite( srcs = ["default_parameters_test.cc"], copts = TCMALLOC_DEFAULT_COPTS, deps = [ - "//tcmalloc:experiment", "//tcmalloc:malloc_extension", "@com_google_absl//absl/strings:str_format", "@com_google_absl//absl/time", @@ -773,7 +772,6 @@ create_tcmalloc_testsuite( ], deps = [ ":testutil", - "//tcmalloc:experiment", "//tcmalloc:malloc_extension", "@com_google_absl//absl/strings", "@com_google_absl//absl/time", diff --git a/tcmalloc/testing/default_parameters_test.cc b/tcmalloc/testing/default_parameters_test.cc index af875b703..35543e6cd 100644 --- a/tcmalloc/testing/default_parameters_test.cc +++ b/tcmalloc/testing/default_parameters_test.cc @@ -19,8 +19,6 @@ #include "absl/strings/str_format.h" #include "absl/time/time.h" -#include "tcmalloc/experiment.h" -#include "tcmalloc/experiment_config.h" #include "tcmalloc/malloc_extension.h" namespace tcmalloc { @@ -48,6 +46,9 @@ constexpr absl::Duration kDefaultSkipSubreleaseShortInterval = absl::Seconds(60) #endif ; +constexpr MallocExtension::BytesPerSecond kDefaultBackgroundReleaseRate{ + 0 +}; constexpr absl::Duration kDefaultSkipSubreleaseLongInterval = #if defined(TCMALLOC_INTERNAL_SMALL_BUT_SLOW) absl::ZeroDuration() @@ -81,12 +82,11 @@ bool TestGuardedSamplingInterval() { } bool TestBackgroundReleaseRate() { - MallocExtension::BytesPerSecond expected_release_rate{0}; auto extension_value = MallocExtension::GetBackgroundReleaseRate(); - if (extension_value != expected_release_rate) { + if (extension_value != kDefaultBackgroundReleaseRate) { absl::FPrintF(stderr, "BackgroundReleaseRate: got %d, want %d\n", - extension_value, expected_release_rate); + extension_value, kDefaultBackgroundReleaseRate); return false; } diff --git a/tcmalloc/testing/malloc_extension_test.cc b/tcmalloc/testing/malloc_extension_test.cc index afa273ee1..851947e53 100644 --- a/tcmalloc/testing/malloc_extension_test.cc +++ b/tcmalloc/testing/malloc_extension_test.cc @@ -27,8 +27,6 @@ #include "absl/strings/string_view.h" #include "absl/time/time.h" #include "tcmalloc/cpu_cache.h" -#include "tcmalloc/experiment.h" -#include "tcmalloc/experiment_config.h" #include "tcmalloc/static_vars.h" #include "tcmalloc/testing/testutil.h"