The hypertrace channel allows guest code to emit events in QEMU (the host) using its tracing infrastructure (see "docs/trace.txt"). This works in both 'system' and 'user' modes, is architecture-agnostic and introduces minimal noise on the guest.
See first commit for a full description, use-cases and an example. Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> --- Changes in v8 ============= * Do not use 'seq' when there's no extra hypertrace arguments (BSD behaves differently for "seq 0"). * Fix compilation for bsd-user. Changes in v7 ============= * Use 'expr' instead of assuming 'bash' when generating the "emit.c" file. * Restore generation of trace-events-all. Changes in v6 ============= * Fix compilation errors. Changes in v5 ============= * Rebase on 5a477a7806. * Fix typo in "bsd-user/main.c" [Stephan Hajnoczi]. * Replace abort() with exit() in command-line errors [Stephan Hajnoczi]. * Fix alignment of data and control channels [Stephan Hajnoczi]. * Fix signal reflection in user-mode (SIGINT, SIGABRT, SIGSEGV) [Stephan Hajnoczi]. * Clarify semantics of hypertrace_guest_mmap_check() [Stephan Hajnoczi]. * Use uintptr_t instead of unsigned long in SEGV handler [Stephan Hajnoczi]. * Emit hypertrace's event with host-endian arguments [Stephan Hajnoczi]. * Enable true concurrency between user-mode guest threads by using a spearate control channel page per client [Stephan Hajnoczi]. * Remove unused PAGE_SIZE define [Stephan Hajnoczi]. * Submit linux kernel API module separately to Linux upstream [Stephan Hajnoczi]. * Assume guest code events are always enabled. Changes in v4 ============= * Fix typo in stap script example. * Fix compilation instructions in doc/hypertrace.txt. * Rebase on 0737f32daf. Changes in v3 ============= * Rebase on 4a58f35. * Remove debugging printf's. * Fix style issues identified by checkpatch. * Fix control channel mapping in guest linux module. * Add a short event description in "trace-events". * Polish documentation in 1st patch. Changes in v2 ============= * Remove unnecessary casts for g2h() [Eric Blake]. * Use perror() [Eric Blake]. * Avoid expansions in application example [Eric Blake]. * Add copyright in document "hypertrace.txt" [Eric Blake]. * Make the user-mode hypertrace invocations thread-safe [Stefan Hajnoczi]. * Split dynamic hypertrace configuration into a separate "config" channel. Lluís Vilanova (5): hypertrace: Add documentation hypertrace: Add tracing event "guest_hypertrace" hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event hypertrace: [softmmu] Add QEMU-side proxy to "guest_hypertrace" event hypertrace: Add guest-side user-level library Makefile | 11 + Makefile.objs | 6 + bsd-user/main.c | 17 + bsd-user/mmap.c | 15 + bsd-user/qemu.h | 3 bsd-user/syscall.c | 34 ++- configure | 36 +++ docs/devel/tracing.txt | 3 docs/hypertrace.txt | 225 ++++++++++++++++++++ hypertrace/Makefile.objs | 25 ++ hypertrace/common.c | 55 +++++ hypertrace/common.h | 25 ++ hypertrace/guest/Makefile | 30 +++ hypertrace/guest/common.c | 301 ++++++++++++++++++++++++++ hypertrace/guest/qemu-hypertrace.h | 80 +++++++ hypertrace/softmmu.c | 237 +++++++++++++++++++++ hypertrace/user.c | 415 ++++++++++++++++++++++++++++++++++++ hypertrace/user.h | 71 ++++++ include/hw/pci/pci.h | 2 include/qom/cpu.h | 4 linux-user/main.c | 19 ++ linux-user/mmap.c | 16 + linux-user/qemu.h | 3 linux-user/signal.c | 12 + linux-user/syscall.c | 31 ++- rules.mak | 2 trace-events | 11 + 27 files changed, 1660 insertions(+), 29 deletions(-) create mode 100644 docs/hypertrace.txt create mode 100644 hypertrace/Makefile.objs create mode 100644 hypertrace/common.c create mode 100644 hypertrace/common.h create mode 100644 hypertrace/guest/Makefile create mode 100644 hypertrace/guest/common.c create mode 100644 hypertrace/guest/qemu-hypertrace.h create mode 100644 hypertrace/softmmu.c create mode 100644 hypertrace/user.c create mode 100644 hypertrace/user.h To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi <stefa...@redhat.com> Cc: Eric Blake <ebl...@redhat.com> Cc: Luiz Capitulino <lcapitul...@redhat.com> Cc: Daniel P Berrange <berra...@redhat.com>