do-release: sketch + a bunch of fixes from bench-all

qemu: monitor command from guest
This commit is contained in:
Ciro Santilli
2018-08-09 12:56:16 +01:00
parent 380000ce57
commit f5a997b2b6
7 changed files with 48 additions and 18 deletions

View File

@@ -6899,6 +6899,10 @@ Getting everything to work required careful choice of QEMU command line options:
* https://stackoverflow.com/questions/49716931/how-to-run-qemu-with-nographic-and-monitor-but-still-be-able-to-send-ctrlc-to/49751144#49751144 * https://stackoverflow.com/questions/49716931/how-to-run-qemu-with-nographic-and-monitor-but-still-be-able-to-send-ctrlc-to/49751144#49751144
* https://unix.stackexchange.com/questions/167165/how-to-pass-ctrl-c-to-the-guest-when-running-qemu-with-nographic/436321#436321 * https://unix.stackexchange.com/questions/167165/how-to-pass-ctrl-c-to-the-guest-when-running-qemu-with-nographic/436321#436321
==== QEMU monitor from guest
Peter Maydell said potentially not possible nicely as of August 2018: https://stackoverflow.com/questions/51747744/how-to-run-a-qemu-monitor-command-from-inside-the-guest/51764110#51764110
=== Debug the emulator === Debug the emulator
When you start hacking QEMU or gem5, it is useful to see what is going on inside the emulator themselves. When you start hacking QEMU or gem5, it is useful to see what is going on inside the emulator themselves.
@@ -8855,6 +8859,9 @@ All benchmarks were run on the <<p51>> machine, unless stated otherwise.
Run all benchmarks and upload the results: Run all benchmarks and upload the results:
.... ....
cd ..
git clone https://github.com/cirosantilli/linux-kernel-module-cheat-regression
cd -
./bench-all -A ./bench-all -A
.... ....
@@ -9391,6 +9398,18 @@ This can be used to check the determinism of:
* <<norandmaps>> * <<norandmaps>>
* <<qemu-record-and-replay>> * <<qemu-record-and-replay>>
==== Releases
This is not yet super stable, but one day maybe:
....
./do-release
....
Source: link:do-release[].
This should in particular enable <<prebuilt>>.
=== About === About
This project is for people who want to learn and modify low level system components: This project is for people who want to learn and modify low level system components:

View File

@@ -1,6 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Run all benchmarks for this repo, and save the results to the
# benchmark repo, which should be cloned at ../linux-kernel-module-cheat-benchmarks.
. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common" . "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common"
set -x set -x
bench_build=false bench_build=false
@@ -44,7 +42,6 @@ shift "$(($OPTIND - 1))"
comment="${1:-}" comment="${1:-}"
# Create output directory. # Create output directory.
sha="$(git log -1 --format="%H")"
benchmark_repo="${common_root_dir}/../linux-kernel-module-cheat-regression" benchmark_repo="${common_root_dir}/../linux-kernel-module-cheat-regression"
mkdir -p "$benchmark_repo" mkdir -p "$benchmark_repo"
last_dir="$(ls "$benchmark_repo" | grep -E '^[0-9]' | tail -n 1)" last_dir="$(ls "$benchmark_repo" | grep -E '^[0-9]' | tail -n 1)"
@@ -54,8 +51,7 @@ else
seq_id=0 seq_id=0
fi fi
seq_id="$(printf '%0.4d' "$seq_id")" seq_id="$(printf '%0.4d' "$seq_id")"
sha="$(git log -1 --format="%H")" dir_basename="${seq_id}_${common_sha}"
dir_basename="${seq_id}_${sha}"
new_dir="${benchmark_repo}/${dir_basename}" new_dir="${benchmark_repo}/${dir_basename}"
mkdir "$new_dir" mkdir "$new_dir"
@@ -64,7 +60,7 @@ if "$bench_build"; then
common_suffix=bench common_suffix=bench
common_setup common_setup
rm -rf "$common_out_arch_dir" rm -rf "$common_out_arch_dir"
./build -a "$common_arch" -B 'BR2_CCACHE=n' -s "$suffix" ./build -a "$common_arch" -B 'BR2_CCACHE=n' -s "$common_suffix"
cp "${common_build_dir}/build-time.log" "${new_dir}/build-time-${common_arch}.log" cp "${common_build_dir}/build-time.log" "${new_dir}/build-time-${common_arch}.log"
rm -rf "$common_out_arch_dir" rm -rf "$common_out_arch_dir"
fi fi
@@ -90,16 +86,15 @@ if "$bench_gem5_build"; then
arches='x86_64 arm' arches='x86_64 arm'
for common_arch in $arches; do for common_arch in $arches; do
common_setup common_setup
cd "${common_root_dir}/gem5/gem5" cd "${common_gem5_src_dir}"
git clean -xdf git clean -xdf
cd "${common_root_dir}/gem5"
results_file="${common_gem5_out_dir}/bench-build.txt" results_file="${common_gem5_out_dir}/bench-build.txt"
gem5_outdir="${common_out_dir}/bench_build" gem5_outdir="${common_out_dir}/bench_build"
rm -fr "$results_file" "${gem5_outdir}" rm -fr "$results_file" "${gem5_outdir}"
# TODO understand better: --foreground required otherwise we cannot # TODO understand better: --foreground required otherwise we cannot
# kill the build with Ctrl+C if something goes wrong, can be minimized to: # kill the build with Ctrl+C if something goes wrong, can be minimized to:
# bash -c "eval 'timeout 5 sleep 3'" # bash -c "eval 'timeout 5 sleep 3'"
common_bench_cmd "timeout --foreground 900 ./build -a '$common_arch' -o '${gem5_outdir}'" "$results_file" common_bench_cmd "timeout --foreground 900 ../build -a '$common_arch' -o '${gem5_outdir}'" "$results_file"
cp "$results_file" "${new_dir}/gem5-bench-build-${common_arch}.txt" cp "$results_file" "${new_dir}/gem5-bench-build-${common_arch}.txt"
cd "${common_root_dir}/gem5/gem5" cd "${common_root_dir}/gem5/gem5"
git clean -xdf git clean -xdf

