Re: [PATCH] tracing: Fix trace entry and trace common fields for preempt_lazy_count

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 21 Feb 2020 16:35:41 +0100
Jiri Olsa <jolsa@xxxxxxxxxx> wrote:

> When commit 65fd07df3588 added preempt_lazy_count into 'struct trace_entry'
> it did not add 4 bytes padding. Also we need to update the common fields
> for tracepoint, otherwise some tools (bpftrace) stop working due to missing
> common fields.
> 
> Fixes: 65fd07df3588 ("x86: Support for lazy preemption")
> Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> ---
>  include/linux/trace_events.h | 2 ++
>  kernel/trace/trace_events.c  | 3 +++
>  2 files changed, 5 insertions(+)
> 
> diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
> index f3b1ef07e4a5..51a3f5188923 100644
> --- a/include/linux/trace_events.h
> +++ b/include/linux/trace_events.h
> @@ -65,6 +65,8 @@ struct trace_entry {
>  	unsigned short		migrate_disable;
>  	unsigned short		padding;
>  	unsigned char		preempt_lazy_count;
> +	unsigned char		padding1;
> +	unsigned short		padding2;


Wait! I don't have these changes in my tree, nor do I see them in
Linus's. This really bloats the trace events! This header is very
sensitive to size and just willy nilly adding to it is unacceptable.
It's like adding to the page_struct. This gets added to *every* event,
and a single byte added, causes 1M extra for a million events (very
common in tracing). It causes 1G extra for a billion events.

Let's find a better way to handle this.

-- Steve


>  };
>  
>  #define TRACE_EVENT_TYPE_MAX						\
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index accaae59a762..1fe37b7aeaff 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -183,6 +183,9 @@ static int trace_define_common_fields(void)
>  	__common_field(int, pid);
>  	__common_field(unsigned short, migrate_disable);
>  	__common_field(unsigned short, padding);
> +	__common_field(unsigned char,  preempt_lazy_count);
> +	__common_field(unsigned char,  padding1);
> +	__common_field(unsigned short, padding2);
>  
>  	return ret;
>  }




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux