Limit perf data buffer during profiling
authorAndi Kleen <ak@linux.intel.com>
Fri, 12 May 2017 10:09:50 +0000 (10:09 +0000)
committerAndi Kleen <ak@gcc.gnu.org>
Fri, 12 May 2017 10:09:50 +0000 (10:09 +0000)
With high -j parallelism the autofdo tests can randomly fail.
autofdo uses Linux perf to record profiling data.
Linux perf uses a locked perf buffer. By default it has
around 516k buffer per uid (/proc/sys/kernel/perf_event_mlock_kb).

An individual perf record tries to grab the full 516k,
which makes parallel perf record fail.

This patch limits the perf buffer for individual perf record to 8k.
With the default settings this allows a parallelism of the test
cases of 16, which is hopefully good enough

(if not would need to add some kind of semaphore, or ask
the user to increase the limit as root)

I also removed an unneeded -o perf.data option

Thanks to Marcin to finally spotting the problem.

Passes bootstrap and test on x86_64-linux. Ok for trunk?

gcc/testsuite/:

2017-05-12  Andi Kleen  <ak@linux.intel.com>

PR testsuite/77684
* lib/target-supports.exp (profopt-perf-wrapper):
Add -m8 option to increase parallelism.

From-SVN: r247962

gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 13241be7df4af280e09d89bb3fbdd12d07ad53d5..7b73b92759e860dc7d022d3e26e3de5b5f61b274 100644 (file)
@@ -1,3 +1,9 @@
+2017-05-12  Andi Kleen  <ak@linux.intel.com>
+
+       PR testsuite/77684
+       * lib/target-supports.exp (profopt-perf-wrapper):
+       Add -m8 option to increase parallelism.
+
 2017-05-12  Thomas Schwinge  <thomas@codesourcery.com>
 
        * c-c++-common/goacc/parallel-dims-1.c: New file.
index 83e7f2670e6279f3c293cbda8692686724c67c24..ded6383cc1f9a1489cd83e1dace0c2fc48e252c3 100644 (file)
@@ -522,9 +522,16 @@ proc check_effective_target_keeps_null_pointer_checks { } {
 
 # Return the autofdo profile wrapper
 
+# Linux by default allows 516KB of perf event buffers
+# in /proc/sys/kernel/perf_event_mlock_kb
+# Each individual perf tries to grab it
+# This causes problems with parallel test suite runs. Instead
+# limit us to 8 pages (32K), which should be good enough
+# for the small test programs. With the default settings 
+# this allows parallelism of 16 and higher of parallel gcc-auto-profile
 proc profopt-perf-wrapper { } {
     global srcdir
-    return "$srcdir/../config/i386/gcc-auto-profile -o perf.data "
+    return "$srcdir/../config/i386/gcc-auto-profile -o perf.data -m8 "
 }
 
 # Return true if profiling is supported on the target.