summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-09-16 09:15:12 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-09-16 09:15:12 +0000
commite71201912bfde5477861f6b69bad783e2705fab4 (patch)
tree2748a5c9407887aad7a9180b0ecd30f8f295791f /storage
parentfb5d4c9b0ac504698f4df52b9b0257170b944450 (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')
-rw-r--r--storage/src/tests/common/bucket_stripe_utils_test.cpp13
-rw-r--r--storage/src/vespa/storage/common/bucket_stripe_utils.cpp17
-rw-r--r--storage/src/vespa/storage/common/bucket_stripe_utils.h5
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;
+
}