# 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: 30 - scm: name: jenkins-scripts scm: - git: url: https://git.linaro.org/toolchain/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://git.linaro.org/toolchain/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: 75ab6b1ceb50b4dff1b334729f05f47e