From: "Lluís Vilanova" <vilanova@ac.upc.edu>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU trace channel
Date: Fri, 04 Aug 2017 21:32:25 +0300 [thread overview]
Message-ID: <87mv7fkwue.fsf@frigg.lan> (raw)
In-Reply-To: <20170804153453.GG14565@stefanha-x1.localdomain> (Stefan Hajnoczi's message of "Fri, 4 Aug 2017 16:34:53 +0100")
Stefan Hajnoczi writes:
> 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 <vilanova@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.
> 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
There's been no fundamental changes since then (just the few bits listed in the
v5-v8 changelog).
But I'm kind of split on this one.
If you want high-performance trace correlation, this will work much better for
TCG than virtualization (where [1] will probably be more efficient).
If you want a hook to trigger other operations (like in the docs example), I
think this is the right approach. In fact, my initial interest in hypertrace was
for instrumentation, so maybe this should be subsumed into the proposal of a
stable instrumentation API.
What do you think?
Cheers,
Lluis
> 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: qemu-devel@nongnu.org
>> Cc: Stefan Hajnoczi <stefanha@redhat.com>
>> Cc: Eric Blake <eblake@redhat.com>
>> Cc: Luiz Capitulino <lcapitulino@redhat.com>
>> Cc: Daniel P Berrange <berrange@redhat.com>
next prev parent reply other threads:[~2017-08-04 18:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-30 14:08 [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU trace channel Lluís Vilanova
2017-07-30 14:12 ` [Qemu-devel] [PATCH v8 1/5] hypertrace: Add documentation Lluís Vilanova
2017-08-04 17:50 ` Eric Blake
2017-07-30 14:16 ` [Qemu-devel] [PATCH v8 2/5] hypertrace: Add tracing event "guest_hypertrace" Lluís Vilanova
2017-07-30 14:20 ` [Qemu-devel] [PATCH v8 3/5] hypertrace: [*-user] Add QEMU-side proxy to "guest_hypertrace" event Lluís Vilanova
2017-07-30 14:24 ` [Qemu-devel] [PATCH v8 4/5] hypertrace: [softmmu] " Lluís Vilanova
2017-07-30 14:28 ` [Qemu-devel] [PATCH v8 5/5] hypertrace: Add guest-side user-level library Lluís Vilanova
2017-07-30 14:49 ` [Qemu-devel] [PATCH v8 0/5] hypertrace: Lightweight guest-to-QEMU trace channel no-reply
2017-08-04 15:34 ` Stefan Hajnoczi
2017-08-04 18:32 ` Lluís Vilanova [this message]
2017-08-08 12:25 ` Stefan Hajnoczi
2017-08-26 0:34 ` Emilio G. Cota
2017-08-31 11:59 ` Stefan Hajnoczi
2017-08-31 15:13 ` Lluís Vilanova
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87mv7fkwue.fsf@frigg.lan \
--to=vilanova@ac.upc.edu \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.