From: "Lluís Vilanova" <vilanova@ac.upc.edu>
To: "Daniel P. Berrange" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 13/18] trace: dynamically allocate event IDs at runtime
Date: Mon, 19 Sep 2016 20:05:12 +0200 [thread overview]
Message-ID: <87oa3j6a07.fsf@fimbulvetr.bsc.es> (raw)
In-Reply-To: <1474296549-29171-14-git-send-email-berrange@redhat.com> (Daniel P. Berrange's message of "Mon, 19 Sep 2016 15:49:04 +0100")
Daniel P Berrange writes:
> Instead of having the code generator assign event IDs and
> event VCPU IDs, assign them when the events are registered
> at runtime. This will allow us allow code to be generated
> from individual trace-events without having to figure out
> globally unique numbering at build time.
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> scripts/tracetool/format/events_c.py | 10 ++--------
> scripts/tracetool/format/events_h.py | 7 -------
> trace/control.c | 11 ++++++++++-
> 3 files changed, 12 insertions(+), 16 deletions(-)
> diff --git a/scripts/tracetool/format/events_c.py b/scripts/tracetool/format/events_c.py
> index 7f00b50..1b5790d 100644
> --- a/scripts/tracetool/format/events_c.py
> +++ b/scripts/tracetool/format/events_c.py
> @@ -28,25 +28,19 @@ def generate(events, backend):
> for e in events:
> out('uint16_t %s;' % e.api(e.QEMU_DSTATE))
> - next_id = 0
> - next_vcpu_id = 0
> for e in events:
> - id = next_id
> - next_id += 1
> if "vcpu" in e.properties:
> - vcpu_id = next_vcpu_id
> - next_vcpu_id += 1
> + vcpu_id = 0
> else:
> vcpu_id = "TRACE_VCPU_EVENT_NONE"
> out('TraceEvent %(event)s = {',
> - ' .id = %(id)s,',
> + ' .id = 0,',
Better to use some invalid value, like in TRACE_VCPU_EVENT_NONE.
> ' .vcpu_id = %(vcpu_id)s,',
> ' .name = \"%(name)s\",',
> ' .sstate = %(sstate)s,',
> ' .dstate = &%(dstate)s ',
> '};',
> event = "TRACE_" + e.name.upper() + "_EV",
> - id = id,
> vcpu_id = vcpu_id,
> name = e.name,
> sstate = "TRACE_%s_ENABLED" % e.name.upper(),
> diff --git a/scripts/tracetool/format/events_h.py b/scripts/tracetool/format/events_h.py
> index 35cbc91..857fcd4 100644
> --- a/scripts/tracetool/format/events_h.py
> +++ b/scripts/tracetool/format/events_h.py
> @@ -31,13 +31,6 @@ def generate(events, backend):
> for e in events:
> out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE))
> - numvcpu = 0
> - for e in events:
> - if "vcpu" in e.properties:
> - numvcpu += 1
> -
> - out("#define TRACE_VCPU_EVENT_COUNT %d" % numvcpu)
> -
> # static state
> for e in events:
> if 'disable' in e.properties:
> diff --git a/trace/control.c b/trace/control.c
> index 0633774..07912bd 100644
> --- a/trace/control.c
> +++ b/trace/control.c
> @@ -35,6 +35,8 @@ typedef struct TraceEventGroup {
> static TraceEventGroup *event_groups;
> static size_t nevent_groups;
> +static uint32_t next_id;
> +static uint32_t next_vcpu_id;
> QemuOptsList qemu_trace_opts = {
> .name = "trace",
> @@ -59,6 +61,13 @@ QemuOptsList qemu_trace_opts = {
> void trace_event_register_group(TraceEvent **events)
> {
> + size_t i;
> + for (i = 0; events[i] != NULL; i++) {
> + events[i]->id = next_id++;
> + if (events[i]->vcpu_id != TRACE_VCPU_EVENT_NONE) {
> + events[i]->vcpu_id = next_vcpu_id++;
> + }
> + }
> event_groups = g_renew(TraceEventGroup, event_groups, nevent_groups + 1);
> event_groups[nevent_groups].events = events;
> nevent_groups++;
> @@ -322,5 +331,5 @@ void trace_init_vcpu_events(void)
> uint32_t trace_get_vcpu_event_count(void)
> {
> - return TRACE_VCPU_EVENT_COUNT;
> + return next_vcpu_id;
> }
> --
> 2.7.4
Aha, now I see your reasoning for referencing event.vcpu_id in the fast-path
instead of using an immediate argument (in trace_event_get_vcpu_dstate_by_id(),
or something named like that).
I still think performance would currently be much better with an immediate, at a
low recompilation cost (for now). Still, the multiple TB cache optimization I
sent, if accepted, might dilute these performance benefits.
Cheers,
Lluis
next prev parent reply other threads:[~2016-09-19 18:05 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-19 14:48 [Qemu-devel] [PATCH v3 00/18] Refactor trace to allow modular build Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 01/18] trace: add trace event iterator APIs Daniel P. Berrange
2016-09-19 16:39 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 02/18] trace: convert code to use event iterators Daniel P. Berrange
2016-09-19 16:59 ` Lluís Vilanova
2016-09-20 13:13 ` Daniel P. Berrange
2016-09-20 13:36 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 03/18] trace: remove some now unused functions Daniel P. Berrange
2016-09-19 17:00 ` Lluís Vilanova
2016-09-19 17:24 ` Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 04/18] trace: remove global 'uint16 dstate[]' array Daniel P. Berrange
2016-09-19 15:55 ` Eric Blake
2016-09-19 17:05 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 05/18] trace: remove duplicate control.h includes in generated-tracers.h Daniel P. Berrange
2016-09-19 17:06 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 06/18] trace: break circular dependancy in event-internal.h Daniel P. Berrange
2016-09-19 17:08 ` Lluís Vilanova
2016-09-20 13:24 ` Daniel P. Berrange
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 07/18] trace: give each trace event a named TraceEvent struct Daniel P. Berrange
2016-09-19 17:17 ` Lluís Vilanova
2016-09-19 14:48 ` [Qemu-devel] [PATCH v3 08/18] trace: remove the TraceEventID and TraceEventVCPUID enums Daniel P. Berrange
2016-09-19 17:48 ` Lluís Vilanova
2016-09-20 13:29 ` Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 09/18] trace: emit name <-> ID mapping in simpletrace header Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 10/18] trace: don't abort qemu if ftrace can't be initialized Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 11/18] trace: provide mechanism for registering trace events Daniel P. Berrange
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 12/18] trace: dynamically allocate trace_dstate in CPUState Daniel P. Berrange
2016-09-19 17:58 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 13/18] trace: dynamically allocate event IDs at runtime Daniel P. Berrange
2016-09-19 18:05 ` Lluís Vilanova [this message]
2016-09-20 13:50 ` Daniel P. Berrange
2016-09-20 17:45 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 14/18] trace: get rid of generated-events.h/generated-events.c Daniel P. Berrange
2016-09-19 16:02 ` Eric Blake
2016-09-19 18:12 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 15/18] trace: rename _read_events to read_events Daniel P. Berrange
2016-09-19 18:15 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 16/18] trace: push reading of events up a level to tracetool main Daniel P. Berrange
2016-09-19 18:16 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 17/18] trace: pass trace-events to tracetool as a positional param Daniel P. Berrange
2016-09-19 18:18 ` Lluís Vilanova
2016-09-20 13:55 ` Daniel P. Berrange
2016-09-20 17:46 ` Lluís Vilanova
2016-09-19 14:49 ` [Qemu-devel] [PATCH v3 18/18] trace: introduce a formal group name for trace events Daniel P. Berrange
2016-09-19 18:27 ` Lluís Vilanova
2016-09-19 15:54 ` [Qemu-devel] [PATCH v3 00/18] Refactor trace to allow modular build no-reply
2016-09-19 16:00 ` Daniel P. Berrange
2016-09-19 17:13 ` no-reply
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=87oa3j6a07.fsf@fimbulvetr.bsc.es \
--to=vilanova@ac.upc.edu \
--cc=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.