Skip to content

Commit 8263ace

Browse files
committed
Intermediate changes
commit_hash:68a30b386dcd137e8826f5f721c0654691e2bed1
1 parent bb37d56 commit 8263ace

File tree

4 files changed

+147
-10
lines changed

4 files changed

+147
-10
lines changed

yt/yt/library/tcmalloc/config.cpp

Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,25 @@ using namespace NYTree;
66

77
////////////////////////////////////////////////////////////////////////////////
88

9+
void THeapSizeLimitConfig::ApplyDynamicInplace(const TDynamicHeapSizeLimitConfigPtr& dynamicConfig)
10+
{
11+
UpdateYsonStructField(ContainerMemoryRatio, dynamicConfig->ContainerMemoryRatio);
12+
UpdateYsonStructField(ContainerMemoryMargin, dynamicConfig->ContainerMemoryMargin);
13+
UpdateYsonStructField(Hard, dynamicConfig->Hard);
14+
UpdateYsonStructField(DumpMemoryProfileOnViolation, dynamicConfig->DumpMemoryProfileOnViolation);
15+
UpdateYsonStructField(MemoryProfileDumpTimeout, dynamicConfig->MemoryProfileDumpTimeout);
16+
UpdateYsonStructField(MemoryProfileDumpPath, dynamicConfig->MemoryProfileDumpPath);
17+
UpdateYsonStructField(MemoryProfileDumpFilenameSuffix, dynamicConfig->MemoryProfileDumpFilenameSuffix);
18+
}
19+
20+
THeapSizeLimitConfigPtr THeapSizeLimitConfig::ApplyDynamic(const TDynamicHeapSizeLimitConfigPtr& dynamicConfig) const
21+
{
22+
auto mergedConfig = CloneYsonStruct(MakeStrong(this));
23+
mergedConfig->ApplyDynamicInplace(dynamicConfig);
24+
mergedConfig->Postprocess();
25+
return mergedConfig;
26+
}
27+
928
void THeapSizeLimitConfig::Register(TRegistrar registrar)
1029
{
1130
registrar.Parameter("container_memory_ratio", &TThis::ContainerMemoryRatio)
@@ -20,7 +39,7 @@ void THeapSizeLimitConfig::Register(TRegistrar registrar)
2039
.Default(TDuration::Minutes(10));
2140
registrar.Parameter("memory_profile_dump_path", &TThis::MemoryProfileDumpPath)
2241
.Default();
23-
registrar.Parameter("emory_profile_dump_filename_suffix", &TThis::MemoryProfileDumpFilenameSuffix)
42+
registrar.Parameter("memory_profile_dump_filename_suffix", &TThis::MemoryProfileDumpFilenameSuffix)
2443
.Default();
2544

2645
registrar.Postprocessor([] (THeapSizeLimitConfig* config) {
@@ -30,17 +49,45 @@ void THeapSizeLimitConfig::Register(TRegistrar registrar)
3049
});
3150
}
3251

33-
TTCMallocConfigPtr TTCMallocConfig::ApplyDynamic(const TTCMallocConfigPtr& dynamicConfig) const
52+
////////////////////////////////////////////////////////////////////////////////
53+
54+
void TDynamicHeapSizeLimitConfig::Register(TRegistrar registrar)
3455
{
35-
// TODO(babenko): fix this mess
36-
auto mergedConfig = CloneYsonStruct(dynamicConfig);
37-
mergedConfig->HeapSizeLimit->MemoryProfileDumpPath = HeapSizeLimit->MemoryProfileDumpPath;
38-
mergedConfig->Postprocess();
39-
return mergedConfig;
56+
registrar.Parameter("container_memory_ratio", &TThis::ContainerMemoryRatio)
57+
.Default();
58+
registrar.Parameter("container_memory_margin", &TThis::ContainerMemoryMargin)
59+
.Default();
60+
registrar.Parameter("hard", &TThis::Hard)
61+
.Default();
62+
registrar.Parameter("dump_memory_profile_on_violation", &TThis::DumpMemoryProfileOnViolation)
63+
.Default();
64+
registrar.Parameter("memory_profile_dump_timeout", &TThis::MemoryProfileDumpTimeout)
65+
.Default();
66+
registrar.Parameter("memory_profile_dump_path", &TThis::MemoryProfileDumpPath)
67+
.Default();
68+
registrar.Parameter("memory_profile_dump_filename_suffix", &TThis::MemoryProfileDumpFilenameSuffix)
69+
.Default();
4070
}
4171

4272
////////////////////////////////////////////////////////////////////////////////
4373

