aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-06-13 22:42:45 +0200
committerTor Egge <Tor.Egge@online.no>2023-06-13 22:42:45 +0200
commit00fef8b061eed0e7ddb87635cce036b1e5d24ef8 (patch)
treef7503b5d8fe149521b1b7296fbe4708875d6522a /vespalib
parent9a483e577acdd5cb5a36e94ec3c8ab08a8b43d17 (diff)
Add get_entry_size member function in array store type mappers that maps
from type id to entry size.
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/datastore/array_store_config/array_store_config_test.cpp4
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store.hpp3
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store_config.cpp7
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store_config.h3
-rw-r--r--vespalib/src/vespa/vespalib/datastore/array_store_simple_type_mapper.h5
5 files changed, 10 insertions, 12 deletions
diff --git a/vespalib/src/tests/datastore/array_store_config/array_store_config_test.cpp b/vespalib/src/tests/datastore/array_store_config/array_store_config_test.cpp
index 171e7216638..16abd065a55 100644
--- a/vespalib/src/tests/datastore/array_store_config/array_store_config_test.cpp
+++ b/vespalib/src/tests/datastore/array_store_config/array_store_config_test.cpp
@@ -24,9 +24,9 @@ struct Fixture
size_t smallPageSize,
size_t min_num_entries_for_new_buffer)
: cfg(ArrayStoreConfig::optimizeForHugePage(maxSmallArrayTypeId,
- [](size_t type_id) noexcept { return type_id; },
+ [](size_t type_id) noexcept { return type_id * sizeof(int); },
hugePageSize, smallPageSize,
- sizeof(int), EntryRefType::offsetSize(),
+ EntryRefType::offsetSize(),
min_num_entries_for_new_buffer,
ALLOC_GROW_FACTOR)) { }
void assertSpec(uint32_t type_id, uint32_t num_entries_for_new_buffer) {
diff --git a/vespalib/src/vespa/vespalib/datastore/array_store.hpp b/vespalib/src/vespa/vespalib/datastore/array_store.hpp
index 8e9fe779ba9..01ebf0312c4 100644
--- a/vespalib/src/vespa/vespalib/datastore/array_store.hpp
+++ b/vespalib/src/vespa/vespalib/datastore/array_store.hpp
@@ -229,10 +229,9 @@ ArrayStore<ElemT, RefT, TypeMapperT>::optimizedConfigForHugePage(uint32_t maxSma
float allocGrowFactor)
{
return ArrayStoreConfig::optimizeForHugePage(mapper.get_max_small_array_type_id(maxSmallArrayTypeId),
- [&](uint32_t type_id) noexcept { return mapper.get_array_size(type_id); },
+ [&](uint32_t type_id) noexcept { return mapper.get_entry_size(type_id); },
hugePageSize,
smallPageSize,
- sizeof(ElemT),
RefT::offsetSize(),
min_num_entries_for_new_buffer,
allocGrowFactor);
diff --git a/vespalib/src/vespa/vespalib/datastore/array_store_config.cpp b/vespalib/src/vespa/vespalib/datastore/array_store_config.cpp
index 1df9354cd6c..ee81938b49d 100644
--- a/vespalib/src/vespa/vespalib/datastore/array_store_config.cpp
+++ b/vespalib/src/vespa/vespalib/datastore/array_store_config.cpp
@@ -46,10 +46,9 @@ alignToSmallPageSize(size_t value, size_t minLimit, size_t smallPageSize)
ArrayStoreConfig
ArrayStoreConfig::optimizeForHugePage(uint32_t maxSmallArrayTypeId,
- std::function<size_t(uint32_t)> type_id_to_array_size,
+ std::function<size_t(uint32_t)> type_id_to_entry_size,
size_t hugePageSize,
size_t smallPageSize,
- size_t elem_size,
size_t maxEntryRefOffset,
size_t min_num_entries_for_new_buffer,
float allocGrowFactor)
@@ -57,8 +56,8 @@ ArrayStoreConfig::optimizeForHugePage(uint32_t maxSmallArrayTypeId,
AllocSpecVector allocSpecs;
allocSpecs.emplace_back(0, maxEntryRefOffset, min_num_entries_for_new_buffer, allocGrowFactor); // large array spec;
for (uint32_t type_id = 1; type_id <= maxSmallArrayTypeId; ++type_id) {
- size_t arraySize = type_id_to_array_size(type_id);
- size_t num_entries_for_new_buffer = hugePageSize / (elem_size * arraySize);
+ size_t entry_size = type_id_to_entry_size(type_id);
+ size_t num_entries_for_new_buffer = hugePageSize / entry_size;
num_entries_for_new_buffer = capToLimits(num_entries_for_new_buffer, min_num_entries_for_new_buffer, maxEntryRefOffset);
num_entries_for_new_buffer = alignToSmallPageSize(num_entries_for_new_buffer, min_num_entries_for_new_buffer, smallPageSize);
allocSpecs.emplace_back(0, maxEntryRefOffset, num_entries_for_new_buffer, allocGrowFactor);
diff --git a/vespalib/src/vespa/vespalib/datastore/array_store_config.h b/vespalib/src/vespa/vespalib/datastore/array_store_config.h
index cae241dba10..d581e5958f0 100644
--- a/vespalib/src/vespa/vespalib/datastore/array_store_config.h
+++ b/vespalib/src/vespa/vespalib/datastore/array_store_config.h
@@ -73,10 +73,9 @@ public:
* Generate a config that is optimized for the given memory huge page size.
*/
static ArrayStoreConfig optimizeForHugePage(uint32_t maxSmallArrayTypeId,
- std::function<size_t(uint32_t)> type_id_to_array_size,
+ std::function<size_t(uint32_t)> type_id_to_entry_size,
size_t hugePageSize,
size_t smallPageSize,
- size_t elem_size,
size_t maxEntryRefOffset,
size_t min_num_entries_for_new_buffer,
float allocGrowFactor);
diff --git a/vespalib/src/vespa/vespalib/datastore/array_store_simple_type_mapper.h b/vespalib/src/vespa/vespalib/datastore/array_store_simple_type_mapper.h
index 5f9728a43cc..e43ee704071 100644
--- a/vespalib/src/vespa/vespalib/datastore/array_store_simple_type_mapper.h
+++ b/vespalib/src/vespa/vespalib/datastore/array_store_simple_type_mapper.h
@@ -21,8 +21,9 @@ public:
using SmallBufferType = SmallArrayBufferType<ElemT>;
using LargeBufferType = LargeArrayBufferType<ElemT>;
- uint32_t get_type_id(size_t array_size) const { return array_size; }
- size_t get_array_size(uint32_t type_id) const { return type_id; }
+ uint32_t get_type_id(size_t array_size) const noexcept { return array_size; }
+ size_t get_array_size(uint32_t type_id) const noexcept { return type_id; }
+ size_t get_entry_size(uint32_t type_id) const noexcept { return get_array_size(type_id) * sizeof(ElemT); }
static uint32_t get_max_small_array_type_id(uint32_t max_small_array_type_id) noexcept { return max_small_array_type_id; }
};