[lttng-dev] [PATCH lttng-tools] Always choose large event header for UST channels

Jérémie Galarneau jeremie.galarneau at efficios.com
Tue Oct 30 08:46:52 EDT 2018


Merged in master, stable-2.11, stable-2.10 and stable-2.9.

Thanks!
Jérémie
On Wed, 17 Oct 2018 at 23:16, Mathieu Desnoyers
<mathieu.desnoyers at efficios.com> wrote:
>
> 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 at efficios.com>
> ---
>  src/bin/lttng-sessiond/ust-app.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
> index 2a810aba..a133eeee 100644
> --- a/src/bin/lttng-sessiond/ust-app.c
> +++ b/src/bin/lttng-sessiond/ust-app.c
> @@ -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;
> --
> 2.11.0
>


--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list