diff --git a/bench/run.py b/bench/run.py index 68be8954beb7d60fab84fa69028fd1f7e61b6132..f06bede63d61fae04e7b0c97a790420a531a1263 100755 --- a/bench/run.py +++ b/bench/run.py @@ -100,7 +100,14 @@ def run_bench(suite_dir, bench_run_data, bench, burst_len): bench_run_data.joinpath("burst_len").write_text(str(burst_len)) with open(bench_run_data.joinpath("bench-run.yaml"), "w") as bench_run_yaml: - bench_run = copy.deepcopy(bench) + bench_cp = copy.deepcopy(bench) + + # Merge boot/run for eval, were only needed to avoid reboots here. + bench_run = {} + bench_run.update(bench_cp.pop('boot')) + bench_run.update(bench_cp.pop('run')) + bench_run.update(bench_cp) + bench_run["date"] = datetime.datetime.now().isoformat() bench_run["burst_len"] = burst_len yaml.dump(bench_run, bench_run_yaml) diff --git a/eval/plot-workload-perf b/eval/plot-workload-perf index 78d0d286069c7a446522b6ce4b515fbc1cf53e82..721b5b6ce71a8e7c5f3f706015ef2aae8be34b92 100755 --- a/eval/plot-workload-perf +++ b/eval/plot-workload-perf @@ -8,11 +8,11 @@ cns <- colnames(DATA) perf_metrics <- cns[startsWith(cns, "perf_") & ! startsWith(cns, "perf_counter_run_time_")] for (m in perf_metrics) { print(m) - ggplot(DATA, aes(x=run_WORKLOAD, y=get(m), colour=burst_pos)) + + ggplot(DATA, aes(x=WORKLOAD, y=get(m), colour=burst_pos)) + geom_smooth(linetype = "dashed", method = "lm") + geom_point() + - facet_grid(rows=vars(boot_T, workload_exitcode), - cols=vars(run_CPUFREQ, bench_script), + facet_grid(rows=vars(T, workload_exitcode), + cols=vars(CPUFREQ, bench_script), labeller=label_both, scales="free") eval_save(paste0(m, "-point")) } diff --git a/eval/plotlib.R b/eval/plotlib.R index 0caf21ffef3a85768dcd7ba58be831166b7ab1cf..66d197f1836d5c7f6af7344d9dc0ab29edfbb19e 100644 --- a/eval/plotlib.R +++ b/eval/plotlib.R @@ -99,10 +99,10 @@ ALL_DATA <- read_tsv( ) DATA <- ALL_DATA %>% mutate( - CPU = factor(case_when( - boot_T == "easy16" ~ "AMD 3950X", - boot_T == "nuc" ~ "Intel i5-6260U", - ), levels = c("AMD 3950X", "Intel i5-6260U")), + ## CPU = factor(case_when( + ## boot_T == "easy16" ~ "AMD 3950X", + ## boot_T == "nuc" ~ "Intel i5-6260U", + ## ), levels = c("AMD 3950X", "Intel i5-6260U")), Caches = factor(case_when( burst_pos == 0 ~ "Cold Caches", burst_pos == max(burst_pos) ~ "Hot Caches", diff --git a/system/Makefile b/system/Makefile index 2792a6d9ab45df0de28c527368af84a78d492b07..f7779d578a792c707681a74a9ab8310a92465fc2 100644 --- a/system/Makefile +++ b/system/Makefile @@ -119,8 +119,7 @@ $(LINUX_PERF_TARXZ): $(LINUX_TREE) touch $@ .build/target-state/faui49%/kernel: .build/target-state/faui49%/deb-install - ./scripts/target-boot -r "$$(cat .build/linux-bindeb/kernel.release)" - touch $@ + ./scripts/target-grub-boot -r "$$(cat .build/linux-bindeb/kernel.release)" -t $@ .build/target-state/$(T)/linux-src: .build/linux-src/d.tar.gz .build/target-state/$(T)/kernel ./scripts/target-scpsh 'sudo rm -rfd ../target_prefix/linux-src && mkdir -p ../target_prefix/linux-src' @@ -129,7 +128,7 @@ $(LINUX_PERF_TARXZ): $(LINUX_TREE) .build/target-state/$(T)/linux-tools: .build/target-state/$(T)/linux-src .build/target-state/$(T)/kernel ./scripts/target-scpsh 'sudo apt-get --assume-yes install libcpupower-dev libpci-dev libcap-dev make gcc binutils-dev libreadline-dev libbison-dev flex libelf-dev' - ./scripts/target-scpsh 'sudo make STATIC=true -C ../target_prefix/linux-src/tools bpf_install cpupower_install turbostat_install' + ./scripts/target-scpsh 'sudo make STATIC=true -j $$(getconf _NPROCESSORS_ONLN) -C ../target_prefix/linux-src/tools bpf_install cpupower_install turbostat_install' touch $@ # Could also be installed from ../target_prefix/linux-src on target, but this diff --git a/system/scripts/make-linux-deb b/system/scripts/make-linux-deb index e2dcd433bee69acc89a324d1222ced25188298c7..f1312d457058ad25a243b38ec751bbb29ad9207d 100755 --- a/system/scripts/make-linux-deb +++ b/system/scripts/make-linux-deb @@ -9,10 +9,25 @@ DST=$3 MAKE=${MAKE:-make -j `getconf _NPROCESSORS_ONLN`} +RM="rm -rfd" +if which trash +then + RM=trash +fi + # Determine the kernel release and build version our package will have. env - PATH=${PATH} ${MAKE} -C ${LINUX} include/config/kernel.release KERNEL_RELEASE=`cat ${LINUX}/include/config/kernel.release` +set +e +$RM linux-*_${KERNEL_RELEASE}-*_amd64.buildinfo +$RM linux-*_${KERNEL_RELEASE}-*_amd64.changes +$RM linux-headers-${KERNEL_RELEASE}_${KERNEL_RELEASE}-*_amd64.deb +$RM linux-image-${KERNEL_RELEASE}_${KERNEL_RELEASE}-*_amd64.deb +$RM linux-image-${KERNEL_RELEASE}-dbg_${KERNEL_RELEASE}-*_amd64.deb +$RM linux-libc-dev_${KERNEL_RELEASE}-*_amd64.deb +set -e + # if [ -f ${LINUX}/.version ] # then # KBUILD_BUILD_VERSION_OLD=`cat ${LINUX}/.version` @@ -39,7 +54,7 @@ fi # KBUILD_BUILD_VERSION=1 # fi -TMP=$(mktemp -d $USER-$(basename $0))/ +TMP=$(mktemp -d --suffix $USER-$(basename $0))/ ls -al > "${TMP}kernel.filenames" mv linux-*_${KERNEL_RELEASE}-*_amd64.buildinfo "${TMP}linux_amd64.buildinfo" diff --git a/system/scripts/target-boot b/system/scripts/target-grub-boot similarity index 50% rename from system/scripts/target-boot rename to system/scripts/target-grub-boot index e4beb71fc6ab94621e2606440c6c8b4a5c0bb426..d59a172f036512decbd0021248eb2d7e8f0a9e19 100755 --- a/system/scripts/target-boot +++ b/system/scripts/target-grub-boot @@ -1,30 +1,35 @@ #!/usr/bin/env bash set -euo pipefail - set -x + . ./env.sh release=undefined cmdline=${GRUB_CMDLINE_LINUX:-} usage() { - echo "Usage: $0 -r KERNEL_RELEASE [-c CMDLINE]" >&2 + echo "Usage: $0 -r KERNEL_RELEASE -t REBOOT_MARKER [-c CMDLINE] + +Reboot marker is touched whenever the system was rebooted with the new kernel, to be used as a make dependency." >&2 exit 1 } -while getopts "r:c:" opt; do - case "${opt}" in - r) - release=${OPTARG} - ;; - c) - cmdline=${OPTARG} - ;; - *) - usage - ;; - esac +while getopts "r:c:t:" opt; do + case "${opt}" in + r) + release=${OPTARG} + ;; + c) + cmdline=${OPTARG} + ;; + t) + rebootmarker=${OPTARG} + ;; + *) + usage + ;; + esac done shift $((OPTIND-1)) @@ -38,12 +43,16 @@ booted_cmdline=$(tssh cat /proc/cmdline) booted_release=$(tssh uname -r) if [[ "${booted_release}" = "${release}" ]] && [[ "${booted_cmdline}" = *${cmdline}* ]] then - exit 0 + if [ ! -e $rebootmarker ] + then + touch $rebootmarker + fi + exit 0 fi echo "Booting ${release} from ${booted_release}" >&2 tssh sudo mv -n /etc/default/grub /etc/default/grub.$USER-backup || true -echo "# Generated by $(hostname) $(pwd) $0, previous contents have been moved to ./grub.$USER-backup +echo "# Generated on $(hostname) in $(pwd) by $0, previous contents have been moved to ./grub.$USER-backup GRUB_DEFAULT=saved GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR='Debian' @@ -51,26 +60,39 @@ GRUB_CMDLINE_LINUX_DEFAULT='panic=30' GRUB_CMDLINE_LINUX='${cmdline}'" | tssh sudo tee /etc/default/grub tssh sudo update-grub -# Can also be "Ubuntu". +# I don“t know where to get this value or why grub-reboot needs this in the first place. distro="Debian GNU/Linux" +if ! ./scripts/target-scpsh "grep '$distro' /boot/grub/grub.cfg" +then + distro="GNU/Linux" # maybe thats on Debian 11 +fi +if ! ./scripts/target-scpsh "grep '$distro' /boot/grub/grub.cfg" +then + distro="Ubuntu" +fi +# Set the fallback kernel in case the new custom kernel panics. That's also why +# we set panic=30 and GRUB_DEFAULT=saved in grub config above. ${TARGET_EXEC} "sudo grub-set-default \"Advanced options for ${distro}>${distro}, with Linux \$(uname -r)\"" -# Sanity check, does the fallback entry exist? +# Sanity check, does the fallback boot entry exist? ${TARGET_EXEC} "sudo grep \"Advanced options for ${distro}\" /boot/grub/grub.cfg" ${TARGET_EXEC} "sudo grep \"${distro}, with Linux \$(uname -r)\" /boot/grub/grub.cfg" +# Set the new kernel, effective only for the next reboot. Otherwise it falls +# back to the default kernel. ${TARGET_EXEC} "sudo grub-reboot \"Advanced options for ${distro}>${distro}, with Linux ${release}\"" ${TARGET_EXEC} 'sudo reboot' || true # Allow it to shut down. sleep 10 -new_release=$(AUTOSSH_POLL=5 AUTOSSH_GATETIME=0 autossh -p ${SSH_PORT} ${SSH_DEST} 'uname -r') +new_release=$(AUTOSSH_POLL=5 AUTOSSH_GATETIME=1 autossh -p ${SSH_PORT} ${SSH_DEST} 'uname -r') if [ "${new_release}" = "${release}" ] then - exit 0 + touch $rebootmarker + exit 0 else - echo "Failed to boot ${release} on ${SSH_DEST}:${SSH_PORT}" >&2 - exit 1 + echo "Failed to boot ${release} on ${SSH_DEST}:${SSH_PORT}" >&2 + exit 1 fi