Skip to content

Commit 47415b3

Browse files
committed
Adds graph build time metrics in NativeEngines990KnnVectorsWriter
Signed-off-by: Tejas Shah <[email protected]>
1 parent 2b303d9 commit 47415b3

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

src/main/java/org/opensearch/knn/index/codec/KNN990Codec/NativeEngines990KnnVectorsWriter.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
import org.apache.lucene.index.Sorter;
2525
import org.apache.lucene.util.IOUtils;
2626
import org.apache.lucene.util.RamUsageEstimator;
27+
import org.opensearch.common.StopWatch;
2728
import org.opensearch.knn.index.quantizationservice.QuantizationService;
2829
import org.opensearch.knn.index.VectorDataType;
2930
import org.opensearch.knn.index.codec.nativeindex.NativeIndexWriter;
3031
import org.opensearch.knn.index.vectorvalues.KNNVectorValues;
3132
import org.opensearch.knn.index.vectorvalues.KNNVectorValuesFactory;
33+
import org.opensearch.knn.plugin.stats.KNNGraphValue;
3234
import org.opensearch.knn.quantization.models.quantizationParams.QuantizationParams;
3335
import org.opensearch.knn.quantization.models.quantizationState.QuantizationState;
3436

@@ -45,6 +47,10 @@
4547
@RequiredArgsConstructor
4648
public class NativeEngines990KnnVectorsWriter extends KnnVectorsWriter {
4749
private static final long SHALLOW_SIZE = RamUsageEstimator.shallowSizeOfInstance(NativeEngines990KnnVectorsWriter.class);
50+
51+
private static final String FLUSH_OPERATION = "flush";
52+
private static final String MERGE_OPERATION = "merge";
53+
4854
private final SegmentWriteState segmentWriteState;
4955
private final FlatVectorsWriter flatVectorsWriter;
5056
private final List<NativeEngineFieldVectorsWriter<?>> fields = new ArrayList<>();
@@ -78,7 +84,9 @@ public void flush(int maxDoc, final Sorter.DocMap sortMap) throws IOException {
7884
field.getFieldInfo(),
7985
(vectorDataType, fieldInfo, fieldVectorsWriter) -> getKNNVectorValues(vectorDataType, fieldVectorsWriter),
8086
NativeIndexWriter::flushIndex,
81-
field
87+
field,
88+
KNNGraphValue.REFRESH_TOTAL_TIME_IN_MILLIS,
89+
FLUSH_OPERATION
8290
);
8391
}
8492
}
@@ -88,7 +96,14 @@ public void mergeOneField(final FieldInfo fieldInfo, final MergeState mergeState
8896
// This will ensure that we are merging the FlatIndex during force merge.
8997
flatVectorsWriter.mergeOneField(fieldInfo, mergeState);
9098
// For merge, pick values from flat vector and reindex again. This will use the flush operation to create graphs
91-
trainAndIndex(fieldInfo, this::getKNNVectorValuesForMerge, NativeIndexWriter::mergeIndex, mergeState);
99+
trainAndIndex(
100+
fieldInfo,
101+
this::getKNNVectorValuesForMerge,
102+
NativeIndexWriter::mergeIndex,
103+
mergeState,
104+
KNNGraphValue.MERGE_TOTAL_TIME_IN_MILLIS,
105+
MERGE_OPERATION
106+
);
92107

93108
}
94109

@@ -214,7 +229,9 @@ private <T, C> void trainAndIndex(
214229
final FieldInfo fieldInfo,
215230
final VectorValuesRetriever<VectorDataType, FieldInfo, C, KNNVectorValues<T>> vectorValuesRetriever,
216231
final IndexOperation<T> indexOperation,
217-
final C VectorProcessingContext
232+
final C VectorProcessingContext,
233+
final KNNGraphValue graphBuildTime,
234+
final String operationName
218235
) throws IOException {
219236
final VectorDataType vectorDataType = extractVectorDataType(fieldInfo);
220237
KNNVectorValues<T> knnVectorValues = vectorValuesRetriever.apply(vectorDataType, fieldInfo, VectorProcessingContext);
@@ -228,6 +245,12 @@ private <T, C> void trainAndIndex(
228245
: NativeIndexWriter.getWriter(fieldInfo, segmentWriteState);
229246

230247
knnVectorValues = vectorValuesRetriever.apply(vectorDataType, fieldInfo, VectorProcessingContext);
248+
249+
StopWatch stopWatch = new StopWatch();
250+
stopWatch.start();
231251
indexOperation.buildAndWrite(writer, knnVectorValues);
252+
long time_in_millis = stopWatch.totalTime().millis();
253+
graphBuildTime.set(graphBuildTime.getValue() + time_in_millis);
254+
log.warn("Graph build took " + time_in_millis + " ms for " + operationName);
232255
}
233256
}

0 commit comments

Comments
 (0)