From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Richard Henderson" <richard.henderson@linaro.org>,
"Laurent Vivier" <lvivier@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Alexandre Iooss" <erdnaxe@crans.org>,
"Mahmoud Mandour" <ma.mandourr@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>
Subject: [PATCH v2 0/6] Implement icount=auto using TCG Plugins
Date: Thu, 30 May 2024 10:49:33 -0700 [thread overview]
Message-ID: <20240530174939.749163-1-pierrick.bouvier@linaro.org> (raw)
The goal here is to be able to scale temporally execution of qemu-user/system,
using a given number of instructions per second.
We define a virtual clock, that can be late or in advance compared to real time.
When we are in advance, we slow execution (by sleeping) until catching real
time.
Finally, we should be able to cleanup icount=auto mode completely, and keep
icount usage for determistic purposes only.
It is built upon new TCG Plugins inline ops (store + conditional callbacks), now
merged on master.
Example in user-mode:
- Retrieve number of instructions to execute /bin/true
$ ./build/qemu-x86_64 -plugin ./build/tests/plugin/libinsn.so -d plugin /bin/true
cpu 0 insns: 120546
total insns: 120546
- Slow execution to match 5 seconds
$ time ./build/qemu-x86_64 -plugin ./build/contrib/plugins/libips,ips=$((120546/5)) /bin/true
real 0m4.985s
v2
--
- Added missing personal Signed-off-by for commits from Alex
- Fix bad rebase in stubs/meson.build
- move qtest_{get,set}_virtual_clock to accel/qtest/qtest.c
- A race condition was identified for plugins init/idle/resume, but is not
related to this series, and will be fixed in another one:
https://lore.kernel.org/qemu-devel/20240529152219.825680-1-alex.bennee@linaro.org/
Alex Bennée (4):
sysemu: add set_virtual_time to accel ops
qtest: use cpu interface in qtest_clock_warp
sysemu: generalise qtest_warp_clock as qemu_clock_advance_virtual_time
plugins: add time control API
Pierrick Bouvier (2):
qtest: move qtest_{get,set}_virtual_clock to accel/qtest/qtest.c
contrib/plugins: add ips plugin example for cost modeling
include/qemu/qemu-plugin.h | 23 ++
include/qemu/timer.h | 15 ++
include/sysemu/accel-ops.h | 18 +-
include/sysemu/cpu-timers.h | 3 +-
include/sysemu/qtest.h | 2 -
accel/qtest/qtest.c | 13 +
contrib/plugins/ips.c | 239 ++++++++++++++++++
plugins/api.c | 31 +++
...t-virtual-clock.c => cpus-virtual-clock.c} | 5 +
system/cpus.c | 11 +
system/qtest.c | 37 +--
util/qemu-timer.c | 26 ++
contrib/plugins/Makefile | 1 +
plugins/qemu-plugins.symbols | 2 +
stubs/meson.build | 2 +-
15 files changed, 389 insertions(+), 39 deletions(-)
create mode 100644 contrib/plugins/ips.c
rename stubs/{cpus-get-virtual-clock.c => cpus-virtual-clock.c} (68%)
--
2.39.2
next reply other threads:[~2024-05-30 17:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-30 17:49 Pierrick Bouvier [this message]
2024-05-30 17:49 ` [PATCH v2 1/6] sysemu: add set_virtual_time to accel ops Pierrick Bouvier
2024-05-30 17:49 ` [PATCH v2 2/6] qtest: use cpu interface in qtest_clock_warp Pierrick Bouvier
2024-05-30 17:49 ` [PATCH v2 3/6] sysemu: generalise qtest_warp_clock as qemu_clock_advance_virtual_time Pierrick Bouvier
2024-05-30 17:49 ` [PATCH v2 4/6] qtest: move qtest_{get, set}_virtual_clock to accel/qtest/qtest.c Pierrick Bouvier
2024-05-30 17:49 ` [PATCH v2 5/6] plugins: add time control API Pierrick Bouvier
2024-05-30 17:49 ` [PATCH v2 6/6] contrib/plugins: add ips plugin example for cost modeling Pierrick Bouvier
2024-05-30 22:06 ` [PATCH v2 0/6] Implement icount=auto using TCG Plugins Pierrick Bouvier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240530174939.749163-1-pierrick.bouvier@linaro.org \
--to=pierrick.bouvier@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=erdnaxe@crans.org \
--cc=lvivier@redhat.com \
--cc=ma.mandourr@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).