From f5b7a486d9907f47c4d3b8cb4fb9514407fe4c30 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Wed, 8 Dec 2021 23:49:48 +0100 Subject: Integrate CompactionStrategy with AddressSpace and MemoryUsage. --- .../src/vespa/vespalib/datastore/compaction_spec.h | 1 + .../vespalib/datastore/compaction_strategy.cpp | 21 +++++++++++++ .../vespa/vespalib/datastore/compaction_strategy.h | 36 ++++++++++++++-------- 3 files changed, 45 insertions(+), 13 deletions(-) (limited to 'vespalib') diff --git a/vespalib/src/vespa/vespalib/datastore/compaction_spec.h b/vespalib/src/vespa/vespalib/datastore/compaction_spec.h index 5bc2d838f9a..b346df68452 100644 --- a/vespalib/src/vespa/vespalib/datastore/compaction_spec.h +++ b/vespalib/src/vespa/vespalib/datastore/compaction_spec.h @@ -21,6 +21,7 @@ public: _compact_address_space(compact_address_space_) { } + bool compact() const noexcept { return _compact_memory || _compact_address_space; } bool compact_memory() const noexcept { return _compact_memory; } bool compact_address_space() const noexcept { return _compact_address_space; } }; diff --git a/vespalib/src/vespa/vespalib/datastore/compaction_strategy.cpp b/vespalib/src/vespa/vespalib/datastore/compaction_strategy.cpp index 43da1837427..2dbd501f78e 100644 --- a/vespalib/src/vespa/vespalib/datastore/compaction_strategy.cpp +++ b/vespalib/src/vespa/vespalib/datastore/compaction_strategy.cpp @@ -1,10 +1,31 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "compaction_strategy.h" +#include "compaction_spec.h" +#include +#include #include namespace vespalib::datastore { +bool +CompactionStrategy::should_compact_memory(const MemoryUsage& memory_usage) const +{ + return should_compact_memory(memory_usage.usedBytes(), memory_usage.deadBytes()); +} + +bool +CompactionStrategy::should_compact_address_space(const AddressSpace& address_space) const +{ + return should_compact_address_space(address_space.used(), address_space.dead()); +} + +CompactionSpec +CompactionStrategy::should_compact(const MemoryUsage& memory_usage, const AddressSpace& address_space) const +{ + return CompactionSpec(should_compact_memory(memory_usage), should_compact_address_space(address_space)); +} + std::ostream& operator<<(std::ostream& os, const CompactionStrategy& compaction_strategy) { os << "{maxDeadBytesRatio=" << compaction_strategy.getMaxDeadBytesRatio() << diff --git a/vespalib/src/vespa/vespalib/datastore/compaction_strategy.h b/vespalib/src/vespa/vespalib/datastore/compaction_strategy.h index 06d54786122..df7ca1657cb 100644 --- a/vespalib/src/vespa/vespalib/datastore/compaction_strategy.h +++ b/vespalib/src/vespa/vespalib/datastore/compaction_strategy.h @@ -4,16 +4,36 @@ #include +namespace vespalib { + +class AddressSpace; +class MemoryUsage; + +} + namespace vespalib::datastore { +class CompactionSpec; + /* * Class describing compaction strategy for a compactable data structure. */ class CompactionStrategy { +public: + static constexpr size_t DEAD_BYTES_SLACK = 0x10000u; + static constexpr size_t DEAD_ADDRESS_SPACE_SLACK = 0x10000u; private: double _maxDeadBytesRatio; // Max ratio of dead bytes before compaction double _maxDeadAddressSpaceRatio; // Max ratio of dead address space before compaction + bool should_compact_memory(size_t used_bytes, size_t dead_bytes) const { + return ((dead_bytes >= DEAD_BYTES_SLACK) && + (dead_bytes > used_bytes * getMaxDeadBytesRatio())); + } + bool should_compact_address_space(size_t used_address_space, size_t dead_address_space) const { + return ((dead_address_space >= DEAD_ADDRESS_SPACE_SLACK) && + (dead_address_space > used_address_space * getMaxDeadAddressSpaceRatio())); + } public: CompactionStrategy() noexcept : _maxDeadBytesRatio(0.05), @@ -33,19 +53,9 @@ public: } bool operator!=(const CompactionStrategy & rhs) const { return !(operator==(rhs)); } - static constexpr size_t DEAD_BYTES_SLACK = 0x10000u; - - bool should_compact_memory(size_t used_bytes, size_t dead_bytes) const { - return ((dead_bytes >= DEAD_BYTES_SLACK) && - (dead_bytes > used_bytes * getMaxDeadBytesRatio())); - } - - static constexpr size_t DEAD_ADDRESS_SPACE_SLACK = 0x10000u; - - bool should_compact_address_space(size_t used_address_space, size_t dead_address_space) const { - return ((dead_address_space >= DEAD_ADDRESS_SPACE_SLACK) && - (dead_address_space > used_address_space * getMaxDeadAddressSpaceRatio())); - } + bool should_compact_memory(const MemoryUsage& memory_usage) const; + bool should_compact_address_space(const AddressSpace& address_space) const; + CompactionSpec should_compact(const MemoryUsage& memory_usage, const AddressSpace& address_space) const; }; std::ostream& operator<<(std::ostream& os, const CompactionStrategy& compaction_strategy); -- cgit v1.2.3