diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-06-13 22:42:45 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-06-13 22:42:45 +0200 |
commit | 00fef8b061eed0e7ddb87635cce036b1e5d24ef8 (patch) | |
tree | f7503b5d8fe149521b1b7296fbe4708875d6522a /vespalib | |
parent | 9a483e577acdd5cb5a36e94ec3c8ab08a8b43d17 (diff) |
Add get_entry_size member function in array store type mappers that maps
from type id to entry size.
Diffstat (limited to 'vespalib')
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; } }; |