diff options
-rwxr-xr-x | docker-run.sh | 16 | ||||
-rw-r--r-- | jenkins-helpers.sh | 4 | ||||
-rw-r--r-- | round-robin.sh | 39 | ||||
-rwxr-xr-x | start-container-docker.sh | 8 | ||||
-rwxr-xr-x | tcwg-benchmark-results.sh | 1 | ||||
-rwxr-xr-x | tcwg_bmk-build.sh | 184 | ||||
-rwxr-xr-x | tcwg_gnu-build.sh | 114 |
7 files changed, 350 insertions, 16 deletions
diff --git a/docker-run.sh b/docker-run.sh index b1914333..2af4c8e3 100755 --- a/docker-run.sh +++ b/docker-run.sh @@ -1,14 +1,14 @@ #!/bin/bash -set -ef -o pipefail - -qemu="${qemu-}" -set -u +set -euf -o pipefail . $(dirname $0)/jenkins-helpers.sh convert_args_to_variables "$@" shift "$SHIFT_CONVERTED_ARGS" +qemu="${qemu-}" +ssh_info="${ssh_info-false}" + trap "container_cleanup" EXIT case "$qemu" in @@ -17,4 +17,10 @@ case "$qemu" in esac . ./container.sh -container_exec "$@" +if $ssh_info; then + ssh_opts="--ssh_host $session_host --ssh_port $session_port" +else + ssh_opts="" +fi + +container_exec "$@" $ssh_opts diff --git a/jenkins-helpers.sh b/jenkins-helpers.sh index c9c90560..9c0b7ff6 100644 --- a/jenkins-helpers.sh +++ b/jenkins-helpers.sh @@ -671,11 +671,11 @@ print_volume_mounts () local volume_id case "$job" in - tcwg_kernel-*) + tcwg_kernel-*|tcwg_bmk-*) # Add ccache volume for tcwg_kernel jobs. These jobs # depend on ccache for fast rebuilds of LLVM and GCC with # the host compiler. - job="tcwg_kernel" + job="$(echo $job | cut -d- -f 1)" volume_id=$(print_docker_name "$job$suffix") mounts+=(ccache-$volume_id:$HOME/.ccache) ;; diff --git a/round-robin.sh b/round-robin.sh index 81b04e95..b9c12e99 100644 --- a/round-robin.sh +++ b/round-robin.sh @@ -201,7 +201,9 @@ build_abe () local component="$1" - local project stage + local project stage action + action="build" + case "$component" in stage1) project=gcc @@ -211,7 +213,31 @@ build_abe () project=gcc stage="--stage 2" ;; - *) + bootstrap) + project=gcc + stage="--enable bootstrap" + ;; + bootstrap_ubsan) + project=gcc + stage="--set buildconfig=bootstrap-ubsan" + ;; + bootstrap_O3) + project=gcc + stage="--set buildconfig=bootstrap-O3" + ;; + bootstrap_O1) + project=gcc + stage="--set buildconfig=bootstrap-O1" + ;; + bootstrap_lto) + project=gcc + stage="--set buildconfig=bootstrap-lto" + ;; + bootstrap_debug) + project=gcc + stage="--set buildconfig=bootstrap-debug" + ;; + *) project=$component stage="" ;; @@ -256,10 +282,15 @@ build_abe () fi ccache -z + local target_opt="" + if [ x"${rr[target]}" != x"native" ]; then + target_opt="--target $gnu_target" + fi + # Run "./abe.sh --build $project". ./abe.sh \ - --build $project \ - --target $gnu_target \ + --$action $project \ + $target_opt \ --extraconfigdir config/master \ $custom_abe_src_opt \ $stage diff --git a/start-container-docker.sh b/start-container-docker.sh index a0f09aa7..ac6d1536 100755 --- a/start-container-docker.sh +++ b/start-container-docker.sh @@ -109,6 +109,9 @@ do [ x${session_name} = x ] && usage shift 2 ;; + --ssh_info) + shift 2 + ;; --task) task=$2 [ x${task} = x ] && usage @@ -196,11 +199,6 @@ fi image=linaro/ci-${container_arch}-tcwg-${task}-ubuntu:${distro} -case "$session_host" in - "localhost"*) docker_host="" ;; - *) docker_host="$session_host" ;; -esac - DOCKER="ssh $session_host docker" $DOCKER pull $image diff --git a/tcwg-benchmark-results.sh b/tcwg-benchmark-results.sh index 6cdd2810..90e6bcd2 100755 --- a/tcwg-benchmark-results.sh +++ b/tcwg-benchmark-results.sh @@ -30,6 +30,7 @@ for i in $results_ref $results_id; do csvs="$csvs results-$num.csv" num=$(($num+1)) done +ssh -O exit dev-01.tcwglab mkdir -p $top_artifacts diff --git a/tcwg_bmk-build.sh b/tcwg_bmk-build.sh new file mode 100755 index 00000000..809c097c --- /dev/null +++ b/tcwg_bmk-build.sh @@ -0,0 +1,184 @@ +#!/bin/bash + +set -euf -o pipefail + +scripts=$(dirname $0) +. $scripts/jenkins-helpers.sh + +convert_args_to_variables "$@" + +obligatory_variables rr[ci_config] \ + BUILD_NUMBER ssh_host ssh_port + +# Execution mode: baseline, bisect, continue, jenkins-full +rr[mode]="${rr[mode]-baseline}" + +case "${rr[mode]}" in + "jenkins-full") + obligatory_variables rr[current_project] rr[current_branch] + ;; +esac + +# Set custom revision for one of the projects, and use baseline revisions +# for all other projects. +rr[ci_project]="${rr[ci_project]-tcwg_bmk}" +rr[baseline_branch]="${rr[baseline_branch]-linaro-local/ci/${rr[ci_project]}/${rr[ci_config]}}" +rr[current_branch]="${rr[current_branch]-default}" +rr[current_project]="${rr[current_project]-none}" +rr[reset_baseline]="${rr[reset_baseline]-false}" +rr[top_artifacts]="${rr[top_artifacts]-$(pwd)/artifacts}" + +# {toolchain_name}-{toolchain_ver}-{target}-{bmk}-{cflags} +IFS=- read -a ci_config <<EOF +${rr[ci_config]} +EOF +rr[toolchain_name]=${rr[toolchain_name]-${ci_config[0]}} +rr[target]=${rr[target]-${ci_config[2]}} +cflags=${cflags-${ci_config[4]}} + +start_at="${start_at-default}" +finish_at="${finish_at-default}" +verbose="${verbose-true}" +verbose2="${verbose2-false}" + +results_id="tx1/${rr[ci_project]}/${rr[ci_config]}-$BUILD_NUMBER" + +if $verbose2; then set -x; fi + +trap "eval \"echo ERROR at \${FUNCNAME[0]}:\${BASH_LINENO[0]}\"" EXIT + +# Set start and finish steps for different modes. +default_start_at="" +default_finish_at="" +base_artifacts_opt="base-artifacts" +case "${rr[mode]}" in + "baseline") + default_finish_at="update_baseline" + ;; + "bisect") + case "${rr[toolchain]}:${rr[current_project]}" in + gnu:binutils) default_start_at="build_abe-binutils" ;; + gnu:gcc) default_start_at="build_abe-stage1" ;; + llvm:llvm) default_start_at="build_llvm" ;; + esac + default_finish_at="check_regression" + ;; + "continue") + # Developer mode. + case "${rr[toolchain]}" in + "gnu") default_start_at="prepare_abe" ;; + "llvm") default_start_at="build_llvm" ;; + esac + base_artifacts_opt="" + ;; + "jenkins-full") ;; +esac +if [ x"$start_at" = x"default" ]; then + start_at="$default_start_at" +fi +if [ x"$finish_at" = x"default" ]; then + finish_at="$default_finish_at" +fi + +run_step_init "$start_at" "$finish_at" "${rr[top_artifacts]}" "$base_artifacts_opt" "$verbose" + +. $scripts/round-robin.sh + +benchmark () +{ + ( + set -euf -o pipefail + + rm -rf $(pwd)/bin + mkdir $(pwd)/bin + + local bin cc + + bin="$(pwd)/abe/builds/destdir/x86_64-unknown-linux-gnu/bin" + cc="$bin/$(print_gnu_target ${rr[target]})-" + + local hw + case "${rr[target]}" in + arm*) hw=tk1 ;; + *) hw=tx1 ;; + esac + + local bmk_flags + bmk_flags="$(echo _$cflags | sed -e "s/_/ -/g")" + case "$cflags" in + "Os*") bmk_flags="$bmk_flags -static" ;; + esac + + ssh -p2222 -l $USER@linaro.org ci.linaro.org build tcwg-benchmark -s -v \ + -p bench_list=all \ + -p cflags="$bmk_flags" \ + -p displaytag=${rr[ci_config]} \ + -p toolchain_url=ssh://$ssh_host:$ssh_port:$cc \ + -p sysroot=ssh://$ssh_host:$ssh_port:$(pwd)/abe/sysroots/$(print_gnu_target ${rr[target]}) \ + -p results_id="$results_id" \ + -p scripts_branch="$scripts_branch" \ + -p bmk_branch="$bmk_branch" + + echo "$results_id" > "${rr[top_artifacts]}/results_id" + cat >> ${rr[top_artifacts]}/results <<EOF +Succesful benchmark run: $results_id +0 +EOF + ) +} + +# Exit with code 0 if no regression compared to base-artifacts/results. +no_regression_p () +{ + ( + set -euf -o pipefail + + if ! [ -f base-artifacts/results ]; then + return 0 + fi + + local build_result_ref build_result_new + build_result_ref=$(tail -n1 base-artifacts/results) + build_result_new=$(tail -n1 ${rr[top_artifacts]}/results) + + if [ $build_result_new -lt $build_result_ref ]; then + return 1 + fi + + if ! [ -f base-artifacts/results_id ]; then + return 0 + fi + + local results_ref + results_ref=$(cat base-artifacts/results_id) + + $scripts/tcwg-benchmark-results.sh --results_ref $results_ref --results_id $results_id --top_artifacts "${rr[top_artifacts]}" --verbose $verbose + + while IFS=, read -r bmk symbol speed size; do + if [ "$size" -gt 100 ]; then + return 1 + fi + done < ${rr[top_artifacts]}/results.csv + ) +} + +run_step stop_on_fail -10 reset_artifacts +case "${rr[toolchain]}" in + gnu) + run_step stop_on_fail x prepare_abe + run_step skip_on_fail -9 build_abe binutils + run_step skip_on_fail -8 build_abe stage1 + run_step skip_on_fail -7 build_abe linux + run_step skip_on_fail -6 build_abe glibc + run_step skip_on_fail -5 build_abe stage2 + ;; + llvm) + run_step skip_on_fail -1 build_llvm + ;; +esac +run_step skip_on_fail x benchmark +run_step reset_on_fail x check_regression +run_step stop_on_fail x update_baseline +run_step stop_on_fail x push_baseline + +trap "" EXIT diff --git a/tcwg_gnu-build.sh b/tcwg_gnu-build.sh new file mode 100755 index 00000000..2e040d4d --- /dev/null +++ b/tcwg_gnu-build.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +set -euf -o pipefail + +scripts=$(dirname $0) +. $scripts/jenkins-helpers.sh + +convert_args_to_variables "$@" + +obligatory_variables rr[ci_config] + +# Execution mode: baseline, bisect, continue, jenkins-full +rr[mode]="${rr[mode]-baseline}" + +case "${rr[mode]}" in + "jenkins-full") + obligatory_variables rr[current_project] rr[current_branch] + ;; +esac + +# Set custom revision for one of the projects, and use baseline revisions +# for all other projects. +rr[ci_project]="${rr[ci_project]-tcwg_gnu}" +rr[baseline_branch]="${rr[baseline_branch]-linaro-local/ci/${rr[ci_project]}/${rr[ci_config]}}" +rr[current_branch]="${rr[current_branch]-default}" +rr[current_project]="${rr[current_project]-none}" +rr[reset_baseline]="${rr[reset_baseline]-false}" +rr[top_artifacts]="${rr[top_artifacts]-$(pwd)/artifacts}" + +# {toolchain_name}-{toolchain_ver}-{target}-{bmk}-{cflags} +IFS=- read -a ci_config <<EOF +${rr[ci_config]} +EOF +rr[toolchain_name]=${rr[toolchain_name]-${ci_config[0]}} +rr[target]="native" +bootstrap_config=${cflags-${ci_config[3]}} + +start_at="${start_at-default}" +finish_at="${finish_at-default}" +verbose="${verbose-true}" +verbose2="${verbose2-false}" + +if $verbose2; then set -x; fi + +trap "eval \"echo ERROR at \${FUNCNAME[0]}:\${BASH_LINENO[0]}\"" EXIT + +# Set start and finish steps for different modes. +default_start_at="" +default_finish_at="" +base_artifacts_opt="base-artifacts" +case "${rr[mode]}" in + "baseline") + default_finish_at="update_baseline" + ;; + "bisect") + case "${rr[toolchain]}:${rr[current_project]}" in + gnu:binutils) default_start_at="build_abe-binutils" ;; + gnu:gcc) default_start_at="build_abe-stage1" ;; + llvm:llvm) default_start_at="build_llvm" ;; + esac + default_finish_at="check_regression" + ;; + "continue") + # Developer mode. + case "${rr[toolchain]}" in + "gnu") default_start_at="prepare_abe" ;; + "llvm") default_start_at="build_llvm" ;; + esac + base_artifacts_opt="" + ;; + "jenkins-full") ;; +esac +if [ x"$start_at" = x"default" ]; then + start_at="$default_start_at" +fi +if [ x"$finish_at" = x"default" ]; then + finish_at="$default_finish_at" +fi + +run_step_init "$start_at" "$finish_at" "${rr[top_artifacts]}" "$base_artifacts_opt" "$verbose" + +. $scripts/round-robin.sh + +# Exit with code 0 if no regression compared to base-artifacts/results. +no_regression_p () +{ + ( + set -euf -o pipefail + + if ! [ -f base-artifacts/results ]; then + return 0 + fi + + local build_result_ref build_result_new + build_result_ref=$(tail -n1 base-artifacts/results) + build_result_new=$(tail -n1 ${rr[top_artifacts]}/results) + + if [ $build_result_new -lt $build_result_ref ]; then + return 1 + fi + + return 0 + ) +} + +run_step stop_on_fail -10 reset_artifacts +run_step stop_on_fail x prepare_abe +run_step skip_on_fail -5 build_abe ${bootstrap_config} + +run_step reset_on_fail x check_regression +run_step stop_on_fail x update_baseline +run_step stop_on_fail x push_baseline + +trap "" EXIT |