#include tcwg/default.yaml.inc - job: #if HW_any name: tcwg-benchmark project-type: freestyle #else name: tcwg-benchmark-#{HW} project-type: matrix #endif defaults: global properties: - default-properties parameters: #if HW_any - choice: name: bmk_hw choices: - sq - tk1 - tx1 description: 'Hardware to use for benchmarking' #endif - 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' - 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 #if HW_stm32 default: 'coremark' #else default: 'bzip2' #endif description: 'List of benchmarks to run (from spec2k6). Use "all" to run all of them.' - 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_id #if HW_any default: '@hw_tag@/tcwg-benchmark/@build_num@' #elif HW_tk1 default: 'tk1_32/tcwg-benchmark/@build_num@' #elif HW_tx1 default: 'tx1_64/tcwg-benchmark/@build_num@' #elif HW_stm32 default: 'stm32_STM32L476RGTx/tcwg-benchmark/@build_num@' #endif description: 'ID for benchmarking results; results will appear in bkp-01.tcwglab:/home/tcwg-benchmark/results-$results_id/' - bool: name: forceinstall #if HW_stm32 default: 'true' #else default: 'false' #endif description: 'Force clean re-install of benchmark sources' - choice: name: run_profile choices: #if HW_any - parallel - serial #else - parallel9x1 - parallel9x4 - parallel3x3 - parallel3x1 - serial1 #endif description: 'Benchmark profile to use: parallel3x3 runs on 3 boards and 3 CPUs in parallel; parallel3x1 runs on 3 boards on 1 CPU in parallel; serial1 runs on a single board on 1 CPU.' - string: name: image_arch #if HW_any default: 'arm64' #elif HW_tk1 default: 'armhf' #elif HW_tx1 default: 'arm64' #endif description: 'Docker image architecture -- arm64 or armhf' - bool: name: reboot default: 'false' description: 'Reboot the board before building and running the benchmarks.' - string: name: displaytag default: '#$BUILD_NUMBER' 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: 'tcwg-x86_64-build' description: 'Builder -- jenkins label or node' - string: name: scripts_branch default: master description: 'Jenkins-scripts branch to use' - string: name: bmk_branch default: master description: 'Bmk-scripts branch to use' #if HW_any - node: name: bmk_node default-slaves: - tcwg-bmk-bkp-01 allowed-slaves: - tcwg-bmk-bkp-01 - tcwg-bmk-sq - tcwg-bmk-tk1 - tcwg-bmk-tx1 description: 'Bmk node; used internally, do not touch' #endif disabled: false #if !HW_any node: tcwg-bmk-bkp-01 child-workspace: $label #endif concurrent: true #if !HW_any display-name: 'TCWG BBB Benchmark #{HW}' #else display-name: 'TCWG BBB Benchmark' workspace: workspace/tcwg-benchmark-${NODE_NAME}_$EXECUTOR_NUMBER #endif scm: - jenkins-scripts - bmk-scripts #if !HW_any axes: - axis: type: slave name: label values: # if HW_tk1 || HW_tx1 - tcwg-bmk-#{HW}-01 - tcwg-bmk-#{HW}-02 - tcwg-bmk-#{HW}-03 - tcwg-bmk-#{HW}-04 - tcwg-bmk-#{HW}-05 - tcwg-bmk-#{HW}-06 - tcwg-bmk-#{HW}-07 - tcwg-bmk-#{HW}-08 - tcwg-bmk-#{HW}-09 # elif HW_stm32 - tcwg-bmk-#{HW}-01 # endif execution-strategy: sequential: false #endif wrappers: - timeout: timeout: 900 - timestamps - ssh-agent-credentials: users: - 'tcwg-benchmark' - build-name: #if !HW_any name: '#$BUILD_NUMBER-$displaytag' #else name: '$displaytag' #endif builders: #if HW_any - conditional-step: condition-kind: execution-node nodes: - tcwg-bmk-bkp-01 steps: - shell: command: | #!/bin/bash set -euf -o pipefail set -x rm -rf artifacts mkdir artifacts count=1 while read -a bmks; do echo "bench_list=${bmks[@]}" > artifacts/bmk-$count-parameters echo "displaytag=#$BUILD_NUMBER-$bmk_hw-$count" >> artifacts/bmk-$count-parameters echo "bmk_node=tcwg-bmk-$bmk_hw" >> artifacts/bmk-$count-parameters count=$(($count+1)) done < <(./bmk-scripts/break-up-bmks.sh \ --bench_list "$bench_list" \ --bmk_hw "$bmk_hw" \ --run_profile "$run_profile") - trigger-builds: - project: tcwg-benchmark block: true parameter-factories: - factory: filebuild file-pattern: artifacts/bmk-*-parameters current-parameters: true - conditional-step: condition-kind: not condition-operand: condition-kind: execution-node nodes: - tcwg-bmk-bkp-01 steps: - shell: command: | #!/bin/bash set -euf -o pipefail set -x rm -rf artifacts mkdir artifacts while true; do for lock in $(set +f; ls -tr $HOME/boards/$NODE_NAME-*); do ( flock -en -E 123 9 NODE_NAME=$(cat <&9) export NODE_NAME exec ./jenkins-scripts/tcwg-benchmark.sh ) 9<$lock & res=0 && wait $! || res=$? if [ $res != 123 ]; then exit $res fi done sleep 30 done unstable-return: 125 #else - shell: command: | #!/bin/bash set -ex ssh-add -l # Run the benchmark # if HW_tk1 || HW_tx1 exec ./jenkins-scripts/tcwg-benchmark.sh # elif HW_stm32 exec ./jenkins-scripts/tcwg-benchmark-bare.sh # endif unstable-return: 125 #endif publishers: - archive: artifacts: 'artifacts/**' latest-only: false