aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2013-08-23 16:21:17 +0200
committerSverker Eriksson <[email protected]>2013-08-23 16:21:17 +0200
commitf47f8e3813a6dda5db94c9704c74e8a809dd2313 (patch)
tree034eb5300b4e3e37fb7d486228ec6d767d56cf4f
parent8cece79b77952c991e62ae595bcf71cde016a052 (diff)
downloadotp-f47f8e3813a6dda5db94c9704c74e8a809dd2313.tar.gz
otp-f47f8e3813a6dda5db94c9704c74e8a809dd2313.tar.bz2
otp-f47f8e3813a6dda5db94c9704c74e8a809dd2313.zip
erts: Speed up valgrind with asynch threads
by only letting it run on one core. Valgrind only let one thread at a time execute anyway.
-rw-r--r--erts/etc/unix/cerl.src15
1 files changed, 14 insertions, 1 deletions
diff --git a/erts/etc/unix/cerl.src b/erts/etc/unix/cerl.src
index 0d45917e4b..41baa323ed 100644
--- a/erts/etc/unix/cerl.src
+++ b/erts/etc/unix/cerl.src
@@ -283,6 +283,19 @@ if [ "x$GDB" = "x" ]; then
else
valgrind_misc_flags="$VALGRIND_MISC_FLAGS"
fi
+ if which taskset > /dev/null && test -e /proc/cpuinfo; then
+ # We only let valgrind utilize one core with "taskset 1" as it can be very slow
+ # on multiple cores (especially with async threads). Valgrind only run one pthread
+ # at a time anyway so there is no point letting it utilize more than one core.
+ # Use $sched_arg to force all schedulers online to emulate multicore.
+ taskset1="taskset 1"
+ ncpu=`cat /proc/cpuinfo | grep -w processor | wc -l`
+ sched_arg="-S$ncpu:$ncpu"
+ else
+ taskset1=
+ sched_arg=
+ fi
+
beam_args=`$EXEC -emu_args_exit ${1+"$@"}`
# Time for some argument passing voodoo:
@@ -293,7 +306,7 @@ if [ "x$GDB" = "x" ]; then
'
set -- $beam_args
IFS="$SAVE_IFS"
- exec valgrind $valgrind_xml $valgrind_log $valgrind_misc_flags $BINDIR/$EMU_NAME $emu_xargs "$@" -pz $PRELOADED
+ exec $taskset1 valgrind $valgrind_xml $valgrind_log $valgrind_misc_flags $BINDIR/$EMU_NAME $sched_arg $emu_xargs "$@" -pz $PRELOADED
else
exec $EXEC $eeargs $xargs ${1+"$@"}
fi