From 8913c7f72ca610e617ad8fe47a1cbefbe8ed7cb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciro=20Santilli=20=E5=85=AD=E5=9B=9B=E4=BA=8B=E4=BB=B6=20?= =?UTF-8?q?=E6=B3=95=E8=BD=AE=E5=8A=9F?= Date: Sun, 14 Jul 2019 00:00:00 +0000 Subject: [PATCH] a126f4279b73893cd2e961b2d4777550825e61eb --- bst-vs-heap.tmp.png | Bin 0 -> 23113 bytes bst_vs_heap_vs_hashmap.tmp.png | Bin 0 -> 26140 bytes bst_vs_heap_vs_hashmap_gem5.tmp.png | Bin 0 -> 39720 bytes index.html | 210 ++++++++++++++++++++-------- 4 files changed, 149 insertions(+), 61 deletions(-) create mode 100644 bst-vs-heap.tmp.png create mode 100644 bst_vs_heap_vs_hashmap.tmp.png create mode 100644 bst_vs_heap_vs_hashmap_gem5.tmp.png diff --git a/bst-vs-heap.tmp.png b/bst-vs-heap.tmp.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff52dad21909e21e7bf41eb203cbfe1dec3574c GIT binary patch literal 23113 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 literal 0 HcmV?d00001 diff --git a/bst_vs_heap_vs_hashmap.tmp.png b/bst_vs_heap_vs_hashmap.tmp.png new file mode 100644 index 0000000000000000000000000000000000000000..11b3d5c3fbf101842ee2e561f45b8137c85de547 GIT binary patch literal 26140 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 literal 0 HcmV?d00001 diff --git a/bst_vs_heap_vs_hashmap_gem5.tmp.png b/bst_vs_heap_vs_hashmap_gem5.tmp.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc8ab6b2d73f427697cf981b557f5a6b1a9f5da GIT binary patch literal 39720 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 AWB>pF literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 226ab1b..23eec9a 100644 --- a/index.html +++ b/index.html @@ -1585,7 +1585,12 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
  • 27. Benchmark this repo @@ -6017,7 +6032,7 @@ vim rootfs_overlay/etc/init.d/S99.gitignore

    6.4. Init environment

    @@ -8344,7 +8359,7 @@ xeyes
    -image +x11
    Figure 1. X11 Buildroot graphical user interface screenshot
    @@ -9052,7 +9067,7 @@ CONFIG_IKCONFIG_PROC=y
    @@ -9267,7 +9282,7 @@ CONFIG_IKCONFIG_PROC=y

    arm and aarch64 configs present in the official ARM gem5 Linux kernel fork: gem5 arm Linux kernel patches. Some of the configs present there are added by the patches.

  • -

    Jason’s magic x86_64 config: http://web.archive.org/web/20171229121642/http://www.lowepower.com/jason/files/config which is referenced at: http://web.archive.org/web/20171229121525/http://www.lowepower.com/jason/setting-up-gem5-full-system.html. QEMU boots with that by removing # CONFIG_VIRTIO_PCI is not set.

    +

    Jason’s magic x86_64 config: http://web.archive.org/web/20171229121642/http://www.lowepower.com/jason/files/config which is referenced at: http://web.archive.org/web/20171229121525/http://www.lowepower.com/jason/setting-up-gem5-full-system.html. QEMU boots with that by removing # CONFIG_VIRTIO_PCI is not set.

  • @@ -14105,7 +14120,7 @@ tty63::respawn:-/bin/sh
  • -

    /dev/ttyN for the other graphic TTYs. Note that there are only 63 available ones, from /dev/tty1 to /dev/tty63 (/dev/tty0 is the current one): https://superuser.com/questions/449781/why-is-there-so-many-linux-dev-tty. I think this is determined by:

    +

    /dev/ttyN for the other graphic TTYs. Note that there are only 63 available ones, from /dev/tty1 to /dev/tty63 (/dev/tty0 is the current one): https://superuser.com/questions/449781/why-is-there-so-many-linux-dev-tty. I think this is determined by:

    #define MAX_NR_CONSOLES 63
    @@ -14630,28 +14645,10 @@ ps

    We are trying to maintain a description of each at: https://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vml/482978#482978

    -

    QEMU does not seem able to boot ELF files like vmlinux, only objdump code: https://superuser.com/questions/1376944/can-qemu-boot-linux-from-vmlinux-instead-of-bzimage

    +

    QEMU does not seem able to boot ELF files like vmlinux: https://superuser.com/questions/1376944/can-qemu-boot-linux-from-vmlinux-instead-of-bzimage

    -

    Converting arch/* images to vmlinux is possible in x86 with extract-vmlinux. But for arm it fails with:

    -
    -
    -
    -
    run-detectors: unable to find an interpreter for
    -
    -
    -
    -

    as mentioned at:

    -
    -
    @@ -16290,7 +16287,7 @@ less "$(./getvar --arch x86_64 run_dir)/trace-lines.txt"

    TODO get working.

    -

    QEMU replays support checkpointing, and this allows for a simplistic "reverse debugging" implementation proposed at https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg00478.html on the unmerged https://github.com/ispras/qemu/tree/rr-180725:

    +

    QEMU replays support checkpointing, and this allows for a simplistic "reverse debugging" implementation proposed at https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg00478.html on the unmerged https://github.com/ispras/qemu/tree/rr-180725:

    @@ -16341,7 +16338,7 @@ reverse-continue

    17.8.6. gem5 tracing

    -

    gem5 provides also provides a tracing mechanism documented at: http://www.gem5.org/Trace_Based_Debugging:

    +

    gem5 provides also provides a tracing mechanism documented at: http://www.gem5.org/Trace_Based_Debugging:

    @@ -16432,7 +16429,7 @@ less "$(./getvar gem5_source_dir)/src/cpu/exetrace.cc"

    full instructions, as the first line. Only shown if the ExecMacro flag is given.

  • -

    micro ops that constitute the instruction, the lines that follow. Yes, aarch64 also has microops: https://superuser.com/questions/934752/do-arm-processors-like-cortex-a9-use-microcode/934755#934755. Only shown if the ExecMicro flag is given.

    +

    micro ops that constitute the instruction, the lines that follow. Yes, aarch64 also has microops: https://superuser.com/questions/934752/do-arm-processors-like-cortex-a9-use-microcode/934755#934755. Only shown if the ExecMicro flag is given.

  • @@ -16577,7 +16574,7 @@ root
    -

    First build Dhrystone into the root filesystem:

    +

    We will do that for various input parameters on full system by taking a checkpoint after the boot finishes a fast atomic CPU boot, and then we will restore in a more detailed mode and run the benchmark:

    -
    ./build-buildroot --config 'BR2_PACKAGE_DHRYSTONE=y'
    +
    ./build-buildroot --config 'BR2_PACKAGE_DHRYSTONE=y'
    +# Boot fast, take checkpoint, and exit.
    +./run --arch aarch64 --emulator gem5 --eval-after './gem5.sh'
    +
    +# Restore the checkpoint after boot, and benchmark with input 1000.
    +./run \
    +  --arch aarch64 \
    +  --emulator gem5 \
    +  --eval-after './gem5.sh' \
    +  --gem5-readfile 'm5 resetstats;dhrystone 1000;m5 dumpstats' \
    +  --gem5-restore 1 \
    +  -- \
    +  --cpu-type=HPI \
    +  --restore-with-cpu=HPI \
    +  --caches \
    +  --l2cache \
    +  --l1d_size=64kB \
    +  --l1i_size=64kB \
    +  --l2_size=256kB \
    +;
    +# Get the value for number of cycles.
    +# head because there are two lines: our dumpstats and the
    +# automatic dumpstats at the end which we don't care about.
    +./gem5-stat --arch aarch64 | head -n 1
    +
    +# Now for input 10000.
    +./run \
    +  --arch aarch64 \
    +  --emulator gem5 \
    +  --eval-after './gem5.sh' \
    +  --gem5-readfile 'm5 resetstats;dhrystone 10000;m5 dumpstats' \
    +  --gem5-restore 1 \
    +  -- \
    +  --cpu-type=HPI \
    +  --restore-with-cpu=HPI \
    +  --caches \
    +  --l2cache \
    +  --l1d_size=64kB \
    +  --l1i_size=64kB \
    +  --l2_size=256kB \
    +;
    +./gem5-stat --arch aarch64 | head -n 1
    -

    Then, a flexible setup is demonstrated at:

    +

    If you ever need a shell to quickly inspect the system state after boot, you can just use:

    +
    +
    +
    +
    ./run \
    +  --arch aarch64 \
    +  --emulator gem5 \
    +  --eval-after './gem5.sh' \
    +  --gem5-readfile 'sh' \
    +  --gem5-restore 1 \
    +
    +
    +
    +

    This procedure is further automated and DRYed up at:

    @@ -16669,14 +16720,14 @@ cat out/gem5-bench-dhrystone.txt

    Source: gem5-bench-dhrystone

    -

    Sample output:

    +

    Output at 2438410c25e200d9766c8c65773ee7469b599e4a + 1:

    n cycles
    -1000 12898577
    -10000 23441629
    -100000 128428617
    +1000 13665219 +10000 20559002 +100000 85977065
    @@ -16686,9 +16737,6 @@ cat out/gem5-bench-dhrystone.txt

    The gem5-stats commands output the approximate number of CPU cycles it took Dhrystone to run.

    -

    Another interesting example can be found at: gem5-bench-cache.

    -
    -

    A more naive and simpler to understand approach would be a direct:

    @@ -16697,7 +16745,7 @@ cat out/gem5-bench-dhrystone.txt
    -

    but the problem is that this method does not allow to easily run a different script without running the boot again, see: gem5 checkpoint restore and run a different script.

    +

    but the problem is that this method does not allow to easily run a different script without running the boot again. The ./gem5.sh script works around that by using m5 readfile as explained further at: gem5 checkpoint restore and run a different script.

    Now you can play a fun little game with your friends:

    @@ -16868,7 +16916,7 @@ getconf _NPROCESSORS_CONF
    -

    Cache sizes can in theory be checked with the methods described at: https://superuser.com/questions/55776/finding-l2-cache-size-in-linux:

    +

    Cache sizes can in theory be checked with the methods described at: https://superuser.com/questions/55776/finding-l2-cache-size-in-linux:

    @@ -17788,24 +17836,24 @@ m5 checkpoint
    # Boot, checkpoint and exit.
    -printf 'echo "setup run";m5 exit' > "$(./getvar gem5_readfile)"
    +printf 'echo "setup run";m5 exit' > "$(./getvar gem5_readfile_file)"
     ./run --emulator gem5 --eval 'm5 checkpoint;m5 readfile > a.sh;sh a.sh'
     
     # Restore and run the first benchmark.
    -printf 'echo "first benchmark";m5 exit' > "$(./getvar gem5_readfile)"
    +printf 'echo "first benchmark";m5 exit' > "$(./getvar gem5_readfile_file)"
     ./run --emulator gem5 --gem5-restore 1
     
     # Restore and run the second benchmark.
    -printf 'echo "second benchmark";m5 exit' > "$(./getvar gem5_readfile)"
    +printf 'echo "second benchmark";m5 exit' > "$(./getvar gem5_readfile_file)"
     ./run --emulator gem5 --gem5-restore 1
     
     # If something weird happened, create an interactive shell to examine the system.
    -printf 'sh' > "$(./getvar gem5_readfile)"
    +printf 'sh' > "$(./getvar gem5_readfile_file)"
     ./run --emulator gem5 --gem5-restore 1
    -

    Since this is such a common setup, we provide some helpers for it as described at gem5 run benchmark:

    +

    Since this is such a common setup, we provide the following helpers for this operation:

      @@ -17818,6 +17866,9 @@ printf 'sh' > "$(./getvar gem5_readfile)"
    +

    Their usage us exemplified at gem5 run benchmark.

    +
    +

    Other loophole possibilities include:

    @@ -18094,7 +18145,7 @@ m5 writefile myfileguest myfilehost
    -
    date > "$(./getvar gem5_readfile)"
    +
    date > "$(./getvar gem5_readfile_file)"
    @@ -18147,7 +18198,7 @@ m5 writefile myfileguest myfilehost
    printf '#!/bin/sh
     echo asdf
    -' > "$(./getvar gem5_readfile)"
    +' > "$(./getvar gem5_readfile_file)"
    @@ -18386,7 +18437,7 @@ m5_fail(ints[1], ints[0]);

    The patches also add defconfigs that are known to work well with gem5.

    In order to use those patches and their associated configs, and, we recommend using Linux kernel build variants as:

    @@ -19121,7 +19172,7 @@ make menuconfig

    Once you’ve built a package in to the image, there is no easy way to remove it.

    Also mentioned at: https://stackoverflow.com/questions/47320800/how-to-clean-only-target-in-buildroot

    @@ -19172,7 +19223,7 @@ make menuconfig TODO benchmark: would gem5 suffer a considerable disk read performance hit due to decompressing SquashFS?

  • -

    libguestfs: https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697, in particular vfs-minimum-size

    +

    libguestfs: https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697, in particular vfs-minimum-size

  • use methods described at: gem5 checkpoint restore and run a different script instead of putting builds on the root filesystem

    @@ -24108,7 +24159,7 @@ AArch64, see Procedure Call Standard for the ARM 64-bit Architecture.

    23.8.2. ARM official bibliography

    -

    The official manuals were stored in http://infocenter.arm.com but as of 2017 they started to slowly move to https://developer.arm.com.

    +

    The official manuals were stored in http://infocenter.arm.com but as of 2017 they started to slowly move to https://developer.arm.com.

    Each revision of a document has a "ARM DDI" unique document identifier.

    @@ -25266,10 +25317,10 @@ IN:
    -

    To wake up CPU 1 on QEMU, we must use the Power State Coordination Interface (PSCI) which is documented at: https://developer.arm.com/docs/den0022/latest/arm-power-state-coordination-interface-platform-design-document.

    +

    To wake up CPU 1 on QEMU, we must use the Power State Coordination Interface (PSCI) which is documented at: https://developer.arm.com/docs/den0022/latest/arm-power-state-coordination-interface-platform-design-document.

    -

    This interface uses HVC calls, and the calling convention is documented at "SMC CALLING CONVENTION" https://developer.arm.com/docs/den0028/latest.

    +

    This interface uses HVC calls, and the calling convention is documented at "SMC CALLING CONVENTION" https://developer.arm.com/docs/den0028/latest.

    If we boot the Linux kernel on QEMU and dump the auto-generated device tree, we observe that it contains the address of the PSCI CPU_ON call:

    @@ -26038,11 +26089,48 @@ cd -
  • -

    27.1. Travis

    +

    27.1. Continuous integraion

    +
    +

    We have exploreed a few Continuous integration solutions.

    +
    +
    +

    We haven’t setup any of them yet.

    +
    +
    +

    27.1.1. Travis

    We tried to automate it on Travis with .travis.yml but it hits the current 50 minute job timeout: https://travis-ci.org/cirosantilli/linux-kernel-module-cheat/builds/296454523 And I bet it would likely hit a disk maxout either way if it went on.

    +
    +

    27.1.2. CircleCI

    +
    +

    This setup sucessfully built gem5 on every commit: .circleci/config.yml

    +
    +
    +

    Enabling it is however blocked on: https://github.com/cirosantilli/linux-kernel-module-cheat/issues/79 so we disabled the builds on the web UI.

    +
    +
    +

    If that ever gets done, we will also need to:

    +
    +
    + +
    +
    +

    A build took about 1 hour of a core, and the free tier allows for 1000 minutes per month: https://circleci.com/pricing/ so about 17 hours. The cheapest non-free setup seems to be 50 dollars per month gets us infinite build minutes per month and 2 containers, so we could scale things to run in under 24 hours.

    +
    +
    +

    There is no result reporting web UI however…​ but neither does GitLab CI: https://gitlab.com/gitlab-org/gitlab-ce/issues/17081

    +
    +
    +

    27.2. Benchmark this repo benchmarks

    @@ -26437,7 +26525,7 @@ tail -n+1 ../linux-kernel-module-cheat-regression/*/gem5-bench-build-*.txt
    -

    This is specially true for gem5, which runs much slower than QEMU, and cannot use multiple host cores to speed up the simulation: https://github.com/cirosantilli-work/gem5-issues/issues/15, so the only way to parallelize is to run multiple instances in parallel.

    +

    This is specially true for gem5, which runs much slower than QEMU, and cannot use multiple host cores to speed up the simulation: https://github.com/cirosantilli-work/gem5-issues/issues/15, so the only way to parallelize is to run multiple instances in parallel.

    This also has a good synergy with Build variants.

    @@ -27917,7 +28005,7 @@ echo $?
  • the exit() baremetal function when status != 1.

    -

    Unfortunately the only way we found to set this up was with on_exit: https://github.com/cirosantilli/linux-kernel-module-cheat/issues/59.

    +

    Unfortunately the only way we found to set this up was with on_exit: https://github.com/cirosantilli/linux-kernel-module-cheat/issues/59.

    Trying to patch _exit directly fails since at that point some de-initialization has already happened which prevents the print.