[compiler-rt] f1ac559 - Revert "[scudo] Use getMonotonicTimeFast for tryLock." (#86590)

via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 27 11:30:12 PDT 2024


Author: ChiaHungDuan
Date: 2024-03-27T11:30:08-07:00
New Revision: f1ac559534788f8dd42191b60dfdf9cc56b39fd4

URL: https://github.com/llvm/llvm-project/commit/f1ac559534788f8dd42191b60dfdf9cc56b39fd4
DIFF: https://github.com/llvm/llvm-project/commit/f1ac559534788f8dd42191b60dfdf9cc56b39fd4.diff

LOG: Revert "[scudo] Use getMonotonicTimeFast for tryLock." (#86590)

This reverts commit 36ca9a29025a2f678096e9545fa2ec44e8432592.

We were using the `time` as the seed while choosing a new TSD. To make
the access of TSDs evenly distributed, we require a higher precision in
`time`. Otherwise, many threads may result in having the same random
access pattern on TSDs because they share the same `time` in certain
period. On Linux, CLOCK_MONOTONIC_COARSE usually adopts 4 ms precision.
This is way higher than the average accessing time of TSD (which is
usually less than 1 us). As a result, when multiple threads try to
select a new TSD in a 4 ms interval, they share the same `time` seed and
end up choosing and congesting on the same TSD.

Added: 
    

Modified: 
    compiler-rt/lib/scudo/standalone/tsd.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/scudo/standalone/tsd.h b/compiler-rt/lib/scudo/standalone/tsd.h
index b2108a01900bcc..72773f2f72b116 100644
--- a/compiler-rt/lib/scudo/standalone/tsd.h
+++ b/compiler-rt/lib/scudo/standalone/tsd.h
@@ -41,9 +41,9 @@ template <class Allocator> struct alignas(SCUDO_CACHE_LINE_SIZE) TSD {
       return true;
     }
     if (atomic_load_relaxed(&Precedence) == 0)
-      atomic_store_relaxed(&Precedence,
-                           static_cast<uptr>(getMonotonicTimeFast() >>
-                                             FIRST_32_SECOND_64(16, 0)));
+      atomic_store_relaxed(
+          &Precedence,
+          static_cast<uptr>(getMonotonicTime() >> FIRST_32_SECOND_64(16, 0)));
     return false;
   }
   inline void lock() NO_THREAD_SAFETY_ANALYSIS {


        


More information about the llvm-commits mailing list