This commit is contained in:
Ciro Santilli
2018-03-09 07:20:25 +00:00
parent 32a543c5db
commit c8003c3389
2 changed files with 40 additions and 22 deletions

View File

@@ -882,23 +882,6 @@ Debug:
Known quirks of the supported architectures are documented in this section.
=== x86
You can make QEMU <<gem5-vs-qemu-performance,run faster>> by passing it the `-enable-kvm` option as in:
....
./run - -enable-kvm
....
This uses the link:https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine[KVM Linux kernel feature] of the host to run most instructions natively, and therefore.
There are several downsides to this however:
* only works for x86 guest
* limits visibility, since more things are running natively
So for those reasons we don't turn it on by default.
=== arm
TODOs:
@@ -1090,6 +1073,32 @@ Kernel modules built from the Linux mainline tree with `CONFIG_SOME_MOD=m`, are
modprobe dummy-irq
....
== KVM
You can make QEMU or gem5 <<gem5-vs-qemu-performance,run faster>> by passing enabling KVM with:
....
./run -K
....
but it was broken in gem5 with pending patches: https://www.mail-archive.com/gem5-users@gem5.org/msg15046.html
KVM uses the link:https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine[KVM Linux kernel feature] of the host to run most instructions natively.
We don't enable KVM by default because:
* only works if the architecture of the guest equals that of the host.
+
We have only tested / supported it on x86, but it is rumoured that QEMU and gem5 also have ARM KVM support if you are link:https://www.youtube.com/watch?v=8ItXpmLsINs[running an ARM desktop for some weird reason] :-)
* limits visibility, since more things are running natively:
** can't use GDB
** can't do instruction tracing
* kernel boots are already fast enough without `-enable-kvm`
The main use case for `-enable-kvm` in this repository is to test if something that takes a long time to run is functionally correct.
For example, when porting a benchmark to Buildroot, you can first use QEMU's KVM to test that benchmarks is producing the correct results, before analysing them more deeply in gem5, which runs much slower.
== X11
Only tested successfully in `x86_64`.
@@ -1616,7 +1625,7 @@ time ./run -a arm -e 'init=/poweroff.out'
time ./run -a arm -e 'm5 exit' -g
time ./run -a arm -e 'm5 exit' -g -- --caches --cpu-type=HPI
time ./run -a x86_64 -e 'init=/poweroff.out'
time ./run -a x86_64 -e 'init=/poweroff.out' - -enable-kvm
time ./run -a x86_64 -e 'init=/poweroff.out' -- -enable-kvm
time ./run -a x86_64 -e 'init=/poweroff.out' -g
....
@@ -1879,7 +1888,7 @@ External open source benchmarks. We will try to create Buildroot packages for th
===== PARSEC benchmark
We have ported the PARSEC benchmark http://parsec.cs.princeton.edu for cross compilation at: https://github.com/cirosantilli/parsec-benchmark
We have ported parts of the link:http://parsec.cs.princeton.edu[PARSEC benchmark] for cross compilation at: https://github.com/cirosantilli/parsec-benchmark See the documentation on that repo to find out which benchmarks have been ported.
This repo makes it trivial to get started with it:
@@ -1888,8 +1897,6 @@ configure -gpq && ./build -a arm -g -i buildroot_config_fragment_parsec
./run -a arm -g
....
As mentioned at link:https://github.com/cirosantilli/parsec-benchmark[], only SPLASH2 was currently ported.
Once inside the guest, we could in theory launch PARSEC exactly as you would launch it on the host:
....
@@ -1971,6 +1978,7 @@ If you want to remove PARSEC later, Buildroot doesn't provide an automated packa
rm -rf \
./buildroot/dl/parsec-* \
./buildroot/output.arm-gem5~/build/parsec-* \
./buildroot/output.arm-gem5~/build/packages-file-list.txt \
./buildroot/output.arm-gem5~/images/rootfs.* \
./buildroot/output.arm-gem5~/target/parsec-* \
;

12
run
View File

@@ -7,6 +7,7 @@ arch=x86_64
cpus=1
debug_vm=''
kgdb=false
kvm=false
nographic=false
# norandmaps: Don't use address space randomization. Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space.
# printk.time=y: log in format: "[time ] msg" for all printk messages.
@@ -19,7 +20,7 @@ gem5=false
gem5opts=''
initrd=false
root=''
while getopts a:c:Dde:G:giknt:x OPT; do
while getopts a:c:Dde:G:giKknt:x OPT; do
case "$OPT" in
a)
arch="$OPTARG"
@@ -36,6 +37,9 @@ while getopts a:c:Dde:G:giknt:x OPT; do
e)
extra_append="$extra_append $OPTARG"
;;
K)
kvm=true
;;
k)
extra_append="$extra_append kgdbwait"
# For those who want to try KDB.
@@ -66,6 +70,9 @@ if $gem5; then
outdir="$(pwd)/buildroot/output.${arch}-gem5~"
gem5_dir="$(pwd)/gem5/gem5"
if [ "$arch" = x86_64 ]; then
if "$kvm"; then
extra_flags="$extra_flags --cpu-type=X86KvmCPU"
fi
cmd="\
M5_PATH='$(pwd)/gem5/gem5-system' \
'${gem5_dir}/build/X86/gem5.opt' \
@@ -95,6 +102,9 @@ $extra_flags \
fi
else
buildroot_out_dir="./buildroot/output.${arch}~"
if "$kvm"; then
extra_flags="$extra_flags -enable-kvm"
fi
extra_flags="$extra_flags_qemu $extra_flags"
images_dir="$buildroot_out_dir/images"
qemu_common="\