tsan: advise shadow for 0x7f region to not use huge pages
authorDmitry Vyukov <dvyukov@google.com>
Sat, 26 Jul 2014 17:41:10 +0000 (17:41 +0000)
committerDmitry Vyukov <dvyukov@google.com>
Sat, 26 Jul 2014 17:41:10 +0000 (17:41 +0000)
see the comment for justification

llvm-svn: 214030

compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc

index ec20d68..2763b74 100644 (file)
@@ -228,6 +228,12 @@ void InitializeShadowMemory() {
                "to link with -pie (%p, %p).\n", shadow, kLinuxShadowBeg);
     Die();
   }
+  // This memory range is used for thread stacks and large user mmaps.
+  // Frequently a thread uses only a small part of stack and similarly
+  // a program uses a small part of large mmap. On some programs
+  // we see 20% memory usage reduction without huge pages for this range.
+  madvise((void*)MemToShadow(0x7f0000000000ULL),
+      0x10000000000ULL * kShadowMultiplier, MADV_NOHUGEPAGE);
   DPrintf("memory shadow: %zx-%zx (%zuGB)\n",
       kLinuxShadowBeg, kLinuxShadowEnd,
       (kLinuxShadowEnd - kLinuxShadowBeg) >> 30);