On Mon, Nov 02, 2026 at 02:28:19PM +0000, Daniel P. Berrangé wrote:
> 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 v4:
> 
>  * Fix hex printing in hppa trace events
>  * Remove more docs mentions of 'disable'
> 
> 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é (25):
>   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
>   target/hppa: use PRIx64 in trace-events
>   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                       |  27 +----
>  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                              |  49 +--------
>  trace/event-internal.h                       |  19 +---
>  trace/ftrace.c                               |   3 +-
>  trace/qmp.c                                  |  47 +++------
>  trace/simple.c                               |   9 +-
>  65 files changed, 750 insertions(+), 457 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.56.0
> 

Thanks, applied to my tracing tree:
https://gitlab.com/stefanha/qemu/commits/tracing

Stefan


Reply via email to