@@ -253,19 +253,26 @@ void BM_VecSimCommon<index_type_t>::TopK_HNSW_DISK_DeleteLabel(benchmark::State
253253 std::uniform_int_distribution<size_t > dist (0 , stratum_size - 1 );
254254 labelType label = stratum_start + dist (rng);
255255 deleted_labels.push_back (label);
256- // Use deleteVector instead of markDelete - this processes batch and repairs graph
257- disk_index->deleteVector (label);
258256 }
259257
258+ // Measure the time spent on deleteVector calls (includes batch merge every 10 vectors)
259+ auto delete_start = std::chrono::high_resolution_clock::now ();
260+ for (const auto &label : deleted_labels) {
261+ disk_index->deleteVector (label);
262+ }
260263 // Force flush any pending deletes to ensure graph is fully repaired
261264 disk_index->flushDeleteBatch ();
265+ auto delete_end = std::chrono::high_resolution_clock::now ();
266+ double delete_time_ms = std::chrono::duration<double , std::milli>(delete_end - delete_start).count ();
262267
263268 // Create hash set for O(1) lookup during ground truth filtering
264269 // With up to 50K deleted labels, this avoids O(n) linear search overhead
265270 std::unordered_set<labelType> deleted_labels_set (deleted_labels.begin (), deleted_labels.end ());
266271
267272 size_t total_deleted = deleted_labels.size ();
268273 st.counters [" num_deleted" ] = total_deleted;
274+ st.counters [" delete_time_ms" ] = delete_time_ms;
275+ st.counters [" delete_time_per_vector_ms" ] = delete_time_ms / total_deleted;
269276
270277 // Get DB statistics before benchmark
271278 auto stats = disk_index->getDBStatistics ();
0 commit comments