[C API] Reuse slots freed by consolidate in svs_index_dynamic_add_points
I maintainer di solito rispondono entro 5 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- backend, performance
Direzione di ricerca
Read include/svs/index/vamana/dynamic_index.h around add_points, consolidate, and the first_empty_ TODO, then trace the C API add path in bindings/c/src/index_vamana.cpp. Compare the proposed reuse approaches and check how they avoid an O(N) scan per add. Done means consolidated slots are reused through the C API without that per-add scan; review existing dynamic-index tests for coverage.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Through the C API, slots freed by svs_index_dynamic_consolidate are never reused by svs_index_dynamic_add_points, so a dynamic index that sees deletes or updates keeps growing until it is compacted. Please make consolidated slots reusable by the C API's add path.
Details (at cde3771)
delete_entriesmarks slotsDeleted;consolidate()repairs the graph and turns themEmpty(include/svs/index/vamana/dynamic_index.h:1105-1108).add_pointslooks forEmptyslots starting atreuse_empty ? 0 : first_empty_(dynamic_index.h:772).first_empty_only moves up (:843) and is reset only bycompact()(:992). The constructor carries a TODO about this logic (:369-372).- The C++ orchestrator exposes
reuse_empty(include/svs/orchestrators/dynamic_vamana.h:80), but the C API'sDynamicIndexVamana::add_pointscallsindex.add_points(new_points, ids)without it (bindings/c/src/index_vamana.cpp:187), andsvs_index_dynamic_add_pointshas no way to request it.
So through the C API, consolidation repairs search but doesn't stop growth: every add after a delete appends a new slot.
Measured (valkey-search, ALGORITHM SVS_VAMANA)
2,000 vectors, DIM 128, then 100k updates (each a delete plus an add):
| Memory after churn | Search latency after churn | |
|---|---|---|
| No consolidation | 104 MiB (from 26 MiB) | 3.87 ms |
| Consolidate only | 104 MiB | 0.75 ms |
| Consolidate + compact | 26 MiB | 0.92 ms |
To bound memory we currently run svs_index_dynamic_compact after every consolidation. That copies every live vector and rewrites the graph, under an exclusive lock.
Ask
Let the C API's add path reuse slots that consolidation freed, without an O(N) scan per add. For example:
- Have
consolidate()lowerfirst_empty_to the first slot it freed, so the defaultadd_pointspath reuses them (this looks like what the TODO at:369-372is about); or - Expose
reuse_emptyin the C API (a parameter onsvs_index_dynamic_add_points, or a dynamic-index option). As implemented it rescans from slot 0 on every add, though, which would cost append-heavy workloads.
With either, valkey-search would consolidate only, and compact only when it wants memory back.
Consumer context
valkey-search builds SVS from the C API submodule, pinned at cde3771. The consolidate + compact workaround is eshenayo/valkey-search#24.
- Lingua principale
- C++
- Stelle
- 241
- Fork
- 48
- Merge medio
- 4g 21h
- PR unite (30g)
- 11
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di intel/ScalableVectorSearch
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
intel/ScalableVectorSearch#356 ·
I maintainer di solito rispondono entro 5 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
intel/ScalableVectorSearch#469 ·
I maintainer di solito rispondono entro 5 giorni
-
Add CI test for C API on ARMApertaenhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 32/100
intel/ScalableVectorSearch#460 ·
I maintainer di solito rispondono entro 5 giorni
-
CI: tier the test matrix into PR / main / nightly to cut Actions minutesForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 32/100
intel/ScalableVectorSearch#432 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
intel/ScalableVectorSearch#427 ·
I maintainer di solito rispondono entro 5 giorni
Tutte le issue di intel/ScalableVectorSearch
Issue simili
-
runtime: lf_f128_mod is documented as fmodq (truncating) but implements floor-based modulo; unusedApertainternal correctness low priority rt_lib
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 87/100
-
PriorityNotificationQueue::wakeUpAll() loses the wake-up for a thread that is not waiting yetForse già presa @matejk l’ha presa oggi. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pocoproject/poco#5674 ·
I maintainer di solito rispondono entro 2 giorni
-
bug docs GUI
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
sonic-pi-net/sonic-pi#3609 ·
-
Unreachable code warningApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
SanderMertens/flecs#2395 ·
I maintainer di solito rispondono entro 1 giorno