summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-03-31 13:04:54 +0000
committerArne Juul <arnej@verizonmedia.com>2020-04-01 06:23:18 +0000
commit0967e8a974fbd9b1a6c5942d5daab12bb44a0c0e (patch)
tree750767844e6900156a681c537c5b4e458fdfa4ef /searchlib
parentede7a4ac09e169813087b05d8b98818332b6578c (diff)
add some simple statistics when exploring state
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp19
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_graph.h2
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp7
3 files changed, 28 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
index db8d1067980..6f902a30861 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
@@ -50,4 +50,23 @@ HnswGraph::set_link_array(uint32_t docid, uint32_t level, const LinkArrayRef& ne
links.remove(old_links_ref);
}
+std::vector<uint32_t>
+HnswGraph::level_histogram() const
+{
+ std::vector<uint32_t> result;
+ size_t num_nodes = node_refs.size();
+ for (size_t i = 0; i < num_nodes; ++i) {
+ uint32_t levels = 0;
+ auto node_ref = node_refs[i].load_acquire();
+ if (node_ref.valid()) {
+ levels = nodes.get(node_ref).size();
+ }
+ while (result.size() <= levels) {
+ result.push_back(0);
+ }
+ ++result[levels];
+ }
+ return result;
+}
+
} // namespace
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
index 64892d06f09..233b9087af7 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
@@ -69,6 +69,8 @@ struct HnswGraph {
}
size_t size() const { return node_refs.size(); }
+
+ std::vector<uint32_t> level_histogram() const;
};
}
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
index de6daba650c..10be90a7f30 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
@@ -381,6 +381,13 @@ HnswIndex::get_state(const vespalib::slime::Inserter& inserter) const
{
auto& object = inserter.insertObject();
StateExplorerUtils::memory_usage_to_slime(memory_usage(), object.setObject("memory_usage"));
+ object.setLong("nodes", _graph.size());
+ auto& level_histogram = object.setArray("level_histogram");
+ for (uint32_t hist_val : _graph.level_histogram()) {
+ level_histogram.addLong(hist_val);
+ }
+ object.setLong("entry_docid", _graph.entry_docid);
+ object.setLong("entry_level", _graph.entry_level);
}
std::unique_ptr<NearestNeighborIndexSaver>