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

Reply via email to