blob: 553f02adeb1686148db77b8f2923bcef6777ec6e [file] [log] [blame]
# Auto generated by ./tcwg/generate-yamlfiles.sh from tcwg-benchmark.yaml.in and tcwg-benchmark/tcwg-benchmark_backend.def. Do not edit.
#BEGIN: tcwg/default.yaml.inc
# -*- mode: Yaml -*-
- property:
name: default-properties
properties:
- authorization:
anonymous:
- job-read
- job-extended-read
everyone-flat:
- job-build
- job-cancel
# Allow users in tcwg-benchmark group (e.g., tcwg-buildslave)
# start and stop builds. We use this in tcwg_bmk* CI loops.
tcwg-benchmark:
- job-build
- job-cancel
- build-discarder:
days-to-keep: 20
- scm:
name: jenkins-scripts
scm:
- git:
url: https://gitlab.com/Linaro/tcwg/jenkins-scripts.git
refspec: +refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*
branches:
- $scripts_branch
basedir: jenkins-scripts
skip-tag: true
reference-repo: /home/tcwg-buildslave/snapshots-ref/jenkins-scripts.git
wipe-workspace: false
clean:
before: true
prune: true
- scm:
name: bmk-scripts
scm:
- git:
url: https://gitlab.com/Linaro/tcwg/bmk-scripts.git
refspec: +refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*
branches:
- $bmk_branch
basedir: bmk-scripts
skip-tag: true
reference-repo: /home/tcwg-buildslave/snapshots-ref/bmk-scripts.git
wipe-workspace: false
clean:
before: true
prune: true
#END: tcwg/default.yaml.inc
- job:
name: tcwg-benchmark_backend
project-type: freestyle
defaults: global
properties:
- default-properties
parameters:
- choice:
name: bmk_hw
choices:
- apm
- sq
- stm32
- tk1
- tx1
- fx
- qc
description: 'Hardware to use for benchmarking'
- string:
name: toolchain_url
default: ''
description: |
Toolchain URL. Either http[s]://xxx.tar.xz,
rsync://machine:/path/bin/target-triplet-, or
ssh://machine/path/compiler. You need to specify 'builder'
setting below when using non-ssh:// toolchain_urls.
- choice:
name: toolchain_type
choices:
- auto
- gnu
- llvm
- string:
name: sysroot
default: 'tarball'
description: 'Rsync-friendly path to the sysroot to run against; use libs from toolchain_url tarball/rsync if "tarball"; use system libs if empty'
- string:
name: bench_list
default: 'all'
description: 'List of benchmarks to run. Can be for ex : all (i.e. spec2006), spec2017_speed, or coremark'
- string:
name: cflags
default: ''
description: 'CFLAGS to use'
- string:
name: ldflags
default: 'default'
description: 'LDFLAGS to use'
- choice:
name: extension
choices:
- default
- O2
- O3
- O2g
- O3g
- Ofast
- Os
description: 'Compilation profile'
- choice:
name: testmode
choices:
- verify
- build
- benchmark
description: 'Whether to just build or run full benchmarks'
- string:
name: iterations
default: '1'
description: 'Number of benchmark iterations'
- string:
name: results_dest
default: 'bkp-01.tcwglab:/home/tcwg-benchmark/results-@hw_tag@/tcwg-benchmark/@build_num@'
description: 'Destination where to push results..'
- bool:
name: forceinstall
default: 'false'
description: 'Force clean re-install of benchmark sources'
- choice:
name: run_profile
choices:
- parallel_0x4
- parallel
- serial
description: |
parallel_0x4 - Build benchmark in parallel (all CPU cores), Run benchmark in parallel (max 4)
parallel - Run benchmarks in parallel on all CPU cores.
serial - Run benchmarks serially on a single CPU core.
- choice:
name: board_selection
choices:
- balance
- one_board
- all_boards
description: |
balance - Distribute benchmarks across all available boards.
1board - Run all benchmarks on a single board.
allboards - Run all benchmarks on all boards (e.g., to check that all boards give the same performance result).
- choice:
name: image_arch
choices:
- arm64
- armhf
- amd64
description: 'Docker image architecture'
- bool:
name: reboot
default: 'false'
description: 'Reboot the board before building and running the benchmarks.'
- string:
name: displaytag
default: '$bmk_hw'
description: 'Tag to display in the Jenkins console, so that the build name is more meaningful'
- bool:
name: ignore_errors
default: 'false'
description: 'Ignore build errors as much as possible'
- string:
name: clean_older_than
default: '60'
description: 'Delete previous results older than X days (on board)'
- string:
name: builder
default: 'bmk_board'
description: |
Jenkins label or node to procure a builder from and the docker
image distro tag to use for the build environment.
This is needed only for non-ssh:// toolchain_urls.
Special value of bmk_board uses benchmarking board as the builder
- string:
name: scripts_branch
default: master
description: 'Jenkins-scripts branch to use'
- string:
name: bmk_branch
default: master
description: 'Bmk-scripts branch to use'
- node:
name: bmk_node
default-slaves:
- tcwg-bmk-bkp-01
allowed-slaves:
- tcwg-bmk-bkp-01
- tcwg-bmk-apm
- tcwg-bmk-sq
- tcwg-bmk-stm32
- tcwg-bmk-tk1
- tcwg-bmk-tx1
- tcwg-bmk-fx
- tcwg-bmk-qc
description: 'Bmk node; used internally, do not touch'
disabled: false
concurrent: true
display-name: 'TCWG Benchmark_backend'
workspace: workspace/tcwg-benchmark-${NODE_NAME}_$EXECUTOR_NUMBER
scm:
- jenkins-scripts
- bmk-scripts
wrappers:
- timeout:
timeout: 1200
- timestamps
- ssh-agent-credentials:
users:
- 'tcwg-benchmark'
- build-name:
name: '#$BUILD_NUMBER-$displaytag ($bmk_hw:$image_arch)'
builders:
- shell:
command: |
#!/bin/bash
set -ef -o pipefail
set -x
rm -rf artifacts
mkdir -p artifacts/jenkins
case "$bmk_hw:$image_arch" in
apm:arm64) hw_tag=apm_64 ;;
apm:armhf) hw_tag=apm_32 ;;
sq:arm64) hw_tag=sq_64 ;;
sq:armhf) hw_tag=sq_32 ;;
stm32:amd64) hw_tag=stm32;;
tk1:armhf) hw_tag=tk1_32 ;;
tx1:arm64) hw_tag=tx1_64 ;;
tx1:armhf) hw_tag=tx1_32 ;;
fx:arm64) hw_tag=fx_64 ;;
fx:armhf) hw_tag=fx_32 ;;
qc:arm64) hw_tag=qc_64 ;;
qc:armhf) hw_tag=qc_32 ;;
*)
echo "ERROR: Unsupported bmk_hw:image_arch: $bmk_hw:$image_arch"
exit 1
;;
esac
# Retry benchmarking once, just in case we selected a board that
# recently went offline.
bmk_retry=true
declare -gA bad_boards
while true; do
good_boards=()
for lock in $(set +f; ls -tr $HOME/boards/$NODE_NAME-*.lock); do
if [ x"${bad_boards[$lock]-unset}" = x"unset" ]; then
good_boards+=("$lock")
fi
done
if [ ${#good_boards[@]} = 0 ]; then
echo "Ran out of boards to try -- giving up." >> artifacts/jenkins/mail-body.txt
exit 125
fi
for lock in "${good_boards[@]}"; do
bmk_start=$(date +%s)
(
flock -en -E 124 9
touch $lock
boardname=$(cat <&9)
export boardname
echo "#$BUILD_NUMBER-$displaytag-$boardname" > artifacts/jenkins/build-name
exec ./jenkins-scripts/tcwg-benchmark.sh \
--boardname "$boardname" \
--toolchain_url "$toolchain_url" \
--toolchain_type "$toolchain_type" \
--sysroot "$sysroot" \
--bench_list "$bench_list" \
--cflags "$cflags" \
--ldflags "$ldflags" \
--extension "$extension" \
--testmode "$testmode" \
--iterations "$iterations" \
--results_dest "$results_dest" \
--forceinstall "$forceinstall" \
--run_profile "$run_profile" \
--image_arch "$image_arch" \
--hw_tag "$hw_tag" \
--reboot "$reboot" \
--ignore_errors "$ignore_errors" \
--clean_older_than "$clean_older_than" \
--builder "$builder" \
--WORKSPACE "$WORKSPACE"
) 9<$lock &
res=0 && wait $! || res=$?
if [ $res != 0 ]; then
if [ $res = 124 ]; then
# Try to lock next board.
continue
elif $bmk_retry; then
bad_boards[$lock]="1"
bmk_retry=false
if [ $res = 125 ]; then
echo "Failed to prepare board $lock for benchmarking, retry with a different board." >> artifacts/jenkins/mail-body.txt
continue
elif [ $(($(date +%s) - $bmk_start)) -le 300 ]; then
echo "Benchmarking on board $lock failed due to /something/ within 5 minutes -- give it another chance." >> artifacts/jenkins/mail-body.txt
continue
fi
fi
echo "Benchmarking on board $lock failed -- giving up." >> artifacts/jenkins/mail-body.txt
fi
if [ -f artifacts/jenkins/mail-body.txt ]; then
if [ $res = 0 ]; then
echo "Benchmarking succeeded" >> artifacts/jenkins/mail-body.txt
fi
echo "$BUILD_URL" >> artifacts/jenkins/mail-body.txt
echo "maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org" > artifacts/jenkins/mail-recipients.txt
fi
exit $res
done
sleep 30
done
unstable-return: 125
- build-name-setter:
name: 'artifacts/jenkins/build-name'
file: true
publishers:
- archive:
artifacts: 'artifacts/**'
latest-only: false
allow-empty: true
- email-ext:
recipients: |
${FILE,path="artifacts/jenkins/mail-recipients.txt"}
content-type: text
body: |
${FILE,path="artifacts/jenkins/mail-body.txt"}
failure: true
success: true
aborted: true
send-to:
- recipients
# checksum: d2ea6e214031fbe42111d850cf128679