2
build
View File

@@ -18,7 +18,7 @@ kernel_config_fragments=
post_script_args= post_script_args=
qemu_sdl='--enable-sdl --with-sdlabi=2.0' qemu_sdl='--enable-sdl --with-sdlabi=2.0'
v=0 v=0
while getopts 'a:B:b:C:c:fGgj:hIiK:kL:lM:p:Q:qSst::v' OPT; do while getopts 'a:B:b:C:c:fGgj:hIiK:kL:lM:p:Q:qSs:t:v' OPT; do
case "$OPT" in case "$OPT" in
a) a)
common_arch="$OPTARG" common_arch="$OPTARG"

3
common
View File

@@ -48,7 +48,7 @@ common_setup() {
common_buildroot_dir="${common_root_dir}/buildroot" common_buildroot_dir="${common_root_dir}/buildroot"
common_arch_dir="$common_arch" common_arch_dir="$common_arch"
if [ -n "$common_suffix" ]; then if [ -n "$common_suffix" ]; then
common_arch_dir="${arch_dir}-${common_suffix}" common_arch_dir="${common_arch_dir}-${common_suffix}"
fi fi
common_out_arch_dir="${common_out_dir}/${common_arch_dir}" common_out_arch_dir="${common_out_dir}/${common_arch_dir}"
common_buildroot_out_dir="${common_out_arch_dir}/buildroot" common_buildroot_out_dir="${common_out_arch_dir}/buildroot"
@@ -146,6 +146,7 @@ common_gem5_worktree=
common_linux_variant=default common_linux_variant=default
common_qemu_variant=default common_qemu_variant=default
common_run_id=0 common_run_id=0
common_sha="$(git log -1 --format="%H")"
common_suffix= common_suffix=
f="${common_data_dir}/config" f="${common_data_dir}/config"

16
do-release Executable file
View File

@@ -0,0 +1,16 @@
#!/usr/bin/env bash
. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common"
common_setup
./build-all
./zip-img
tag="sha-${common_sha}"
upload_basename="images-${common_sha}.zip"
git tag "$tag"
git push --tags
#curl "https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/tags/${tag}/assets?access_token=$(cat data/access_token)&tag_name=${upload_basename}" \
# --header 'Content-Type: application/zip' \
# --upload-file "${common_out_dir}/${upload_basename}" \
# -H 'Accept: application/vnd.github.v3+json' \
# -X POST \
#;
./bench-all -u

2
run
View File

@@ -364,7 +364,6 @@ ${qemu_common} \
-append '${root} ${extra_append}' \\ -append '${root} ${extra_append}' \\
-cpu cortex-a57 \\ -cpu cortex-a57 \\
${virtio_gpu_pci} \ ${virtio_gpu_pci} \
-kernel '${common_images_dir}/Image' \\
${extra_flags} \ ${extra_flags} \
" "
;; ;;
@@ -380,7 +379,6 @@ ${qemu_common} \
-M malta \\ -M malta \\
-append '${root} ${extra_append}' \\ -append '${root} ${extra_append}' \\
-cpu I6400 \\ -cpu I6400 \\
-kernel '${common_vmlinux}' \\
${extra_flags} \ ${extra_flags} \
" "
;; ;;

11
zip-img
View File

@@ -1,9 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eu . "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common"
outfile="out/out.zip" common_setup
outfile="${common_out_dir}/lkmc-${common_sha}.zip"
rm -f "$outfile" rm -f "$outfile"
for arch in x86_64 arm aarch64; do for arch in x86_64 arm aarch64; do
img_dir="out/${arch}/buildroot/images" common_setup
rm -f "${img_dir}/rootfs.ext2" rm -f "${common_images_dir}/rootfs.ext2"
zip -r "$outfile" "${img_dir}" zip -r "$outfile" "$common_images_dir"
done done