[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/overrid
From: |
Lluís Vilanova |
Subject: |
[Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/override specific event tracing routines |
Date: |
Tue, 16 Apr 2013 15:49:51 +0200 |
User-agent: |
StGit/0.16 |
TODO: Make sure no TCG code is executing during 'instr_unload' (qemu_cpu_kick?
tb_lock?)
The whole set of patch series is available at:
https://projects.gso.ac.upc.edu/projects/qemu-dbi
Adds the "instrument" event property to declare which tracing events in QEMU
must be instrumentable. Still, in case the user only wants to wrap around the
tracing events, the original tracing implementation is accessible through the
appropriate routines.
The instrumentation can be performed either through a dynamically-loaded library
or through user-provided code that is compiled into QEMU itself (useful when
instrumenting high-frequency events, as the fast-path of the instrumentation can
be inlined into QEMU).
As a side-effect this series adds an API for the instrumentation code to have
some basic interaction with QEMU.
See the documentation added in the first patch for more information.
Signed-off-by: Lluís Vilanova <address@hidden>
---
Changes in v2:
* Rebased on latest master (e2ec3f9).
* Added "libqemutools.a".
* Have 'tracetool' forbid certain event argument names.
* Fixed title in path for "linux-headers" include path (Peter Maydell).
* Small fixes to qapi/qmp (Eric Blake).
* Have 'qi_init' accept a list of strings as arguments (Eric Blake)
Lluís Vilanova (23):
instrument: Add documentation
trace: [simple] Do not include "trace/simple.h" in generated tracer
headers
trace: Let the user specify her own trace-events file
tracetool: Use method 'Event.api' to get the name of public routines
trace: Minimize inclusions of "qemu-common.h" to avoid inclusion loops
instrument: [none] Add null instrumentation
system: [linux] Use absolute include path for linux-headers
instrument: [static] Call statically linked user-provided routines
build: Add variable 'tools-obj-y' for tool-only files
instrument: [dynamic] Call dynamically linked user-provided routines
instrument: Add internal control interface
instrument: [hmp] Add control interface
qapi: Add a primitive to include other files from a QAPI schema file
[trivial] Set the input root directory when parsing QAPI files
instrument: [qmp, qapi] Add control interface
Let makefiles add entries to the set of target architecture objects
instrument: Add commandline options to start with an instrumentation
library
instrument: Add client-side API to enumerate events
instrument: Add client-side API to control tracing state of events
instrument: Add client-side API to control event instrumentation
build: Fix installation of target-dependant files
instrument: Install headers for dynamic instrumentation clients
trace: Do not use the word 'new' in event arguments
.gitignore | 4
Makefile | 57 +++
Makefile.objs | 9
Makefile.target | 7
bsd-user/main.c | 25 +
bsd-user/syscall.c | 5
configure | 96 +++++
docs/instrumentation.txt | 496 +++++++++++++++++++++++++++
docs/tracing.txt | 9
hmp-commands.hx | 42 ++
hw/virtio/virtio.c | 1
include/qapi/qmp/qerror.h | 9
include/trace.h | 2
instrument/Makefile.objs | 87 +++++
instrument/api-control.c | 14 +
instrument/api-trace.c | 14 +
instrument/cmdline.c | 101 +++++
instrument/cmdline.h | 52 +++
instrument/control-internal.h | 38 ++
instrument/control.c | 139 ++++++++
instrument/control.h | 134 +++++++
instrument/hmp.c | 66 ++++
instrument/hmp.h | 21 +
instrument/qapi-schema.json | 33 ++
instrument/qemu-instr/control-internal.h | 69 ++++
instrument/qemu-instr/control.h | 185 ++++++++++
instrument/qemu-instr/trace-internal.h | 32 ++
instrument/qemu-instr/trace.h | 91 +++++
instrument/qemu-instr/visibility-internal.h | 94 +++++
instrument/qmp.c | 70 ++++
libcacard/Makefile | 4
linux-user/main.c | 30 ++
linux-user/syscall.c | 4
monitor.c | 5
qapi-schema.json | 2
qemu-options.hx | 18 +
qmp-commands.hx | 71 ++++
qmp.c | 4
rules.mak | 3
scripts/qapi-commands.py | 10 -
scripts/qapi-types.py | 10 -
scripts/qapi-visit.py | 10 -
scripts/qapi.py | 12 +
scripts/tracetool.py | 14 +
scripts/tracetool/__init__.py | 44 ++
scripts/tracetool/backend/dtrace.py | 6
scripts/tracetool/backend/instr_dynamic.py | 93 +++++
scripts/tracetool/backend/instr_none.py | 44 ++
scripts/tracetool/backend/instr_static.py | 82 ++++
scripts/tracetool/backend/simple.py | 13 -
scripts/tracetool/backend/stderr.py | 5
scripts/tracetool/backend/ust.py | 8
scripts/tracetool/format/api_c.py | 24 +
scripts/tracetool/format/api_events_h.py | 56 +++
scripts/tracetool/format/api_h.py | 39 ++
scripts/tracetool/format/events_c.py | 42 ++
scripts/tracetool/format/h.py | 15 +
scripts/tracetool/format/qemu_h.py | 68 ++++
trace-events | 8
trace/Makefile.objs | 10 -
trace/control-internal.h | 4
trace/control.c | 4
trace/control.h | 9
trace/default.c | 4
trace/event-internal.h | 17 +
trace/simple.c | 6
trace/simple.h | 1
trace/stderr.c | 4
vl.c | 41 ++
69 files changed, 2774 insertions(+), 72 deletions(-)
create mode 100644 docs/instrumentation.txt
create mode 100644 instrument/Makefile.objs
create mode 100644 instrument/api-control.c
create mode 100644 instrument/api-trace.c
create mode 100644 instrument/cmdline.c
create mode 100644 instrument/cmdline.h
create mode 100644 instrument/control-internal.h
create mode 100644 instrument/control.c
create mode 100644 instrument/control.h
create mode 100644 instrument/hmp.c
create mode 100644 instrument/hmp.h
create mode 100644 instrument/qapi-schema.json
create mode 100644 instrument/qemu-instr/control-internal.h
create mode 100644 instrument/qemu-instr/control.h
create mode 100644 instrument/qemu-instr/trace-internal.h
create mode 100644 instrument/qemu-instr/trace.h
create mode 100644 instrument/qemu-instr/visibility-internal.h
create mode 100644 instrument/qmp.c
create mode 100644 scripts/tracetool/backend/instr_dynamic.py
create mode 100644 scripts/tracetool/backend/instr_none.py
create mode 100644 scripts/tracetool/backend/instr_static.py
create mode 100644 scripts/tracetool/format/api_c.py
create mode 100644 scripts/tracetool/format/api_events_h.py
create mode 100644 scripts/tracetool/format/api_h.py
create mode 100644 scripts/tracetool/format/qemu_h.py
To: address@hidden
Cc: Stefan Hajnoczi <address@hidden>
Cc: Blue Swirl <address@hidden>
- [Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/override specific event tracing routines,
Lluís Vilanova <=
- [Qemu-devel] [PATCH v2 21/23] build: Fix installation of target-dependant files, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 22/23] instrument: Install headers for dynamic instrumentation clients, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 20/23] instrument: Add client-side API to control event instrumentation, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 19/23] instrument: Add client-side API to control tracing state of events, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 18/23] instrument: Add client-side API to enumerate events, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 17/23] instrument: Add commandline options to start with an instrumentation library, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 09/23] build: Add variable 'tools-obj-y' for tool-only files, Lluís Vilanova, 2013/04/16
- [Qemu-devel] [PATCH v2 08/23] instrument: [static] Call statically linked user-provided routines, Lluís Vilanova, 2013/04/16