74+
TTCMallocConfigPtr TTCMallocConfig::ApplyDynamic(const TDynamicTCMallocConfigPtr& dynamicConfig) const
75+
{
76+
auto mergedConfig = CloneYsonStruct(MakeStrong(this));
77+
UpdateYsonStructField(mergedConfig->AggressiveReleaseThreshold, dynamicConfig->AggressiveReleaseThreshold);
78+
UpdateYsonStructField(mergedConfig->AggressiveReleaseThresholdRatio, dynamicConfig->AggressiveReleaseThresholdRatio);
79+
UpdateYsonStructField(mergedConfig->AggressiveReleaseSize, dynamicConfig->AggressiveReleaseSize);
80+
UpdateYsonStructField(mergedConfig->AggressiveReleasePeriod, dynamicConfig->AggressiveReleasePeriod);
81+
UpdateYsonStructField(mergedConfig->GuardedSamplingRate, dynamicConfig->GuardedSamplingRate);
82+
UpdateYsonStructField(mergedConfig->ProfileSamplingRate, dynamicConfig->ProfileSamplingRate);
83+
UpdateYsonStructField(mergedConfig->MaxPerCpuCacheSize, dynamicConfig->MaxPerCpuCacheSize);
84+
UpdateYsonStructField(mergedConfig->MaxTotalThreadCacheBytes, dynamicConfig->MaxTotalThreadCacheBytes);
85+
UpdateYsonStructField(mergedConfig->BackgroundReleaseRate, dynamicConfig->BackgroundReleaseRate);
86+
mergedConfig->HeapSizeLimit->ApplyDynamicInplace(dynamicConfig->HeapSizeLimit);
87+
mergedConfig->Postprocess();
88+
return mergedConfig;
89+
}
90+
4491
void TTCMallocConfig::Register(TRegistrar registrar)
4592
{
4693
registrar.Parameter("aggressive_release_threshold", &TThis::AggressiveReleaseThreshold)
@@ -69,5 +116,33 @@ void TTCMallocConfig::Register(TRegistrar registrar)
69116

70117
////////////////////////////////////////////////////////////////////////////////
71118

119+
void TDynamicTCMallocConfig::Register(TRegistrar registrar)
120+
{
121+
registrar.Parameter("aggressive_release_threshold", &TThis::AggressiveReleaseThreshold)
122+
.Default();
123+
registrar.Parameter("aggressive_release_threshold_ratio", &TThis::AggressiveReleaseThresholdRatio)
124+
.Optional();
125+
126+
registrar.Parameter("aggressive_release_size", &TThis::AggressiveReleaseSize)
127+
.Default();
128+
registrar.Parameter("aggressive_release_period", &TThis::AggressiveReleasePeriod)
129+
.Default();
130+
registrar.Parameter("guarded_sampling_rate", &TThis::GuardedSamplingRate)
131+
.Default();
132+
registrar.Parameter("profile_sampling_rate", &TThis::ProfileSamplingRate)
133+
.Default();
134+
registrar.Parameter("max_per_cpu_cache_size", &TThis::MaxPerCpuCacheSize)
135+
.Default();
136+
registrar.Parameter("max_total_thread_cache_bytes", &TThis::MaxTotalThreadCacheBytes)
137+
.Default();
138+
registrar.Parameter("background_release_rate", &TThis::BackgroundReleaseRate)
139+
.Default();
140+
141+
registrar.Parameter("heap_size_limit", &TThis::HeapSizeLimit)
142+
.DefaultNew();
143+
}
144+
145+
////////////////////////////////////////////////////////////////////////////////
146+
72147
} // namespace NYT::NTCMalloc
73148

yt/yt/library/tcmalloc/config.h

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ struct THeapSizeLimitConfig
3434
std::optional<TString> MemoryProfileDumpPath;
3535
std::optional<TString> MemoryProfileDumpFilenameSuffix;
3636

37+
void ApplyDynamicInplace(const TDynamicHeapSizeLimitConfigPtr& dynamicConfig);
38+
THeapSizeLimitConfigPtr ApplyDynamic(const TDynamicHeapSizeLimitConfigPtr& dynamicConfig) const;
39+
3740
REGISTER_YSON_STRUCT(THeapSizeLimitConfig);
3841

3942
static void Register(TRegistrar registrar);
@@ -43,6 +46,30 @@ DEFINE_REFCOUNTED_TYPE(THeapSizeLimitConfig)
4346

4447
////////////////////////////////////////////////////////////////////////////////
4548

