diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-09-16 09:15:12 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-09-16 09:15:12 +0000 |
commit | e71201912bfde5477861f6b69bad783e2705fab4 (patch) | |
tree | 2748a5c9407887aad7a9180b0ecd30f8f295791f /storage | |
parent | fb5d4c9b0ac504698f4df52b9b0257170b944450 (diff) |
Flip to always use the new distributor stripe code path.
If the number of stripes is not configured, we tune it based on the sampled number of CPU cores.
Diffstat (limited to 'storage')
3 files changed, 33 insertions, 2 deletions
diff --git a/storage/src/tests/common/bucket_stripe_utils_test.cpp b/storage/src/tests/common/bucket_stripe_utils_test.cpp index a654c4fe83e..23f00856a30 100644 --- a/storage/src/tests/common/bucket_stripe_utils_test.cpp +++ b/storage/src/tests/common/bucket_stripe_utils_test.cpp @@ -5,9 +5,10 @@ #include <vespa/vespalib/gtest/gtest.h> using document::BucketId; +using storage::adjusted_num_stripes; using storage::calc_num_stripe_bits; using storage::stripe_of_bucket_key; -using storage::adjusted_num_stripes; +using storage::tune_num_stripes_based_on_cpu_cores; constexpr uint8_t MUB = storage::spi::BucketLimits::MinUsedBits; TEST(BucketStripeUtilsTest, stripe_of_bucket_key) @@ -47,3 +48,13 @@ TEST(BucketStripeUtilsTest, max_stripe_values) EXPECT_EQ(256, storage::MaxStripes); } +TEST(BucketStripeUtilsTest, num_stripes_tuned_based_on_cpu_cores) +{ + EXPECT_EQ(1, tune_num_stripes_based_on_cpu_cores(0)); + EXPECT_EQ(1, tune_num_stripes_based_on_cpu_cores(1)); + EXPECT_EQ(1, tune_num_stripes_based_on_cpu_cores(16)); + EXPECT_EQ(2, tune_num_stripes_based_on_cpu_cores(17)); + EXPECT_EQ(2, tune_num_stripes_based_on_cpu_cores(64)); + EXPECT_EQ(4, tune_num_stripes_based_on_cpu_cores(65)); +} + diff --git a/storage/src/vespa/storage/common/bucket_stripe_utils.cpp b/storage/src/vespa/storage/common/bucket_stripe_utils.cpp index 10667e79678..6f347a827c3 100644 --- a/storage/src/vespa/storage/common/bucket_stripe_utils.cpp +++ b/storage/src/vespa/storage/common/bucket_stripe_utils.cpp @@ -39,7 +39,8 @@ calc_num_stripe_bits(uint32_t n_stripes) noexcept return result; } -uint32_t adjusted_num_stripes(uint32_t n_stripes) noexcept +uint32_t +adjusted_num_stripes(uint32_t n_stripes) noexcept { if (n_stripes > 1) { if (n_stripes > MaxStripes) { @@ -50,4 +51,18 @@ uint32_t adjusted_num_stripes(uint32_t n_stripes) noexcept return n_stripes; } +uint32_t +tune_num_stripes_based_on_cpu_cores(uint32_t cpu_cores) noexcept +{ + // This should match the calculation used when node flavor is available: + // config-model/src/main/java/com/yahoo/vespa/model/content/Distributor.java + if (cpu_cores <= 16) { + return 1; + } else if (cpu_cores <= 64) { + return 2; + } else { + return 4; + } +} + } diff --git a/storage/src/vespa/storage/common/bucket_stripe_utils.h b/storage/src/vespa/storage/common/bucket_stripe_utils.h index 96f1247a09f..8a5886d554a 100644 --- a/storage/src/vespa/storage/common/bucket_stripe_utils.h +++ b/storage/src/vespa/storage/common/bucket_stripe_utils.h @@ -31,5 +31,10 @@ uint8_t calc_num_stripe_bits(uint32_t n_stripes) noexcept; */ [[nodiscard]] uint32_t adjusted_num_stripes(uint32_t n_stripes) noexcept; +/** + * Tune the number of stripes based on the number of CPU cores. + */ +uint32_t tune_num_stripes_based_on_cpu_cores(uint32_t cpu_cores) noexcept; + } |