https://github.com/vitalybuka created 
https://github.com/llvm/llvm-project/pull/231058

A single 100 MiB __msan_memset faults in all 100 MiB of user pages before
SetShadow unmaps the corresponding shadow and origin pages. Under heavy test
parallelism on 192-CPU ppc64le (64 KiB pages, 24 MiB per-CPU RSS counter
batch), this causes two problems:
1. BackgroundThread (polling every 100 ms) can sample GetRSS() mid-memset
   during the temporary +100 MiB RSS spike before shadow/origin pages are
   unmapped.
2. If the thread migrates across CPUs during the 100 MiB user page faults,
   earlier CPUs retain partial positive per-CPU RSS batches while the single
   MmapFixedSuperNoReserve syscall unmaps all 100 MiB of shadow on the final
   CPU, causing global /proc/self/statm RSS to drop prematurely in non-origin
   mode.

Splitting the memset into 1 MiB chunks bounds the transient RSS spike to 1 MiB
and pairs each chunk's user page faults with its shadow/origin unmap on the
same CPU.

Assisted-by: Gemini



_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to