qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/override specific event tracing routines
@ 2013-04-16 13:49 Lluís Vilanova
  2013-04-16 13:49 ` [Qemu-devel] [PATCH v2 01/23] instrument: Add documentation Lluís Vilanova
                   ` (23 more replies)
  0 siblings, 24 replies; 31+ messages in thread
From: Lluís Vilanova @ 2013-04-16 13:49 UTC (permalink / raw)
  To: qemu-devel

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 <vilanova@ac.upc.edu>
---

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: qemu-devel@nongnu.org
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Blue Swirl <blauwirbel@gmail.com>

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2013-04-20  0:42 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-16 13:49 [Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/override specific event tracing routines Lluís Vilanova
2013-04-16 13:49 ` [Qemu-devel] [PATCH v2 01/23] instrument: Add documentation Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 02/23] trace: [simple] Do not include "trace/simple.h" in generated tracer headers Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 03/23] trace: Let the user specify her own trace-events file Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 04/23] tracetool: Use method 'Event.api' to get the name of public routines Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 05/23] trace: Minimize inclusions of "qemu-common.h" to avoid inclusion loops Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 06/23] instrument: [none] Add null instrumentation Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 07/23] system: [linux] Use absolute include path for linux-headers Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 08/23] instrument: [static] Call statically linked user-provided routines Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 09/23] build: Add variable 'tools-obj-y' for tool-only files Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 10/23] instrument: [dynamic] Call dynamically linked user-provided routines Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 11/23] instrument: Add internal control interface Lluís Vilanova
2013-04-16 13:50 ` [Qemu-devel] [PATCH v2 12/23] instrument: [hmp] Add " Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 13/23] qapi: Add a primitive to include other files from a QAPI schema file Lluís Vilanova
2013-04-19  2:49   ` Eric Blake
2013-04-19 12:21     ` Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 14/23] [trivial] Set the input root directory when parsing QAPI files Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 15/23] instrument: [qmp, qapi] Add control interface Lluís Vilanova
2013-04-19  3:07   ` Eric Blake
2013-04-19 23:46     ` Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 16/23] Let makefiles add entries to the set of target architecture objects Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 17/23] instrument: Add commandline options to start with an instrumentation library Lluís Vilanova
2013-04-19  3:28   ` Eric Blake
2013-04-20  0:42     ` Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 18/23] instrument: Add client-side API to enumerate events Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 19/23] instrument: Add client-side API to control tracing state of events Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 20/23] instrument: Add client-side API to control event instrumentation Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 21/23] build: Fix installation of target-dependant files Lluís Vilanova
2013-04-16 13:51 ` [Qemu-devel] [PATCH v2 22/23] instrument: Install headers for dynamic instrumentation clients Lluís Vilanova
2013-04-16 13:52 ` [Qemu-devel] [PATCH v2 23/23] trace: Do not use the word 'new' in event arguments Lluís Vilanova
2013-04-16 20:52 ` [Qemu-devel] [RFC][PATCH v2 00/23] instrument: Let the user wrap/override specific event tracing routines Lluís Vilanova

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).