Adds the "vcpu" event property to identify events tied to a specific vCPU. In addition, it allows controlling the tracing state of such events on a per-vCPU basis.
Events with the "vcpu" property are identified as being tied to a particular virtual CPU, like executing an instruction. The state of such events can be controlled idependently; this is specially useful to, for example, trace memory access events of a process executing on a specific virtual CPU. This event plays in combination with the "tcg" property to avoid generating a call to the execution-time event tracer when a vCPU is not actively tracing such event. Virtual CPUs tracing the same set of events use the same physical translation cache, improving their reuse. The system has 2^N physical translation caches, where "N" is the number of TCG events with the "vcpu" property. Every vCPU has a bitmap with the states of these events, which can be controlled separately, and uses it to index into its physical translation cache. At translation time, QEMU generates the code to trace an event at execution time only if the event is enabled. Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> --- Lluís Vilanova (8): trace: Add support for vCPU pointers in trace events trace: Add 'vcpu' event property trace: [tcg] Identify events with the 'vcpu' property exec: [tcg] Refactor flush of per-CPU virtual TB cache exec: [ŧcg] Use multiple physical TB caches exec: [tcg] Track which vCPU is performing translation and execution [trivial] Track when QEMU has finished initialization trace: [tcg] Add per-vCPU tracing states for events with the 'vcpu' property Makefile.objs | 3 - bsd-user/main.c | 1 cpu-exec.c | 17 +++ cputlb.c | 2 docs/tracing.txt | 30 ++++++ include/exec/exec-all.h | 16 +++ include/qemu-common.h | 3 + include/qom/cpu.h | 10 ++ linux-user/main.c | 1 qapi/trace.json | 36 +++++++ qemu-common.c | 14 +++ qmp-commands.hx | 27 +++++ qom/cpu.c | 21 ++++ scripts/tracetool/__init__.py | 24 ++++- scripts/tracetool/format/events_c.py | 11 ++ scripts/tracetool/format/events_h.py | 12 ++ scripts/tracetool/format/h.py | 4 + scripts/tracetool/format/tcg_h.py | 19 +++- scripts/tracetool/format/tcg_helper_c.py | 11 ++ scripts/tracetool/format/ust_events_c.py | 4 + scripts/tracetool/transform.py | 9 ++ stubs/Makefile.objs | 1 stubs/qemu-common-stub.c | 21 ++++ target-alpha/translate.c | 3 - target-arm/translate.c | 3 - target-arm/translate.h | 2 target-cris/translate.c | 3 - target-cris/translate_v10.c | 1 target-i386/translate.c | 3 - target-lm32/translate.c | 3 - target-m68k/translate.c | 3 - target-microblaze/translate.c | 3 - target-mips/translate.c | 3 - target-moxie/translate.c | 3 - target-openrisc/translate.c | 3 - target-ppc/translate.c | 3 - target-s390x/translate.c | 3 - target-sh4/translate.c | 3 - target-sparc/translate.c | 6 + target-tilegx/translate.c | 3 - target-tricore/translate.c | 3 - target-unicore32/translate.c | 3 - target-xtensa/translate.c | 3 - tcg/tcg-op.h | 2 tcg/tcg.h | 10 ++ trace/Makefile.objs | 2 trace/control-internal.h | 25 ++++- trace/control-stub.c | 29 ++++++ trace/control-target.c | 53 ++++++++++ trace/control.h | 63 ++++++++++++ trace/event-internal.h | 4 + trace/qmp.c | 129 +++++++++++++++++++++++-- translate-all.c | 156 ++++++++++++++++++++++++++---- translate-all.h | 49 +++++++++ ui/Makefile.objs | 2 vl.c | 2 56 files changed, 801 insertions(+), 82 deletions(-) create mode 100644 qemu-common.c create mode 100644 stubs/qemu-common-stub.c create mode 100644 trace/control-stub.c create mode 100644 trace/control-target.c To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi <stefa...@gmail.com>