Fix: sync event enablers before choosing header type
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Oct 2018 19:41:37 +0000 (15:41 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Oct 2018 21:02:22 +0000 (17:02 -0400)
On session start, we should allocate the event IDs before figuring
out the number of events per channel and select the proper header
type.

Without this, the number of events is always perceived to be 0,
which selects the "compact" header type. For a channel containing
many events (e.g. enable-event -k -a), this selects an inefficient
header type. With this fix, it selects the "large" header type,
which is more appropriate for a larger number of event IDs.

This will lead to a reduced trace throughput for tracing workloads
that have many events.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lttng-events.c

index 3964df5fbb2f55b8d98fdb8501023a2c37a2dbab..f1be6028a6440848f104f810250975f1b41a9312 100644 (file)
@@ -226,6 +226,9 @@ int lttng_session_enable(struct lttng_session *session)
        /* Set transient enabler state to "enabled" */
        session->tstate = 1;
 
+       /* We need to sync enablers with session before activation. */
+       lttng_session_sync_enablers(session);
+
        /*
         * Snapshot the number of events per channel to know the type of header
         * we need to use.
@@ -239,9 +242,6 @@ int lttng_session_enable(struct lttng_session *session)
                        chan->header_type = 2;  /* large */
        }
 
-       /* We need to sync enablers with session before activation. */
-       lttng_session_sync_enablers(session);
-
        /* Clear each stream's quiescent state. */
        list_for_each_entry(chan, &session->chan, list) {
                if (chan->channel_type != METADATA_CHANNEL)
This page took 0.027782 seconds and 4 git commands to generate.