Skip to content

Commit ce060d0

Browse files
authored
Merge pull request #36968 from vespa-engine/toregge/avoid-transient-memory-usage-overestimate-for-memory-index
Avoid transient memory usage overestimate for memory index.
2 parents 5637918 + 9ed3871 commit ce060d0

4 files changed

Lines changed: 19 additions & 12 deletions

File tree

searchcore/src/tests/proton/index/indexmanager_test.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,8 @@ TEST_F(IndexManagerTest, require_that_flush_stats_are_calculated) {
438438
search::memoryindex::DocumentInverterContext inverter_context(schema, *invertThreads, *pushThreads, fic);
439439
search::memoryindex::DocumentInverter inverter(inverter_context);
440440

441-
uint64_t fixed_index_size = fic.getMemoryUsage().allocatedBytes();
442-
uint64_t index_size = fic.getMemoryUsage().allocatedBytes() - fixed_index_size;
441+
uint64_t fixed_index_size = fic.getMemoryUsage().usedBytes();
442+
uint64_t index_size = fic.getMemoryUsage().usedBytes() - fixed_index_size;
443443
/// Must account for both docid 0 being reserved and the extra after.
444444
uint64_t selector_size = (1) * sizeof(Source);
445445
EXPECT_EQ(index_size, _index_manager->getMaintainer().getFlushStats().memory_before_bytes -
@@ -450,7 +450,7 @@ TEST_F(IndexManagerTest, require_that_flush_stats_are_calculated) {
450450
Document::UP doc = addDocument(docid);
451451
inverter.invertDocument(docid, *doc, {});
452452
push_documents_and_wait(inverter);
453-
index_size = fic.getMemoryUsage().allocatedBytes() - fixed_index_size;
453+
index_size = fic.getMemoryUsage().usedBytes() - fixed_index_size;
454454

455455
/// Must account for both docid 0 being reserved and the extra after.
456456
selector_size = (docid + 1) * sizeof(Source);
@@ -462,10 +462,11 @@ TEST_F(IndexManagerTest, require_that_flush_stats_are_calculated) {
462462

463463
doc = addDocument(docid + 10);
464464
inverter.invertDocument(docid + 10, *doc, {});
465+
push_documents_and_wait(inverter);
465466
auto doc100 = addDocument(docid + 100);
466467
inverter.invertDocument(docid + 100, *doc100, {});
467468
push_documents_and_wait(inverter);
468-
index_size = fic.getMemoryUsage().allocatedBytes() - fixed_index_size;
469+
index_size = fic.getMemoryUsage().usedBytes() - fixed_index_size;
469470
/// Must account for both docid 0 being reserved and the extra after.
470471
selector_size = (docid + 100 + 1) * sizeof(Source);
471472
EXPECT_EQ(index_size, _index_manager->getMaintainer().getFlushStats().memory_before_bytes -

searchcore/src/vespa/searchcorespi/index/indexmaintainer.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ class ReconfigRunnableTask : public Executor::Task {
8787

8888
ReconfigRunnableTask::~ReconfigRunnableTask() = default;
8989

90+
uint64_t transient_memory_usage(uint64_t memory_used, uint64_t static_memory_footprint) {
91+
return memory_used >= static_memory_footprint ? memory_used - static_memory_footprint : 0;
92+
}
93+
9094
SerialNum noSerialNumHigh = std::numeric_limits<SerialNum>::max();
9195

9296
} // namespace
@@ -956,11 +960,11 @@ IndexMaintainer::FlushStats IndexMaintainer::getFlushStats() const {
956960
{
957961
LockGuard lock(_index_update_lock);
958962
source_selector_bytes = _selector->getDocIdLimit() * sizeof(Source);
959-
stats.memory_before_bytes += _current_index->getMemoryUsage().allocatedBytes() + source_selector_bytes;
963+
stats.memory_before_bytes += _current_index->getMemoryUsage().usedBytes() + source_selector_bytes;
960964
stats.memory_after_bytes += _current_index->getStaticMemoryFootprint() + source_selector_bytes;
961965
numFrozen = _frozenMemoryIndexes.size();
962966
for (const FrozenMemoryIndexRef& frozen : _frozenMemoryIndexes) {
963-
stats.memory_before_bytes += frozen._index->getMemoryUsage().allocatedBytes() + source_selector_bytes;
967+
stats.memory_before_bytes += frozen._index->getMemoryUsage().usedBytes() + source_selector_bytes;
964968
}
965969
source_selector_changes = _source_selector_changes;
966970
}
@@ -1189,8 +1193,10 @@ search::IndexStats IndexMaintainer::get_index_stats(bool clear_disk_io_stats) co
11891193
ResourceUsage IndexMaintainer::get_resource_usage() const {
11901194
auto disk_indexes_resource_usage = _disk_indexes->get_resource_usage(*_layout);
11911195
auto stats = get_index_stats(false);
1196+
auto memory_index_transient_memory_usage =
1197+
transient_memory_usage(stats.memoryUsage().usedBytes(), _current_index->getStaticMemoryFootprint());
11921198
return ResourceUsage{
1193-
TransientResourceUsage{disk_indexes_resource_usage.transient().disk(), stats.memoryUsage().allocatedBytes()},
1199+
TransientResourceUsage{disk_indexes_resource_usage.transient().disk(), memory_index_transient_memory_usage},
11941200
disk_indexes_resource_usage.disk()};
11951201
}
11961202

searchlib/src/tests/memoryindex/memory_index/memory_index_test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,14 +434,14 @@ TEST(MemoryIndexTest, require_that_we_understand_the_memory_footprint) {
434434
}
435435
{
436436
Index index(MySetup().field("f1"));
437-
EXPECT_EQ(BASE_ALLOCATED, index.index.getStaticMemoryFootprint());
438-
EXPECT_EQ(index.index.getStaticMemoryFootprint(), index.index.getMemoryUsage().allocatedBytes());
437+
EXPECT_EQ(BASE_ALLOCATED, index.index.getMemoryUsage().allocatedBytes());
438+
EXPECT_EQ(index.index.getStaticMemoryFootprint(), index.index.getMemoryUsage().usedBytes());
439439
EXPECT_EQ(BASE_USED, index.index.getMemoryUsage().usedBytes());
440440
}
441441
{
442442
Index index(MySetup().field("f1").field("f2"));
443-
EXPECT_EQ(2 * BASE_ALLOCATED, index.index.getStaticMemoryFootprint());
444-
EXPECT_EQ(index.index.getStaticMemoryFootprint(), index.index.getMemoryUsage().allocatedBytes());
443+
EXPECT_EQ(2 * BASE_ALLOCATED, index.index.getMemoryUsage().allocatedBytes());
444+
EXPECT_EQ(index.index.getStaticMemoryFootprint(), index.index.getMemoryUsage().usedBytes());
445445
EXPECT_EQ(2 * BASE_USED, index.index.getMemoryUsage().usedBytes());
446446
EXPECT_EQ(2 * BASE_USED, index.index.get_stats().memoryUsage().usedBytes());
447447
EXPECT_EQ(BASE_USED, get_field_stats(index.index.get_stats(), "f1").memory_usage().usedBytes());

searchlib/src/vespa/searchlib/memoryindex/memory_index.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ MemoryIndex::MemoryIndex(const Schema& schema, const IFieldLengthInspector& insp
7373
_hiddenFields(schema.getNumIndexFields(), false),
7474
_prunedSchema(),
7575
_indexedDocs(0),
76-
_staticMemoryFootprint(getMemoryUsage().allocatedBytes()) {
76+
_staticMemoryFootprint(getMemoryUsage().usedBytes()) {
7777
}
7878

7979
MemoryIndex::~MemoryIndex() = default;

0 commit comments

Comments
 (0)