MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / prefetch

Method prefetch

nodedb-vector/src/mmap_segment/reader.rs:395–425  ·  view source on GitHub ↗

Prefetch a vector's page into memory via `madvise(MADV_WILLNEED)`.

(&self, id: u32)

Source from the content-addressed store, hash-verified

393
394 /// Prefetch a vector's page into memory via `madvise(MADV_WILLNEED)`.
395 pub fn prefetch(&self, id: u32) {
396 let idx = id as usize;
397 if idx >= self.count {
398 return;
399 }
400 let byte_len = match self.dim.checked_mul(4) {
401 Some(v) => v,
402 None => return,
403 };
404 let Some(idx_bytes) = idx.checked_mul(byte_len) else {
405 return;
406 };
407 let Some(offset) = self.vec_offset.checked_add(idx_bytes) else {
408 return;
409 };
410 if offset
411 .checked_add(byte_len)
412 .is_none_or(|e| e > self.sid_offset)
413 {
414 return;
415 }
416 let page_start = offset & !(4095);
417 let len = (byte_len + 4095) & !(4095);
418 unsafe {
419 libc::madvise(
420 self.base.add(page_start) as *mut libc::c_void,
421 len,
422 libc::MADV_WILLNEED,
423 );
424 }
425 }
426
427 /// Prefetch a batch of vector IDs.
428 pub fn prefetch_batch(&self, ids: &[u32]) {

Callers 2

prefetch_batchMethod · 0.45
prefetch_does_not_crashFunction · 0.45

Calls 1

addMethod · 0.45

Tested by 1

prefetch_does_not_crashFunction · 0.36