jpountz commented on code in PR #13196: URL: https://github.com/apache/lucene/pull/13196#discussion_r1535326207
########## lucene/core/src/java21/org/apache/lucene/store/MemorySegmentIndexInputProvider.java: ########## @@ -92,10 +110,22 @@ private final MemorySegment[] map( } if (preload) { segment.load(); + } else if (segSize > 0L && advice.isPresent()) { // not when preloading! + nativeAccess.madvise(segment, advice.getAsInt()); } segments[segNr] = segment; startOffset += segSize; } return segments; } + + private OptionalInt mapContextToMadvise(IOContext context) { + if (context.randomAccess) { + return OptionalInt.of(NativeAccess.POSIX_MADV_RANDOM); + } + if (context.readOnce || context.context == Context.MERGE) { Review Comment: HNSW merging is fine because the first thing that merging does it to write all vectors to a temporary file. And then it builds the graph on top of this temporary file. So it's ok for the input segments to read sequentially, and we could update the merging logic to open this temporary file with `IOContext.RANDOM` since it's the one that will have a random access pattern. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org