From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH for-2.8 v1 00/60] Modular build of trace event files
Date: Fri, 9 Sep 2016 13:08:38 +0100 [thread overview]
Message-ID: <20160909120838.GJ25802@redhat.com> (raw)
In-Reply-To: <87y431bai0.fsf@fimbulvetr.bsc.es>
On Fri, Sep 09, 2016 at 01:03:51PM +0200, Lluís Vilanova wrote:
> Daniel P Berrange writes:
>
> > On Thu, Sep 08, 2016 at 03:23:26PM +0200, Lluís Vilanova wrote:
> >> Daniel P Berrange writes:
> >>
> >> > I previously split the global trace-events file up into one file
> >> > per-subdirectory to avoid merge conflict hell.
> >> [...]
> >>
> >> Sorry, I could not find the message where the infrastructure is modified to
> >> provide this. But I think there's a more efficient way to provide modular
> >> auto-generated tracing code without the hierarchical indexing you proposed.
>
> > [snip]
>
> >> struct TraceEvent ___trace_events[] = {
> >> {
> >> .name = "eventname",
> >> .sstate = 1,
> >> .dstate = ___trace_eventname_dstate;
> >> }
> >> }
> >>
> >> TraceEvent *TRACE_EVENTNAME = &___trace_events[...];
>
> > Life would be simpler if we had the 'bool dstate' as part of the
> > TraceEvent struct, but doing so would essentially be reverting this
> > previous change:
>
> > commit 585ec7273e6fdab902b2128bc6c2a8136aafef04
> > Author: Paolo Bonzini <pbonzini@redhat.com>
> > Date: Wed Oct 28 07:06:27 2015 +0100
>
> > trace: track enabled events in a separate array
>
> > This is more cache friendly on the fast path, where we already have
> > the event id available.
>
> > I asked Paolo about this previously and he indicated it was a notable
> > performance improvement, so we can't put dstate back into the TraceEvent
> > struct :-(
>
> Sorry, there was a typo in my example code that led to this misunderstanding.
>
> I meant this for the global auto-generated .c:
>
> struct TraceEvent {
> /* ... */
> bool *dstate;
> };
>
> bool ___TRACE_EVENTNAME_DSTATE;
>
> struct TraceEvent ___trace_events[] = {
> {
> .name = "eventname",
> .sstate = 1,
> .dstate = &___TRACE_EVENTNAME_DSTATE;
> }
> }
>
> TraceEvent *TRACE_EVENTNAME = &___trace_events[...];
>
>
> If you look at the modified macro I pasted for "trace/control-internal.h":
>
>
> #define trace_event_get_state_dynamic_by_id(id) \
> (unlikely(trace_events_enabled_count) && \
> (___ ## id ## _DSTATE))
>
> We're retaining the fast-path performance of the seggregated boolean dstate
> array, while the event descriptor contains a pointer to the per-event dstate
> global boolean variable in case you want to get/set the dstate based on an event
> pointer.
The various _DSTATE variables are still arbitrarily scattered in
memory, as opposed to in a contiguous cache friendly array, which
is one of the goals of Paolo's original change.
That said, I'm unclear on how much of the performance win from
Paolo's change came from eliminating the struct field de-reference,
vs having the contiguous array. I'm guessing most of the win is
from the former, the latter only being important if we hit multiple
related tracepoints on close succession.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
next prev parent reply other threads:[~2016-09-09 12:08 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-09 15:31 [Qemu-devel] [PATCH for-2.8 v1 00/60] Modular build of trace event files Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 01/60] trace: move util/buffer.c trace points into correct file Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 02/60] trace: move util/qemu-coroutine*.c " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 03/60] trace: move hw/mem/pc-dimm.c " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 04/60] trace: move hw/virtio/virtio-balloon.c " Daniel P. Berrange
2016-09-08 18:09 ` Eric Blake
2016-09-14 14:50 ` Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 05/60] trace: add trace event iterator APIs Daniel P. Berrange
2016-09-02 20:52 ` Stefan Hajnoczi
2016-09-14 12:32 ` Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 06/60] trace: convert code to use event iterators Daniel P. Berrange
2016-09-02 20:55 ` Stefan Hajnoczi
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 07/60] trace: remove some now unused functions Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 08/60] trace: provide mechanism for registering trace events Daniel P. Berrange
2016-08-09 16:17 ` Paolo Bonzini
2016-08-09 16:18 ` Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 09/60] trace: remove use of TRACE_VCPU_EVENT_COUNT in cpu.h Daniel P. Berrange
2016-09-02 21:03 ` Stefan Hajnoczi
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 10/60] trace: remove fixed global event state arrays Daniel P. Berrange
2016-08-10 14:00 ` Lluís Vilanova
2016-08-10 14:47 ` Daniel P. Berrange
2016-08-10 16:13 ` Lluís Vilanova
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 11/60] trace: remove use of event ID enums from APIs Daniel P. Berrange
2016-08-09 16:18 ` Paolo Bonzini
2016-08-09 16:24 ` Daniel P. Berrange
2016-08-09 16:26 ` Paolo Bonzini
2016-09-02 21:13 ` Stefan Hajnoczi
2016-09-14 12:32 ` Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 12/60] trace: use -1 instead of TRACE_VCPU_EVENT_COUNT as magic value Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 13/60] trace: remove generated-events.h from many includes Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 14/60] trace: get rid of generated-events.h/generated-events.c Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 15/60] trace: introduce a formal group name for trace events Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 16/60] trace: introduce ID range offsets per trace-events file Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 17/60] trace: introduce some Makefile rules for module code gen Daniel P. Berrange
2016-08-10 14:18 ` Lluís Vilanova
2016-08-10 14:48 ` Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 18/60] trace: switch io/ directory to modular trace.h file Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 19/60] trace: switch util/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 20/60] trace: switch crypto/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 21/60] trace: switch migration/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 22/60] trace: switch block/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 23/60] trace: switch hw/block/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 24/60] trace: switch hw/char/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 25/60] trace: switch hw/intc/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 26/60] trace: switch hw/net/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 27/60] trace: switch hw/virtio/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 28/60] trace: switch hw/audio/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 29/60] trace: switch hw/misc/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 30/60] trace: switch hw/usb/ " Daniel P. Berrange
2016-08-09 15:31 ` [Qemu-devel] [PATCH for-2.8 v1 31/60] trace: switch hw/scsi/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 32/60] trace: switch hw/nvram/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 33/60] trace: switch hw/display/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 34/60] trace: switch hw/input/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 35/60] trace: switch hw/timer/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 36/60] trace: switch hw/dma/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 37/60] trace: switch hw/sparc/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 38/60] trace: switch hw/sd/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 39/60] trace: switch hw/isa/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 40/60] trace: switch hw/mem/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 41/60] trace: switch hw/i386/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 42/60] trace: switch hw/9pfs/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 43/60] trace: switch hw/ppc/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 44/60] trace: switch hw/pci/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 45/60] trace: switch hw/s390x/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 46/60] trace: switch hw/vfio/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 47/60] trace: switch hw/acpi/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 48/60] trace: switch hw/arm/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 49/60] trace: switch hw/alpha/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 50/60] trace: switch ui/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 51/60] trace: switch audio/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 52/60] trace: switch net/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 53/60] trace: switch target-i386/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 54/60] trace: switch target-sparc/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 55/60] trace: switch target-s390x/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 56/60] trace: switch target-ppc/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 57/60] trace: switch qom/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 58/60] trace: switch linux-user/ " Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 59/60] trace: remove the global include/trace.h file Daniel P. Berrange
2016-08-09 15:32 ` [Qemu-devel] [PATCH for-2.8 v1 60/60] trace: update docs to reflect new code generation approach Daniel P. Berrange
2016-08-10 14:33 ` Lluís Vilanova
2016-08-10 14:51 ` Daniel P. Berrange
2016-08-10 16:11 ` Lluís Vilanova
2016-08-11 8:13 ` Daniel P. Berrange
2016-08-11 10:11 ` Lluís Vilanova
2016-09-02 21:24 ` Stefan Hajnoczi
2016-09-14 12:34 ` Daniel P. Berrange
2016-08-09 17:03 ` [Qemu-devel] [PATCH for-2.8 v1 00/60] Modular build of trace event files no-reply
2016-08-09 17:11 ` Daniel P. Berrange
2016-08-10 1:41 ` Fam Zheng
2016-08-10 8:06 ` Daniel P. Berrange
2016-08-10 8:13 ` Fam Zheng
2016-08-10 8:24 ` Daniel P. Berrange
2016-08-10 8:39 ` Fam Zheng
2016-08-10 8:50 ` Daniel P. Berrange
2016-08-10 15:54 ` Paolo Bonzini
2016-08-10 1:58 ` Fam Zheng
2016-08-10 14:05 ` Lluís Vilanova
2016-08-10 14:52 ` Daniel P. Berrange
2016-09-08 13:23 ` Lluís Vilanova
2016-09-08 13:43 ` Daniel P. Berrange
2016-09-09 11:03 ` Lluís Vilanova
2016-09-09 12:08 ` Daniel P. Berrange [this message]
2016-09-09 13:16 ` Lluís Vilanova
2016-09-13 17:53 ` Daniel P. Berrange
2016-09-14 13:20 ` Lluís Vilanova
2016-09-13 17:08 ` Daniel P. Berrange
2016-09-13 18:36 ` Lluís Vilanova
2016-09-14 8:25 ` Daniel P. Berrange
2016-09-14 13:26 ` Lluís Vilanova
2016-09-13 14:54 ` Stefan Hajnoczi
2016-09-13 15:10 ` Daniel P. Berrange
2016-09-13 16:05 ` Lluís Vilanova
2016-09-13 16:27 ` Daniel P. Berrange
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=20160909120838.GJ25802@redhat.com \
--to=berrange@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.