Skip to content

Commit

Permalink
Enable mini-benchmark to run with perf
Browse files Browse the repository at this point in the history
The mini-benchmark.sh script failed to run in the latest Fedora
distributions in GitLab CI. Executing the benchmark inside a Docker
container had failed because the check for `perf` was done in a way that
caused the benchmark to exit because of the `set -e` option. Test and
skip `perf` to allowing the remaining benchmark activities to proceed.

This check was added in acb6684 but inadvertantly reverted in 42a1f94.

Logic was corrected to only run perf when the flag is enabled, and to
prevent perf stat and perf record from being simultaneously enabled.

Set -ex is also added to enable easier identification of mini-benchmark
issues in the future.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
  • Loading branch information
robinnewhouse authored and ottok committed Mar 28, 2024
1 parent 0c6cac0 commit 6efa75a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 13 deletions.
4 changes: 2 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -510,9 +510,9 @@ mini-benchmark:
- |
mariadb --skip-column-names -e "SELECT @@version, @@version_comment" | tee /tmp/version
grep $MARIADB_MAJOR_VERSION /tmp/version || echo "MariaDB didn't install properly"
- yum install -y sysbench procps-ng perf util-linux || yum install -y https://kojipkgs.fedoraproject.org//packages/luajit/2.0.4/3.el7/x86_64/luajit-2.0.4-3.el7.x86_64.rpm https://kojipkgs.fedoraproject.org//packages/sysbench/1.0.17/2.el7/x86_64/sysbench-1.0.17-2.el7.x86_64.rpm https://kojipkgs.fedoraproject.org//packages/ck/0.5.2/2.el7/x86_64/ck-0.5.2-2.el7.x86_64.rpm
- yum install -y sysbench procps-ng perf flamegraph flamegraph-stackcollapse-perf util-linux dnf-utils
- /usr/share/mysql/mini-benchmark
- cp -av */sysbench-run-*.log */metrics.txt .. # Move files one level down so they can be saved as artifacts
- cp -av */sysbench-run-*.log */metrics.txt . # Move files one level down so they can be saved as artifacts
artifacts:
when: always
paths:
Expand Down
26 changes: 15 additions & 11 deletions support-files/mini-benchmark.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/bin/bash
# Abort on errors
set -e
set -ex

display_help() {
echo "Usage: $(basename "$0") [-h] [--perf] [--perf-flamegraph]"
Expand Down Expand Up @@ -121,6 +121,12 @@ then
exit 1
fi

if [ "$PERF" == true ] && [ "$PERF_RECORD" == true ]
then
echo "ERROR: Cannot select both --perf and --perf-flamegraph options simultaneously. Please choose one or the other."
exit 1
fi

if [ "$PERF" == true ] || [ "$PERF_RECORD" == true ]
then
if [ ! -e /usr/bin/perf ]
Expand Down Expand Up @@ -158,28 +164,26 @@ then
# shellcheck disable=SC2046
debuginfo-install -y mariadb-server $(cat mariadbd-dependencies.txt)

perf record echo "testing perf" > /dev/null 2>&1
if [ $? -ne 0 ]
if ! (perf record echo "testing perf") > /dev/null 2>&1
then
echo "perf does not have permission to run on this system. Skipping."
PERF=""
PERF_COMMAND=""
else
echo "Using 'perf' to record performance counters in perf.data files"
PERF="perf record -g --freq=99 --output=perf.data --timestamp-filename --pid=$MARIADB_SERVER_PID --"
PERF_COMMAND="perf record -g --freq=99 --output=perf.data --timestamp-filename --pid=$MARIADB_SERVER_PID --"
fi

elif [ -e /usr/bin/perf ]
elif [ "$PERF" == true ]
then
# If flamegraphs were not requested, log normal perf counters if possible

perf stat echo "testing perf" > /dev/null 2>&1
if [ $? -ne 0 ]
if ! (perf stat echo "testing perf") > /dev/null 2>&1
then
echo "perf does not have permission to run on this system. Skipping."
PERF=""
PERF_COMMAND=""
else
echo "Using 'perf' to log basic performance counters for benchmark"
PERF="perf stat -p $MARIADB_SERVER_PID --"
PERF_COMMAND="perf stat -p $MARIADB_SERVER_PID --"
fi
fi

Expand Down Expand Up @@ -222,7 +226,7 @@ do
# Prepend command with perf if defined
# Output stderr to stdout as perf outputs everything in stderr
# shellcheck disable=SC2086
$PERF $TASKSET_SYSBENCH sysbench "$WORKLOAD" run --threads=$t --time=$DURATION --report-interval=10 2>&1 | tee sysbench-run-$t.log
$PERF_COMMAND $TASKSET_SYSBENCH sysbench "$WORKLOAD" run --threads=$t --time=$DURATION --report-interval=10 2>&1 | tee sysbench-run-$t.log
done

sysbench "$WORKLOAD" cleanup --tables=20 | tee sysbench-cleanup.log
Expand Down

0 comments on commit 6efa75a

Please sign in to comment.