summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-04-27 22:44:16 +0200
committerTor Egge <Tor.Egge@online.no>2022-04-27 22:44:16 +0200
commit3845451fd2e55db7e6979ab12b8704a2520de205 (patch)
tree9b53956939427f59108200f27ac0a1e27ab9cbd1 /searchlib/src
parentcd04e0c3a06499971c82678e88510b257d4d6faa (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.cpp19
-rw-r--r--searchlib/src/vespa/searchlib/memoryindex/compact_words_store.h5
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();