Always choose large event header for UST channels
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 17 Oct 2018 21:16:12 +0000 (17:16 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 18 Oct 2018 14:47:08 +0000 (10:47 -0400)
UST can receive the session start command before all probe provider
library constructors have completed running, therefore finding less
events than eventually enabled within the process. Moreover, with
per-uid buffers, many processes end up registering events into shared
buffers. Therefore, the guess based on number of events from the first
process to use the buffer is incorrect.

Considering that we typically have applications with more than 30
events, we will modify the session daemon so it selects the "large"
header type independently of the number of events.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/ust-app.c

index 2a810aba15fd2db25f4c47bf5d98bf3a70b0d607..a133eeeef19fe563f06af0b89b52033c60fef60d 100644 (file)
@@ -5429,7 +5429,7 @@ static int reply_ust_register_channel(int sock, int cobjd,
                size_t nr_fields, struct ustctl_field *fields)
 {
        int ret, ret_code = 0;
-       uint32_t chan_id, reg_count;
+       uint32_t chan_id;
        uint64_t chan_reg_key;
        enum ustctl_channel_header type;
        struct ust_app *app;
@@ -5481,13 +5481,12 @@ static int reply_ust_register_channel(int sock, int cobjd,
        assert(chan_reg);
 
        if (!chan_reg->register_done) {
-               reg_count = ust_registry_get_event_count(chan_reg);
-               if (reg_count < 31) {
-                       type = USTCTL_CHANNEL_HEADER_COMPACT;
-               } else {
-                       type = USTCTL_CHANNEL_HEADER_LARGE;
-               }
-
+               /*
+                * TODO: eventually use the registry event count for
+                * this channel to better guess header type for per-pid
+                * buffers.
+                */
+               type = USTCTL_CHANNEL_HEADER_LARGE;
                chan_reg->nr_ctx_fields = nr_fields;
                chan_reg->ctx_fields = fields;
                fields = NULL;
This page took 0.038701 seconds and 5 git commands to generate.