[lld] [lld][MachO] Follow-up to use madvise() for threaded file page-in. (PR #157917)

Alexandre Ganea via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 11 04:31:25 PDT 2025


================
@@ -334,29 +338,37 @@ class SerialBackgroundQueue {
 // This code forces the page-ins on multiple threads so
 // the process is not stalled waiting on disk buffer i/o.
 void multiThreadedPageInBackground(DeferredFiles &deferred) {
+  using namespace std::chrono;
   static const size_t pageSize = Process::getPageSizeEstimate();
   static const size_t largeArchive = 10 * 1024 * 1024;
-#ifndef NDEBUG
-  using namespace std::chrono;
-  std::atomic_int numDeferedFilesTouched = 0;
   static std::atomic_uint64_t totalBytes = 0;
+  std::atomic_int numDeferedFilesAdvised = 0;
   auto t0 = high_resolution_clock::now();
-#endif
 
   auto preloadDeferredFile = [&](const DeferredFile &deferredFile) {
     const StringRef &buff = deferredFile.buffer.getBuffer();
     if (buff.size() > largeArchive)
       return;
-#ifndef NDEBUG
+    if (((uintptr_t)buff.data() & (pageSize - 1)))
+      return; // Not mmap()'d (not page aligned).
----------------
aganea wrote:

The docs for PrefetchVirtualMemory don’t mention any alignement. As for `madvise`, the easiest I suppose would be to round up ourselves the pointer we have on `pageSize`(and same for the size).

https://github.com/llvm/llvm-project/pull/157917


More information about the llvm-commits mailing list