49+
struct TDynamicHeapSizeLimitConfig
50+
: public NYTree::TYsonStruct
51+
{
52+
std::optional<double> ContainerMemoryRatio;
53+
std::optional<i64> ContainerMemoryMargin;
54+
55+
std::optional<bool> Hard;
56+
57+
std::optional<bool> DumpMemoryProfileOnViolation;
58+
59+
std::optional<TDuration> MemoryProfileDumpTimeout;
60+
61+
std::optional<TString> MemoryProfileDumpPath;
62+
std::optional<TString> MemoryProfileDumpFilenameSuffix;
63+
64+
REGISTER_YSON_STRUCT(TDynamicHeapSizeLimitConfig);
65+
66+
static void Register(TRegistrar registrar);
67+
};
68+
69+
DEFINE_REFCOUNTED_TYPE(TDynamicHeapSizeLimitConfig)
70+
71+
////////////////////////////////////////////////////////////////////////////////
72+
4673
struct TTCMallocConfig
4774
: public NYTree::TYsonStruct
4875
{
@@ -66,7 +93,7 @@ struct TTCMallocConfig
6693

6794
THeapSizeLimitConfigPtr HeapSizeLimit;
6895

69-
TTCMallocConfigPtr ApplyDynamic(const TTCMallocConfigPtr& dynamicConfig) const;
96+
TTCMallocConfigPtr ApplyDynamic(const TDynamicTCMallocConfigPtr& dynamicConfig) const;
7097

7198
REGISTER_YSON_STRUCT(TTCMallocConfig);
7299

@@ -77,4 +104,32 @@ DEFINE_REFCOUNTED_TYPE(TTCMallocConfig)
77104

78105
////////////////////////////////////////////////////////////////////////////////
79106

107+
struct TDynamicTCMallocConfig
108+
: public NYTree::TYsonStruct
109+
{
110+
std::optional<i64> AggressiveReleaseThreshold;
111+
112+
std::optional<double> AggressiveReleaseThresholdRatio;
113+
114+
std::optional<i64> AggressiveReleaseSize;
115+
std::optional<TDuration> AggressiveReleasePeriod;
116+
117+
std::optional<i64> GuardedSamplingRate;
118+
119+
std::optional<i64> ProfileSamplingRate;
120+
std::optional<i64> MaxPerCpuCacheSize;
121+
std::optional<i64> MaxTotalThreadCacheBytes;
122+
std::optional<i64> BackgroundReleaseRate;
123+
124+
TDynamicHeapSizeLimitConfigPtr HeapSizeLimit;
125+
126+
REGISTER_YSON_STRUCT(TDynamicTCMallocConfig);
127+
128+
static void Register(TRegistrar registrar);
129+
};
130+
131+
DEFINE_REFCOUNTED_TYPE(TDynamicTCMallocConfig)
132+
133+
////////////////////////////////////////////////////////////////////////////////
134+
80135
} // namespace NYT::NTCMalloc

yt/yt/library/tcmalloc/configure_tcmalloc_manager.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,27 @@ void SetupSingletonConfigParameter(TYsonStructParameter<TTCMallocConfigPtr>& par
1414
parameter.DefaultNew();
1515
}
1616

17+
void SetupSingletonConfigParameter(TYsonStructParameter<TDynamicTCMallocConfigPtr>& parameter)
18+
{
19+
parameter.DefaultNew();
20+
}
21+
1722
void ConfigureSingleton(const TTCMallocConfigPtr& config)
1823
{
1924
TTCMallocManager::Configure(config);
2025
}
2126

2227
void ReconfigureSingleton(
2328
const TTCMallocConfigPtr& config,
24-
const TTCMallocConfigPtr& dynamicConfig)
29+
const TDynamicTCMallocConfigPtr& dynamicConfig)
2530
{
2631
TTCMallocManager::Configure(config->ApplyDynamic(dynamicConfig));
2732
}
2833

2934
YT_DEFINE_RECONFIGURABLE_SINGLETON(
3035
"tcmalloc",
3136
TTCMallocConfig,
32-
TTCMallocConfig);
37+
TDynamicTCMallocConfig);
3338

3439
////////////////////////////////////////////////////////////////////////////////
3540

yt/yt/library/tcmalloc/public.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ namespace NYT::NTCMalloc {
1010

1111
DECLARE_REFCOUNTED_STRUCT(TTCMallocConfig)
1212
DECLARE_REFCOUNTED_STRUCT(THeapSizeLimitConfig)
13+
DECLARE_REFCOUNTED_STRUCT(TDynamicTCMallocConfig)
14+
DECLARE_REFCOUNTED_STRUCT(TDynamicHeapSizeLimitConfig)
1315

1416
YT_DECLARE_RECONFIGURABLE_SINGLETON(TTCMallocConfig, TTCMallocConfig);
1517

0 commit comments

Comments
 (0)