[lttng-dev] [LTTNG-TOOLS PATCH 4/9] Metadata for instance_id and packet_seq_num
Julien Desfossez
jdesfossez at efficios.com
Mon Jul 13 11:28:04 EDT 2015
The UST tracer now stores a stream_instance_id in each packet to allow
the viewers to match streams split in multiple trace files.
Also, a sequence_number is stored in each packet so it is possible to
compute the number of lost packets in overwrite mode.
This is a locked-step with the corresponding lttng-ust commits.
Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>
---
src/bin/lttng-sessiond/ust-app.c | 3 ++-
src/bin/lttng-sessiond/ust-metadata.c | 51 ++++++++++++++++++++++++-----------
src/bin/lttng-sessiond/ust-registry.h | 3 ++-
3 files changed, 39 insertions(+), 18 deletions(-)
diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
index 08b6a76..564de69 100644
--- a/src/bin/lttng-sessiond/ust-app.c
+++ b/src/bin/lttng-sessiond/ust-app.c
@@ -4829,7 +4829,8 @@ static int reply_ust_register_channel(int sock, int sobjd, int cobjd,
/* Append to metadata */
if (!chan_reg->metadata_dumped) {
- ret_code = ust_metadata_channel_statedump(registry, chan_reg);
+ ret_code = ust_metadata_channel_statedump(registry, chan_reg,
+ &ua_chan->attr);
if (ret_code) {
ERR("Error appending channel metadata (errno = %d)", ret_code);
goto reply;
diff --git a/src/bin/lttng-sessiond/ust-metadata.c b/src/bin/lttng-sessiond/ust-metadata.c
index ea59788..8589136 100644
--- a/src/bin/lttng-sessiond/ust-metadata.c
+++ b/src/bin/lttng-sessiond/ust-metadata.c
@@ -29,6 +29,7 @@
#include <unistd.h>
#include <inttypes.h>
#include <common/common.h>
+#include <common/utils.h>
#include "ust-registry.h"
#include "ust-clock.h"
@@ -46,6 +47,10 @@ struct offset_sample {
uint64_t measure_delta; /* lower is better */
};
+static
+int _lttng_stream_packet_context_declare(struct ust_registry_session *session,
+ struct ustctl_consumer_channel_attr *attr);
+
static inline
int fls(unsigned int x)
{
@@ -413,7 +418,8 @@ end:
* Should be called with session registry mutex held.
*/
int ust_metadata_channel_statedump(struct ust_registry_session *session,
- struct ust_registry_channel *chan)
+ struct ust_registry_channel *chan,
+ struct ustctl_consumer_channel_attr *attr)
{
int ret = 0;
@@ -427,8 +433,7 @@ int ust_metadata_channel_statedump(struct ust_registry_session *session,
ret = lttng_metadata_printf(session,
"stream {\n"
" id = %u;\n"
- " event.header := %s;\n"
- " packet.context := struct packet_context;\n",
+ " event.header := %s;\n",
chan->chan_id,
chan->header_type == USTCTL_CHANNEL_HEADER_COMPACT ?
"struct event_header_compact" :
@@ -436,6 +441,15 @@ int ust_metadata_channel_statedump(struct ust_registry_session *session,
if (ret)
goto end;
+ ret = lttng_metadata_printf(session,
+ " packet.context := ");
+ if (ret)
+ goto end;
+
+ ret = _lttng_stream_packet_context_declare(session, attr);
+ if (ret)
+ goto end;
+
if (chan->ctx_fields) {
ret = lttng_metadata_printf(session,
" event.context := struct {\n");
@@ -464,18 +478,26 @@ end:
}
static
-int _lttng_stream_packet_context_declare(struct ust_registry_session *session)
+int _lttng_stream_packet_context_declare(struct ust_registry_session *session,
+ struct ustctl_consumer_channel_attr *attr)
{
+ unsigned int padding = utils_get_count_order_u64(attr->subbuf_size);
+ unsigned int field_size = 64;
+
return lttng_metadata_printf(session,
"struct packet_context {\n"
- " uint64_clock_monotonic_t timestamp_begin;\n"
- " uint64_clock_monotonic_t timestamp_end;\n"
- " uint64_t content_size;\n"
- " uint64_t packet_size;\n"
- " unsigned long events_discarded;\n"
- " uint32_t cpu_id;\n"
- "};\n\n"
- );
+ " uint64_clock_monotonic_t timestamp_begin;\n"
+ " uint64_clock_monotonic_t timestamp_end;\n"
+ " uint64_t content_size;\n"
+ " uint64_t packet_size;\n"
+ " integer { size = %u; signed = false;"
+ " align = 1; } packet_seq_num_padding;\n"
+ " integer { size = %u; signed = false;"
+ " align = 1; } packet_seq_num;\n"
+ " unsigned long events_discarded;\n"
+ " uint32_t cpu_id;\n"
+ " };\n\n",
+ padding, field_size - padding);
}
/*
@@ -630,6 +652,7 @@ int ust_metadata_session_statedump(struct ust_registry_session *session,
" uint32_t magic;\n"
" uint8_t uuid[16];\n"
" uint32_t stream_id;\n"
+ " uint64_t stream_instance_id;\n"
" };\n"
"};\n\n",
session->uint8_t_alignment,
@@ -743,10 +766,6 @@ int ust_metadata_session_statedump(struct ust_registry_session *session,
if (ret)
goto end;
- ret = _lttng_stream_packet_context_declare(session);
- if (ret)
- goto end;
-
ret = _lttng_event_header_declare(session);
if (ret)
goto end;
diff --git a/src/bin/lttng-sessiond/ust-registry.h b/src/bin/lttng-sessiond/ust-registry.h
index 77d4d91..0c6cf54 100644
--- a/src/bin/lttng-sessiond/ust-registry.h
+++ b/src/bin/lttng-sessiond/ust-registry.h
@@ -256,7 +256,8 @@ void ust_registry_destroy_event(struct ust_registry_channel *chan,
int ust_metadata_session_statedump(struct ust_registry_session *session,
struct ust_app *app, uint32_t major, uint32_t minor);
int ust_metadata_channel_statedump(struct ust_registry_session *session,
- struct ust_registry_channel *chan);
+ struct ust_registry_channel *chan,
+ struct ustctl_consumer_channel_attr *attr);
int ust_metadata_event_statedump(struct ust_registry_session *session,
struct ust_registry_channel *chan,
struct ust_registry_event *event);
--
1.9.1
More information about the lttng-dev
mailing list