Skip to content

Commit

Permalink
Optimize per-cpu max size class capacities base on fleet profiles.
Browse files Browse the repository at this point in the history
For now the new capacities are still not used.
The intention is to enable them conditionally later.

PiperOrigin-RevId: 581176016
Change-Id: I5282eac7c8e39a8e23a70424ce3b1da1b8f32967
  • Loading branch information
dvyukov authored and copybara-github committed Nov 10, 2023
1 parent c2fc97d commit e07f7b3
Show file tree
Hide file tree
Showing 3 changed files with 1,277 additions and 1,277 deletions.
236 changes: 118 additions & 118 deletions tcmalloc/experimental_pow2_size_class.cc
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.59%
{ 16, 1, 32, 2048}, // 0.59%
{ 32, 1, 32, 2048}, // 0.59%
{ 64, 1, 32, 2048}, // 0.59%
{ 128, 1, 32, 2048}, // 0.59%
{ 256, 1, 32, 2048}, // 0.59%
{ 512, 1, 32, 2048}, // 0.59%
{ 1024, 1, 32, 2048}, // 0.59%
{ 2048, 2, 32, 2048}, // 0.29%
{ 4096, 1, 16, 2048}, // 0.59%
{ 8192, 1, 8, 2048}, // 0.59%
{ 16384, 2, 4, 152}, // 0.29%
{ 32768, 4, 2, 152}, // 0.15%
{ 65536, 8, 2, 152}, // 0.07%
{ 131072, 16, 2, 152}, // 0.04%
{ 262144, 32, 2, 152}, // 0.02%
{ 8, 1, 32, 4964}, // 0.59%
{ 16, 1, 32, 4964}, // 0.59%
{ 32, 1, 32, 4965}, // 0.59%
{ 64, 1, 32, 4964}, // 0.59%
{ 128, 1, 32, 4964}, // 0.59%
{ 256, 1, 32, 2557}, // 0.59%
{ 512, 1, 32, 1408}, // 0.59%
{ 1024, 1, 32, 831}, // 0.59%
{ 2048, 2, 32, 541}, // 0.29%
{ 4096, 1, 16, 558}, // 0.59%
{ 8192, 1, 8, 405}, // 0.59%
{ 16384, 2, 4, 337}, // 0.29%
{ 32768, 4, 2, 335}, // 0.15%
{ 65536, 8, 2, 318}, // 0.07%
{ 131072, 16, 2, 315}, // 0.04%
{ 262144, 32, 2, 310}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 15
Expand All @@ -70,22 +70,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.15%
{ 16, 1, 32, 2048}, // 0.15%
{ 32, 1, 32, 2048}, // 0.15%
{ 64, 1, 32, 2048}, // 0.15%
{ 128, 1, 32, 2048}, // 0.15%
{ 256, 1, 32, 2048}, // 0.15%
{ 512, 1, 32, 2048}, // 0.15%
{ 1024, 1, 32, 2048}, // 0.15%
{ 2048, 1, 32, 2048}, // 0.15%
{ 4096, 1, 16, 2048}, // 0.15%
{ 8192, 1, 8, 2048}, // 0.15%
{ 16384, 1, 4, 152}, // 0.15%
{ 32768, 1, 2, 152}, // 0.15%
{ 65536, 2, 2, 152}, // 0.07%
{ 131072, 4, 2, 152}, // 0.04%
{ 262144, 8, 2, 152}, // 0.02%
{ 8, 1, 32, 5052}, // 0.15%
{ 16, 1, 32, 5052}, // 0.15%
{ 32, 1, 32, 5052}, // 0.15%
{ 64, 1, 32, 5052}, // 0.15%
{ 128, 1, 32, 5052}, // 0.15%
{ 256, 1, 32, 2398}, // 0.15%
{ 512, 1, 32, 1174}, // 0.15%
{ 1024, 1, 32, 821}, // 0.15%
{ 2048, 1, 32, 525}, // 0.15%
{ 4096, 1, 16, 518}, // 0.15%
{ 8192, 1, 8, 380}, // 0.15%
{ 16384, 1, 4, 350}, // 0.15%
{ 32768, 1, 2, 338}, // 0.15%
{ 65536, 2, 2, 323}, // 0.07%
{ 131072, 4, 2, 333}, // 0.04%
{ 262144, 8, 2, 316}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 18
Expand All @@ -95,22 +95,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.02%
{ 16, 1, 32, 2048}, // 0.02%
{ 32, 1, 32, 2048}, // 0.02%
{ 64, 1, 32, 2048}, // 0.02%
{ 128, 1, 32, 2048}, // 0.02%
{ 256, 1, 32, 2048}, // 0.02%
{ 512, 1, 32, 2048}, // 0.02%
{ 1024, 1, 32, 2048}, // 0.02%
{ 2048, 1, 32, 2048}, // 0.02%
{ 4096, 1, 16, 2048}, // 0.02%
{ 8192, 1, 8, 2048}, // 0.02%
{ 16384, 1, 4, 152}, // 0.02%
{ 32768, 1, 2, 152}, // 0.02%
{ 65536, 1, 2, 152}, // 0.02%
{ 131072, 1, 2, 152}, // 0.02%
{ 262144, 1, 2, 152}, // 0.02%
{ 8, 1, 32, 4883}, // 0.02%
{ 16, 1, 32, 4883}, // 0.02%
{ 32, 1, 32, 4883}, // 0.02%
{ 64, 1, 32, 4883}, // 0.02%
{ 128, 1, 32, 4883}, // 0.02%
{ 256, 1, 32, 2711}, // 0.02%
{ 512, 1, 32, 1481}, // 0.02%
{ 1024, 1, 32, 830}, // 0.02%
{ 2048, 1, 32, 632}, // 0.02%
{ 4096, 1, 16, 646}, // 0.02%
{ 8192, 1, 8, 398}, // 0.02%
{ 16384, 1, 4, 346}, // 0.02%
{ 32768, 1, 2, 358}, // 0.02%
{ 65536, 1, 2, 310}, // 0.02%
{ 131072, 1, 2, 304}, // 0.02%
{ 262144, 1, 2, 305}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 12
Expand All @@ -120,17 +120,17 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 1.17%
{ 16, 1, 32, 2048}, // 1.17%
{ 32, 1, 32, 2048}, // 1.17%
{ 64, 1, 32, 2048}, // 1.17%
{ 128, 1, 32, 2048}, // 1.17%
{ 256, 1, 32, 2048}, // 1.17%
{ 512, 1, 32, 2048}, // 1.17%
{ 1024, 2, 32, 2048}, // 0.59%
{ 2048, 4, 32, 2048}, // 0.29%
{ 4096, 4, 16, 2048}, // 0.29%
{ 8192, 4, 8, 2048}, // 0.29%
{ 8, 1, 32, 4840}, // 1.17%
{ 16, 1, 32, 4840}, // 1.17%
{ 32, 1, 32, 4840}, // 1.17%
{ 64, 1, 32, 4840}, // 1.17%
{ 128, 1, 32, 4840}, // 1.17%
{ 256, 1, 32, 4050}, // 1.17%
{ 512, 1, 32, 1491}, // 1.17%
{ 1024, 2, 32, 1425}, // 0.59%
{ 2048, 4, 32, 612}, // 0.29%
{ 4096, 4, 16, 666}, // 0.29%
{ 8192, 4, 8, 302}, // 0.29%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#else
Expand All @@ -144,22 +144,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.59%
{ 16, 1, 32, 2048}, // 0.59%
{ 32, 1, 32, 2048}, // 0.59%
{ 64, 1, 32, 2048}, // 0.59%
{ 128, 1, 32, 2048}, // 0.59%
{ 256, 1, 32, 2048}, // 0.59%
{ 512, 1, 32, 2048}, // 0.59%
{ 1024, 1, 32, 2048}, // 0.59%
{ 2048, 2, 32, 2048}, // 0.29%
{ 4096, 1, 16, 2048}, // 0.59%
{ 8192, 1, 8, 2048}, // 0.59%
{ 16384, 2, 4, 152}, // 0.29%
{ 32768, 4, 2, 152}, // 0.15%
{ 65536, 8, 2, 152}, // 0.07%
{ 131072, 16, 2, 152}, // 0.04%
{ 262144, 32, 2, 152}, // 0.02%
{ 8, 1, 32, 4964}, // 0.59%
{ 16, 1, 32, 4964}, // 0.59%
{ 32, 1, 32, 4965}, // 0.59%
{ 64, 1, 32, 4964}, // 0.59%
{ 128, 1, 32, 4964}, // 0.59%
{ 256, 1, 32, 2557}, // 0.59%
{ 512, 1, 32, 1408}, // 0.59%
{ 1024, 1, 32, 831}, // 0.59%
{ 2048, 2, 32, 541}, // 0.29%
{ 4096, 1, 16, 558}, // 0.59%
{ 8192, 1, 8, 405}, // 0.59%
{ 16384, 2, 4, 337}, // 0.29%
{ 32768, 4, 2, 335}, // 0.15%
{ 65536, 8, 2, 318}, // 0.07%
{ 131072, 16, 2, 315}, // 0.04%
{ 262144, 32, 2, 310}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 15
Expand All @@ -169,22 +169,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.15%
{ 16, 1, 32, 2048}, // 0.15%
{ 32, 1, 32, 2048}, // 0.15%
{ 64, 1, 32, 2048}, // 0.15%
{ 128, 1, 32, 2048}, // 0.15%
{ 256, 1, 32, 2048}, // 0.15%
{ 512, 1, 32, 2048}, // 0.15%
{ 1024, 1, 32, 2048}, // 0.15%
{ 2048, 1, 32, 2048}, // 0.15%
{ 4096, 1, 16, 2048}, // 0.15%
{ 8192, 1, 8, 2048}, // 0.15%
{ 16384, 1, 4, 152}, // 0.15%
{ 32768, 1, 2, 152}, // 0.15%
{ 65536, 2, 2, 152}, // 0.07%
{ 131072, 4, 2, 152}, // 0.04%
{ 262144, 8, 2, 152}, // 0.02%
{ 8, 1, 32, 5052}, // 0.15%
{ 16, 1, 32, 5052}, // 0.15%
{ 32, 1, 32, 5052}, // 0.15%
{ 64, 1, 32, 5052}, // 0.15%
{ 128, 1, 32, 5052}, // 0.15%
{ 256, 1, 32, 2398}, // 0.15%
{ 512, 1, 32, 1174}, // 0.15%
{ 1024, 1, 32, 821}, // 0.15%
{ 2048, 1, 32, 525}, // 0.15%
{ 4096, 1, 16, 518}, // 0.15%
{ 8192, 1, 8, 380}, // 0.15%
{ 16384, 1, 4, 350}, // 0.15%
{ 32768, 1, 2, 338}, // 0.15%
{ 65536, 2, 2, 323}, // 0.07%
{ 131072, 4, 2, 333}, // 0.04%
{ 262144, 8, 2, 316}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 18
Expand All @@ -194,22 +194,22 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 0.02%
{ 16, 1, 32, 2048}, // 0.02%
{ 32, 1, 32, 2048}, // 0.02%
{ 64, 1, 32, 2048}, // 0.02%
{ 128, 1, 32, 2048}, // 0.02%
{ 256, 1, 32, 2048}, // 0.02%
{ 512, 1, 32, 2048}, // 0.02%
{ 1024, 1, 32, 2048}, // 0.02%
{ 2048, 1, 32, 2048}, // 0.02%
{ 4096, 1, 16, 2048}, // 0.02%
{ 8192, 1, 8, 2048}, // 0.02%
{ 16384, 1, 4, 152}, // 0.02%
{ 32768, 1, 2, 152}, // 0.02%
{ 65536, 1, 2, 152}, // 0.02%
{ 131072, 1, 2, 152}, // 0.02%
{ 262144, 1, 2, 152}, // 0.02%
{ 8, 1, 32, 4883}, // 0.02%
{ 16, 1, 32, 4883}, // 0.02%
{ 32, 1, 32, 4883}, // 0.02%
{ 64, 1, 32, 4883}, // 0.02%
{ 128, 1, 32, 4883}, // 0.02%
{ 256, 1, 32, 2711}, // 0.02%
{ 512, 1, 32, 1481}, // 0.02%
{ 1024, 1, 32, 830}, // 0.02%
{ 2048, 1, 32, 632}, // 0.02%
{ 4096, 1, 16, 646}, // 0.02%
{ 8192, 1, 8, 398}, // 0.02%
{ 16384, 1, 4, 346}, // 0.02%
{ 32768, 1, 2, 358}, // 0.02%
{ 65536, 1, 2, 310}, // 0.02%
{ 131072, 1, 2, 304}, // 0.02%
{ 262144, 1, 2, 305}, // 0.02%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#elif TCMALLOC_PAGE_SHIFT == 12
Expand All @@ -219,17 +219,17 @@ static_assert(kCount <= kNumBaseClasses);
static constexpr SizeClassInfo kExperimentalPow2SizeClassesList[kCount] = {
// <bytes>, <pages>, <batch>, <capacity> <fixed>
{ 0, 0, 0, 0}, // +Inf%
{ 8, 1, 32, 2048}, // 1.17%
{ 16, 1, 32, 2048}, // 1.17%
{ 32, 1, 32, 2048}, // 1.17%
{ 64, 1, 32, 2048}, // 1.17%
{ 128, 1, 32, 2048}, // 1.17%
{ 256, 1, 32, 2048}, // 1.17%
{ 512, 1, 32, 2048}, // 1.17%
{ 1024, 2, 32, 2048}, // 0.59%
{ 2048, 4, 32, 2048}, // 0.29%
{ 4096, 4, 16, 2048}, // 0.29%
{ 8192, 4, 8, 2048}, // 0.29%
{ 8, 1, 32, 4840}, // 1.17%
{ 16, 1, 32, 4840}, // 1.17%
{ 32, 1, 32, 4840}, // 1.17%
{ 64, 1, 32, 4840}, // 1.17%
{ 128, 1, 32, 4840}, // 1.17%
{ 256, 1, 32, 4050}, // 1.17%
{ 512, 1, 32, 1491}, // 1.17%
{ 1024, 2, 32, 1425}, // 0.59%
{ 2048, 4, 32, 612}, // 0.29%
{ 4096, 4, 16, 666}, // 0.29%
{ 8192, 4, 8, 302}, // 0.29%
};
constexpr absl::Span<const SizeClassInfo> kExperimentalPow2SizeClasses(kExperimentalPow2SizeClassesList);
#else
Expand Down
Loading

0 comments on commit e07f7b3

Please sign in to comment.