From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@oss.qualcomm.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PATCH v3 00/24] trace: bugfixes, cleanups and optimizations
Date: Mon, 5 Oct 2026 13:08:31 +0100 [thread overview]
Message-ID: <20261005120855.421973-1-berrange@redhat.com> (raw)
This series started off with fixing some compile failures seen
with dtrace and ust backends, and got somewhat out of hand as
I looked more deeply at the trace code. So it ended up doing
various bits of code cleanup and memory usage optimizations.
The optimizations aren't huge against each individual binaries.
There are too many scenarios to show the full set, but here
are some binary size examples
The current git master baseline for different enabled
backends on the x86_64 emulator:
nop 88546360
dtrace 90604496
ftrace 93265944
log 93799528
syslog 93962704
simple 97064528
ust 162999944
dtrace,ftrace,log,syslog,simple,ust 174438088
'ust' has insanely high overhead in terms of binary sizes,
inexplicably insane.
'ftrace/log/syslog' are all similar because their overhead
is dominated by the printf() format strings which are
identical in all.
'simple' is a bit worse because of the helper functions we
must generated for each probe
After this series is applied the results for x86_64 are
nop 88510248
dtrace 90576160
ftrace 93156320
log 93735064
syslog 93853480
simple 97050856
ust 162957256
dtrace,ftrace,log,syslog,simple,ust 174431128
IOW, for 'dtrace', we save 28k, for 'log' we save 62k
For the aarch64 binary, we see bigger saving in some
cases:
baseline dtrace 127610144
baseline log 131050320
trace dtrace 127459264
trace log 130998872
IOW, for 'dtrace' we save 150k, for 'log' we only save
50k. No clue why the saving is not so significant for
the 'log' backend but not a big deal.
Changed in v3:
* Include QEMU log mask check in Rust generated code too
* Eliminate duplicate state checks in DSTATE macro
Changed in v2:
* Improve some commit messages
* Updated tracing.rst docs
Daniel P. Berrangé (24):
osdep: add 'ignore_value(x)' macro
trace: use 'ignore_value()' instead of a dummy variable
trace: fix handling of char** in UST backend
hw/xen: replace "long unsigned int" with "unsigned long " for dtrace
trace: block use of "long int" for dtrace
trace: drop unused trace_event_set_state_dynamic_init()
trace: remove obsolete references to vcpu property
trace: drop 'id' from TraceEvent struct when not required
trace: change "DSTATE" variables from uint16_t to uint8_t
trace: add testing of 'nop' trace backend
trace: don't emit TraceEvent structs when 'nop' backend is used
trace: add test of generation with all backends enabled
trace: remove redundant headers from simple trace backend code
trace: include probe name in Rust format strings
trace: add missing newline in ftrace Rust format string
trace: eliminate dupe trace_event_get_state_dynamic_by_id() calls
audio: remove mistaken use of trace_event_get_state()
hw/ppc: remove mistaken use of trace_event_get_state()
monitor: remove mistaken use of trace_event_get_state()
trace: include qemu_loglevel_mask(LOG_TRACE) in guard
trace: remove "disable" property from trace files
trace: stop tracking static disabled state
trace: remove parsing of "disable" event property
trace: remove 'trace_event_get_state' wrapper
audio/audio-mixeng-be.c | 2 +-
docs/devel/tracing.rst | 24 +----
hw/display/trace-events | 2 +-
hw/ppc/vof.c | 13 +--
hw/xen/trace-events | 4 +-
include/qemu/osdep.h | 8 ++
monitor/qmp.c | 4 +-
qapi/trace.json | 5 +-
scripts/tracetool/__init__.py | 32 ++----
scripts/tracetool/backend/__init__.py | 7 +-
scripts/tracetool/backend/dtrace.py | 2 -
scripts/tracetool/backend/ftrace.py | 8 +-
scripts/tracetool/backend/log.py | 22 ++--
scripts/tracetool/backend/simple.py | 9 +-
scripts/tracetool/backend/syslog.py | 6 +-
scripts/tracetool/format/c.py | 74 +++++++-------
scripts/tracetool/format/d.py | 3 -
scripts/tracetool/format/h.py | 48 ++++-----
scripts/tracetool/format/log_stap.py | 3 -
scripts/tracetool/format/rs.py | 30 +++---
scripts/tracetool/format/simpletrace_stap.py | 3 -
scripts/tracetool/format/stap.py | 3 -
scripts/tracetool/format/ust_events_c.py | 3 -
scripts/tracetool/format/ust_events_h.py | 7 +-
stubs/trace-control.c | 6 --
target/hppa/trace-events | 28 +++---
tests/tracetool/all.c | 61 +++++++++++
tests/tracetool/all.d | 10 ++
tests/tracetool/all.h | 100 +++++++++++++++++++
tests/tracetool/all.log-stap | 15 +++
tests/tracetool/all.rs | 98 ++++++++++++++++++
tests/tracetool/all.simpletrace-stap | 16 +++
tests/tracetool/all.stap | 14 +++
tests/tracetool/all.ust-events-c | 14 +++
tests/tracetool/all.ust-events-h | 56 +++++++++++
tests/tracetool/dtrace.c | 10 +-
tests/tracetool/dtrace.h | 6 +-
tests/tracetool/dtrace.rs | 6 +-
tests/tracetool/ftrace.c | 10 +-
tests/tracetool/ftrace.h | 14 ++-
tests/tracetool/ftrace.rs | 10 +-
tests/tracetool/log.c | 10 +-
tests/tracetool/log.h | 26 +++--
tests/tracetool/log.rs | 12 ++-
tests/tracetool/meson.build | 4 +-
tests/tracetool/nop.c | 7 ++
tests/tracetool/nop.h | 25 +++++
tests/tracetool/nop.rs | 51 ++++++++++
tests/tracetool/simple.c | 12 +--
tests/tracetool/simple.h | 10 +-
tests/tracetool/simple.rs | 6 +-
tests/tracetool/syslog.c | 10 +-
tests/tracetool/syslog.h | 14 ++-
tests/tracetool/syslog.rs | 10 +-
tests/tracetool/tracetool-test.py | 12 ++-
tests/tracetool/ust.c | 10 +-
tests/tracetool/ust.h | 6 +-
trace/control-internal.h | 8 +-
trace/control-target.c | 29 ------
trace/control.c | 19 +---
trace/control.h | 43 +-------
trace/event-internal.h | 19 +---
trace/ftrace.c | 3 +-
trace/qmp.c | 47 +++------
trace/simple.c | 9 +-
65 files changed, 749 insertions(+), 449 deletions(-)
create mode 100644 tests/tracetool/all.c
create mode 100644 tests/tracetool/all.d
create mode 100644 tests/tracetool/all.h
create mode 100644 tests/tracetool/all.log-stap
create mode 100644 tests/tracetool/all.rs
create mode 100644 tests/tracetool/all.simpletrace-stap
create mode 100644 tests/tracetool/all.stap
create mode 100644 tests/tracetool/all.ust-events-c
create mode 100644 tests/tracetool/all.ust-events-h
create mode 100644 tests/tracetool/nop.c
create mode 100644 tests/tracetool/nop.h
create mode 100644 tests/tracetool/nop.rs
--
2.55.0
next reply other threads:[~2026-10-05 12:10 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 12:08 Daniel P. Berrangé [this message]
2026-10-05 12:08 ` [PATCH v3 01/24] osdep: add 'ignore_value(x)' macro Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 02/24] trace: use 'ignore_value()' instead of a dummy variable Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 03/24] trace: fix handling of char** in UST backend Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 04/24] hw/xen: replace "long unsigned int" with "unsigned long " for dtrace Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 05/24] trace: block use of "long int" " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 06/24] trace: drop unused trace_event_set_state_dynamic_init() Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 07/24] trace: remove obsolete references to vcpu property Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 08/24] trace: drop 'id' from TraceEvent struct when not required Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 09/24] trace: change "DSTATE" variables from uint16_t to uint8_t Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 10/24] trace: add testing of 'nop' trace backend Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 11/24] trace: don't emit TraceEvent structs when 'nop' backend is used Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 12/24] trace: add test of generation with all backends enabled Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 13/24] trace: remove redundant headers from simple trace backend code Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 14/24] trace: include probe name in Rust format strings Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 15/24] trace: add missing newline in ftrace Rust format string Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 16/24] trace: eliminate dupe trace_event_get_state_dynamic_by_id() calls Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 17/24] audio: remove mistaken use of trace_event_get_state() Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 18/24] hw/ppc: " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 19/24] monitor: " Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 20/24] trace: include qemu_loglevel_mask(LOG_TRACE) in guard Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 21/24] trace: remove "disable" property from trace files Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 22/24] trace: stop tracking static disabled state Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 23/24] trace: remove parsing of "disable" event property Daniel P. Berrangé
2026-10-05 12:08 ` [PATCH v3 24/24] trace: remove 'trace_event_get_state' wrapper Daniel P. Berrangé
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=20261005120855.421973-1-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.