[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU tr
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU trace channel |
Date: |
Fri, 4 Aug 2017 16:34:53 +0100 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
On Sun, Jul 30, 2017 at 05:08:18PM +0300, Lluís Vilanova wrote:
> 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 <address@hidden>
> ---
>
> 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.
Hi Lluís,
Any changes regarding the fundamental approach since September 2016?
Back then I had the following concerns about hypertrace for full-system
virtualization:
Going to QEMU for every guest trace event has high overhead under
virtualization. The alternative approach is recording separate traces
and merging them for analysis. This is possible with trace-cmd [1] and
LTTng [2].
Merging traces eliminates the performance bottleneck and does not
require new paravirt interfaces or guest tracing libraries. I think it
it would be a distraction to support hypertrace for the virtualization
use case because it fundamentally has a high overhead.
I see promise in using hypertrace for TCG because it is low-overhead
when running inside the QEMU process. I'll review the patches again
with this in mind and not focus on virtualization.
[1] https://lists.nongnu.org/archive/html/qemu-devel/2016-03/msg00887.html
[2]
http://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/Virtual-Machine-Analysis.html
and also generic trace synchronization
http://archive.eclipse.org/tracecompass/doc/stable/org.eclipse.tracecompass.doc.user/Trace-synchronization.html#Trace_synchronization
Stefan
> 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: address@hidden
> Cc: Stefan Hajnoczi <address@hidden>
> Cc: Eric Blake <address@hidden>
> Cc: Luiz Capitulino <address@hidden>
> Cc: Daniel P Berrange <address@hidden>
signature.asc
Description: PGP signature
- Re: [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU trace channel,
Stefan Hajnoczi <=