mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
Testing and plugin updates:
- custom runner playbooks for configuring GitLab runners - integrate Cirrus jobs into GitLab via cirrus-run - clean-up docker package lists - bump NetBSD to 9.2 - bump OpenBSD to 6.9 - make test-mmap more hexagon friendly - fixup handling of hostaddr for plugins - disallow some incompatible plugin configurations - fix handling of -ldl for BSDs - remove some old unused symbols from the plugin symbol map - enable plugins by default for most TCG builds - honour main build -Wall settings for plugins - new execlog plugin - new cache modelling plugin - fix io_uring build regression - disable modular TCG on Darwin -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmDu+xsACgkQ+9DbCVqe KkQ2XAf+MRBeSMX9J091iloiqSjpuobAcVuoIFciG7gEqWd2iTQVPDqJNgBJUANQ vTA7f89ljxj/FZjSZwLgR6cqY6X0ufXI1BLEIt7s78LJtVp14sHVo89GwNBzmRwo 615T49KG8b5EBBU5YlVcAW/m8DlfgI4b1ufS/qHldOukKegu+haoCDjGG6RNpYNx mmXgLOBJiB/p2u2S73KTIa+3AEIIlsTJZpdLPus8hby+/Q4qB9t8YbdHaweyM9qs NjiojczvlbHLFd/IQSl6fqBS9QI+KWf4+oFd6ZB4THhr9/GUYTiMeLjRKucBgDQG TwGtd1RN3gAPI5aEJ0xlgCL/crz1qg== =dQl6 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-and-plugins-140721-5' into staging Testing and plugin updates: - custom runner playbooks for configuring GitLab runners - integrate Cirrus jobs into GitLab via cirrus-run - clean-up docker package lists - bump NetBSD to 9.2 - bump OpenBSD to 6.9 - make test-mmap more hexagon friendly - fixup handling of hostaddr for plugins - disallow some incompatible plugin configurations - fix handling of -ldl for BSDs - remove some old unused symbols from the plugin symbol map - enable plugins by default for most TCG builds - honour main build -Wall settings for plugins - new execlog plugin - new cache modelling plugin - fix io_uring build regression - disable modular TCG on Darwin # gpg: Signature made Wed 14 Jul 2021 15:56:27 BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-testing-and-plugins-140721-5: (44 commits) MAINTAINERS: Added myself as a reviewer for TCG Plugins docs/devel: Added cache plugin to the plugins docs plugins/cache: Added FIFO and LRU eviction policies plugins/cache: Enable cache parameterization plugins: Added a new cache modelling plugin docs/devel: tcg-plugins: add execlog plugin description contrib/plugins: add execlog to log instruction execution and memory access contrib/plugins: enable -Wall for building plugins tcg/plugins: enable by default for most TCG builds configure: stop user enabling plugins on Windows for now configure: add an explicit static and plugins check configure: don't allow plugins to be enabled for a non-TCG build tcg/plugins: remove some stale entries from the symbol list meson.build: relax the libdl test to one for the function dlopen meson.build: move TCG plugin summary output plugins: fix-up handling of internal hostaddr for 32 bit tests/tcg: make test-mmap a little less aggressive tests/vm: update openbsd to release 6.9 tests/vm: update NetBSD to 9.2 tests/docker: expand opensuse-leap package list ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
438951e883
59 changed files with 2220 additions and 372 deletions
127
docs/devel/ci.rst
Normal file
127
docs/devel/ci.rst
Normal file
|
@ -0,0 +1,127 @@
|
|||
==
|
||||
CI
|
||||
==
|
||||
|
||||
QEMU has configurations enabled for a number of different CI services.
|
||||
The most up to date information about them and their status can be
|
||||
found at::
|
||||
|
||||
https://wiki.qemu.org/Testing/CI
|
||||
|
||||
Jobs on Custom Runners
|
||||
======================
|
||||
|
||||
Besides the jobs run under the various CI systems listed before, there
|
||||
are a number additional jobs that will run before an actual merge.
|
||||
These use the same GitLab CI's service/framework already used for all
|
||||
other GitLab based CI jobs, but rely on additional systems, not the
|
||||
ones provided by GitLab as "shared runners".
|
||||
|
||||
The architecture of GitLab's CI service allows different machines to
|
||||
be set up with GitLab's "agent", called gitlab-runner, which will take
|
||||
care of running jobs created by events such as a push to a branch.
|
||||
Here, the combination of a machine, properly configured with GitLab's
|
||||
gitlab-runner, is called a "custom runner".
|
||||
|
||||
The GitLab CI jobs definition for the custom runners are located under::
|
||||
|
||||
.gitlab-ci.d/custom-runners.yml
|
||||
|
||||
Custom runners entail custom machines. To see a list of the machines
|
||||
currently deployed in the QEMU GitLab CI and their maintainers, please
|
||||
refer to the QEMU `wiki <https://wiki.qemu.org/AdminContacts>`__.
|
||||
|
||||
Machine Setup Howto
|
||||
-------------------
|
||||
|
||||
For all Linux based systems, the setup can be mostly automated by the
|
||||
execution of two Ansible playbooks. Create an ``inventory`` file
|
||||
under ``scripts/ci/setup``, such as this::
|
||||
|
||||
fully.qualified.domain
|
||||
other.machine.hostname
|
||||
|
||||
You may need to set some variables in the inventory file itself. One
|
||||
very common need is to tell Ansible to use a Python 3 interpreter on
|
||||
those hosts. This would look like::
|
||||
|
||||
fully.qualified.domain ansible_python_interpreter=/usr/bin/python3
|
||||
other.machine.hostname ansible_python_interpreter=/usr/bin/python3
|
||||
|
||||
Build environment
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ``scripts/ci/setup/build-environment.yml`` Ansible playbook will
|
||||
set up machines with the environment needed to perform builds and run
|
||||
QEMU tests. This playbook consists on the installation of various
|
||||
required packages (and a general package update while at it). It
|
||||
currently covers a number of different Linux distributions, but it can
|
||||
be expanded to cover other systems.
|
||||
|
||||
The minimum required version of Ansible successfully tested in this
|
||||
playbook is 2.8.0 (a version check is embedded within the playbook
|
||||
itself). To run the playbook, execute::
|
||||
|
||||
cd scripts/ci/setup
|
||||
ansible-playbook -i inventory build-environment.yml
|
||||
|
||||
Please note that most of the tasks in the playbook require superuser
|
||||
privileges, such as those from the ``root`` account or those obtained
|
||||
by ``sudo``. If necessary, please refer to ``ansible-playbook``
|
||||
options such as ``--become``, ``--become-method``, ``--become-user``
|
||||
and ``--ask-become-pass``.
|
||||
|
||||
gitlab-runner setup and registration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The gitlab-runner agent needs to be installed on each machine that
|
||||
will run jobs. The association between a machine and a GitLab project
|
||||
happens with a registration token. To find the registration token for
|
||||
your repository/project, navigate on GitLab's web UI to:
|
||||
|
||||
* Settings (the gears-like icon at the bottom of the left hand side
|
||||
vertical toolbar), then
|
||||
* CI/CD, then
|
||||
* Runners, and click on the "Expand" button, then
|
||||
* Under "Set up a specific Runner manually", look for the value under
|
||||
"And this registration token:"
|
||||
|
||||
Copy the ``scripts/ci/setup/vars.yml.template`` file to
|
||||
``scripts/ci/setup/vars.yml``. Then, set the
|
||||
``gitlab_runner_registration_token`` variable to the value obtained
|
||||
earlier.
|
||||
|
||||
To run the playbook, execute::
|
||||
|
||||
cd scripts/ci/setup
|
||||
ansible-playbook -i inventory gitlab-runner.yml
|
||||
|
||||
Following the registration, it's necessary to configure the runner tags,
|
||||
and optionally other configurations on the GitLab UI. Navigate to:
|
||||
|
||||
* Settings (the gears like icon), then
|
||||
* CI/CD, then
|
||||
* Runners, and click on the "Expand" button, then
|
||||
* "Runners activated for this project", then
|
||||
* Click on the "Edit" icon (next to the "Lock" Icon)
|
||||
|
||||
Tags are very important as they are used to route specific jobs to
|
||||
specific types of runners, so it's a good idea to double check that
|
||||
the automatically created tags are consistent with the OS and
|
||||
architecture. For instance, an Ubuntu 20.04 aarch64 system should
|
||||
have tags set as::
|
||||
|
||||
ubuntu_20.04,aarch64
|
||||
|
||||
Because the job definition at ``.gitlab-ci.d/custom-runners.yml``
|
||||
would contain::
|
||||
|
||||
ubuntu-20.04-aarch64-all:
|
||||
tags:
|
||||
- ubuntu_20.04
|
||||
- aarch64
|
||||
|
||||
It's also recommended to:
|
||||
|
||||
* increase the "Maximum job timeout" to something like ``2h``
|
||||
* give it a better Description
|
|
@ -27,6 +27,7 @@ Contents:
|
|||
migration
|
||||
atomics
|
||||
stable-process
|
||||
ci
|
||||
qtest
|
||||
decodetree
|
||||
secure-coding-practices
|
||||
|
|
|
@ -71,7 +71,8 @@ API
|
|||
Usage
|
||||
=====
|
||||
|
||||
The QEMU binary needs to be compiled for plugin support::
|
||||
Any QEMU binary with TCG support has plugins enabled by default.
|
||||
Earlier releases needed to be explicitly enabled with::
|
||||
|
||||
configure --enable-plugins
|
||||
|
||||
|
@ -319,3 +320,86 @@ the user to see what hardware is accessed how often. It has a number of options:
|
|||
off:0000001c, 1, 2
|
||||
off:00000020, 1, 2
|
||||
...
|
||||
|
||||
- contrib/plugins/execlog.c
|
||||
|
||||
The execlog tool traces executed instructions with memory access. It can be used
|
||||
for debugging and security analysis purposes.
|
||||
Please be aware that this will generate a lot of output.
|
||||
|
||||
The plugin takes no argument::
|
||||
|
||||
qemu-system-arm $(QEMU_ARGS) \
|
||||
-plugin ./contrib/plugins/libexeclog.so -d plugin
|
||||
|
||||
which will output an execution trace following this structure::
|
||||
|
||||
# vCPU, vAddr, opcode, disassembly[, load/store, memory addr, device]...
|
||||
0, 0xa12, 0xf8012400, "movs r4, #0"
|
||||
0, 0xa14, 0xf87f42b4, "cmp r4, r6"
|
||||
0, 0xa16, 0xd206, "bhs #0xa26"
|
||||
0, 0xa18, 0xfff94803, "ldr r0, [pc, #0xc]", load, 0x00010a28, RAM
|
||||
0, 0xa1a, 0xf989f000, "bl #0xd30"
|
||||
0, 0xd30, 0xfff9b510, "push {r4, lr}", store, 0x20003ee0, RAM, store, 0x20003ee4, RAM
|
||||
0, 0xd32, 0xf9893014, "adds r0, #0x14"
|
||||
0, 0xd34, 0xf9c8f000, "bl #0x10c8"
|
||||
0, 0x10c8, 0xfff96c43, "ldr r3, [r0, #0x44]", load, 0x200000e4, RAM
|
||||
|
||||
- contrib/plugins/cache
|
||||
|
||||
Cache modelling plugin that measures the performance of a given cache
|
||||
configuration when a given working set is run::
|
||||
|
||||
qemu-x86_64 -plugin ./contrib/plugins/libcache.so \
|
||||
-d plugin -D cache.log ./tests/tcg/x86_64-linux-user/float_convs
|
||||
|
||||
will report the following::
|
||||
|
||||
Data accesses: 996479, Misses: 507
|
||||
Miss rate: 0.050879%
|
||||
|
||||
Instruction accesses: 2641737, Misses: 18617
|
||||
Miss rate: 0.704726%
|
||||
|
||||
address, data misses, instruction
|
||||
0x424f1e (_int_malloc), 109, movq %rax, 8(%rcx)
|
||||
0x41f395 (_IO_default_xsputn), 49, movb %dl, (%rdi, %rax)
|
||||
0x42584d (ptmalloc_init.part.0), 33, movaps %xmm0, (%rax)
|
||||
0x454d48 (__tunables_init), 20, cmpb $0, (%r8)
|
||||
...
|
||||
|
||||
address, fetch misses, instruction
|
||||
0x4160a0 (__vfprintf_internal), 744, movl $1, %ebx
|
||||
0x41f0a0 (_IO_setb), 744, endbr64
|
||||
0x415882 (__vfprintf_internal), 744, movq %r12, %rdi
|
||||
0x4268a0 (__malloc), 696, andq $0xfffffffffffffff0, %rax
|
||||
...
|
||||
|
||||
The plugin has a number of arguments, all of them are optional:
|
||||
|
||||
* arg="limit=N"
|
||||
|
||||
Print top N icache and dcache thrashing instructions along with their
|
||||
address, number of misses, and its disassembly. (default: 32)
|
||||
|
||||
* arg="icachesize=N"
|
||||
* arg="iblksize=B"
|
||||
* arg="iassoc=A"
|
||||
|
||||
Instruction cache configuration arguments. They specify the cache size, block
|
||||
size, and associativity of the instruction cache, respectively.
|
||||
(default: N = 16384, B = 64, A = 8)
|
||||
|
||||
* arg="dcachesize=N"
|
||||
* arg="dblksize=B"
|
||||
* arg="dassoc=A"
|
||||
|
||||
Data cache configuration arguments. They specify the cache size, block size,
|
||||
and associativity of the data cache, respectively.
|
||||
(default: N = 16384, B = 64, A = 8)
|
||||
|
||||
* arg="evict=POLICY"
|
||||
|
||||
Sets the eviction policy to POLICY. Available policies are: :code:`lru`,
|
||||
:code:`fifo`, and :code:`rand`. The plugin will use the specified policy for
|
||||
both instruction and data caches. (default: POLICY = :code:`lru`)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue