diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-04-27 22:44:16 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-04-27 22:44:16 +0200 |
commit | 3845451fd2e55db7e6979ab12b8704a2520de205 (patch) | |
tree | 9b53956939427f59108200f27ac0a1e27ab9cbd1 /searchlib/src | |
parent | cd04e0c3a06499971c82678e88510b257d4d6faa (diff) |
Get hash map memory usage in write thread.
Diffstat (limited to 'searchlib/src')
-rw-r--r-- | searchlib/src/vespa/searchlib/memoryindex/compact_words_store.cpp | 19 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h | 5 |
2 files changed, 21 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.cpp b/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.cpp index 323ac8a7327..d640506765a 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.cpp +++ b/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.cpp @@ -128,8 +128,12 @@ CompactWordsStore::Store::get(vespalib::datastore::EntryRef wordRef) const CompactWordsStore::CompactWordsStore() : _docs(), + _docs_used_bytes(0), + _docs_allocated_bytes(0), _wordsStore() -{ } +{ + update_docs_memory_usage(); +} CompactWordsStore::~CompactWordsStore() { } @@ -143,12 +147,14 @@ CompactWordsStore::insert(const Builder &builder) builder.docId()); LOG_ABORT("should not be reached"); } + update_docs_memory_usage(); } void CompactWordsStore::remove(uint32_t docId) { _docs.erase(docId); + update_docs_memory_usage(); } CompactWordsStore::Iterator @@ -161,12 +167,19 @@ CompactWordsStore::get(uint32_t docId) const return Iterator(); } +void +CompactWordsStore::update_docs_memory_usage() +{ + _docs_used_bytes.store(_docs.getMemoryUsed(), std::memory_order_relaxed); + _docs_allocated_bytes.store(_docs.getMemoryConsumption(), std::memory_order_relaxed); +} + vespalib::MemoryUsage CompactWordsStore::getMemoryUsage() const { vespalib::MemoryUsage usage; - usage.incAllocatedBytes(_docs.getMemoryConsumption()); - usage.incUsedBytes(_docs.getMemoryUsed()); + usage.incAllocatedBytes(_docs_allocated_bytes.load(std::memory_order_relaxed)); + usage.incUsedBytes(_docs_used_bytes.load(std::memory_order_relaxed)); usage.merge(_wordsStore.getMemoryUsage()); return usage; diff --git a/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h b/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h index 42ce3581859..b8c98129b9f 100644 --- a/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h +++ b/searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h @@ -6,6 +6,7 @@ #include <vespa/vespalib/util/array.h> #include <vespa/vespalib/util/memoryusage.h> #include <vespa/vespalib/stllike/hash_map.h> +#include <atomic> namespace search::memoryindex { @@ -82,8 +83,12 @@ public: private: DocumentWordsMap _docs; + std::atomic<size_t> _docs_used_bytes; + std::atomic<size_t> _docs_allocated_bytes; Store _wordsStore; + void update_docs_memory_usage(); + public: CompactWordsStore(); ~CompactWordsStore(); |