lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 27 Oct 2015 10:16:05 -0300
From:	Arnaldo Carvalho de Melo <acme@...nel.org>
To:	Jiri Olsa <jolsa@...nel.org>
Cc:	lkml <linux-kernel@...r.kernel.org>,
	David Ahern <dsahern@...il.com>,
	Ingo Molnar <mingo@...nel.org>,
	Namhyung Kim <namhyung@...nel.org>,
	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	"Liang, Kan" <kan.liang@...el.com>
Subject: Re: [PATCH 11/52] perf tools: Add stat config event

Em Sun, Oct 25, 2015 at 03:51:27PM +0100, Jiri Olsa escreveu:
> Adding stat config event to pass/store stat config data,
> so report tools (report/script) know how to interpret
> stat data.
> 
> The config data are stored in 'tag|value' way to allow
> easy extension and backward compatibility.

I wonder if this couldn't be renamed 'PERF_RECORD_CONFIG' and just go
on using one of those 2^64-1 tags for the 'stat config' needs, but then
this is just a matter of changing the name of this event, which won't
break anything when done.

Other stuff we may want to have stored like this include sysctl, sysfs
values, kernel command line options used, etc.

- Arnaldo

> Link: http://lkml.kernel.org/n/tip-1npdsfez8635vogthpqwtkd0@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@...nel.org>
> ---
>  tools/perf/util/event.c   |  1 +
>  tools/perf/util/event.h   | 20 ++++++++++++++++++++
>  tools/perf/util/session.c | 24 ++++++++++++++++++++++++
>  tools/perf/util/tool.h    |  3 ++-
>  4 files changed, 47 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
> index 36dc992b072f..1165cb1d891f 100644
> --- a/tools/perf/util/event.c
> +++ b/tools/perf/util/event.c
> @@ -39,6 +39,7 @@ static const char *perf_event__names[] = {
>  	[PERF_RECORD_AUXTRACE_ERROR]		= "AUXTRACE_ERROR",
>  	[PERF_RECORD_THREAD_MAP]		= "THREAD_MAP",
>  	[PERF_RECORD_CPU_MAP]			= "CPU_MAP",
> +	[PERF_RECORD_STAT_CONFIG]		= "STAT_CONFIG",
>  };
>  
>  const char *perf_event__name(unsigned int id)
> diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h
> index e46f95285350..0bc3393dd28c 100644
> --- a/tools/perf/util/event.h
> +++ b/tools/perf/util/event.h
> @@ -228,6 +228,7 @@ enum perf_user_event_type { /* above any possible kernel type */
>  	PERF_RECORD_AUXTRACE_ERROR		= 72,
>  	PERF_RECORD_THREAD_MAP			= 73,
>  	PERF_RECORD_CPU_MAP			= 74,
> +	PERF_RECORD_STAT_CONFIG			= 75,
>  	PERF_RECORD_HEADER_MAX
>  };
>  
> @@ -395,6 +396,24 @@ struct thread_map_event {
>  	struct thread_map_data_event	data[];
>  };
>  
> +enum {
> +	PERF_STAT_CONFIG_TERM__AGGR_MODE	= 0,
> +	PERF_STAT_CONFIG_TERM__INTERVAL		= 1,
> +	PERF_STAT_CONFIG_TERM__SCALE		= 2,
> +	PERF_STAT_CONFIG_TERM__MAX		= 3,
> +};
> +
> +struct stat_config_term_event {
> +	u64	tag;
> +	u64	val;
> +};
> +
> +struct stat_config_event {
> +	struct perf_event_header	header;
> +	u64				nr;
> +	struct stat_config_term_event	data[];
> +};
> +
>  union perf_event {
>  	struct perf_event_header	header;
>  	struct mmap_event		mmap;
> @@ -419,6 +438,7 @@ union perf_event {
>  	struct context_switch_event	context_switch;
>  	struct thread_map_event		thread_map;
>  	struct cpu_map_event		cpu_map;
> +	struct stat_config_event	stat_config;
>  };
>  
>  void perf_event__print_totals(void);
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index 5126b18c671c..a550464925ea 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -315,6 +315,15 @@ int process_event_cpu_map_stub(struct perf_tool *tool __maybe_unused,
>  	return 0;
>  }
>  
> +static
> +int process_event_stat_config_stub(struct perf_tool *tool __maybe_unused,
> +				   union perf_event *event __maybe_unused,
> +				   struct perf_session *session __maybe_unused)
> +{
> +	dump_printf(": unhandled!\n");
> +	return 0;
> +}
> +
>  void perf_tool__fill_defaults(struct perf_tool *tool)
>  {
>  	if (tool->sample == NULL)
> @@ -369,6 +378,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
>  		tool->thread_map = process_event_thread_map_stub;
>  	if (tool->cpu_map == NULL)
>  		tool->cpu_map = process_event_cpu_map_stub;
> +	if (tool->stat_config == NULL)
> +		tool->stat_config = process_event_stat_config_stub;
>  }
>  
>  static void swap_sample_id_all(union perf_event *event, void *data)
> @@ -686,6 +697,16 @@ static void perf_event__cpu_map_swap(union perf_event *event,
>  	}
>  }
>  
> +static void perf_event__stat_config_swap(union perf_event *event,
> +					 bool sample_id_all __maybe_unused)
> +{
> +	u64 size;
> +
> +	size  = event->stat_config.nr * sizeof(event->stat_config.data[0]);
> +	size += 1; /* nr item itself */
> +	mem_bswap_64(&event->stat_config.nr, size);
> +}
> +
>  typedef void (*perf_event__swap_op)(union perf_event *event,
>  				    bool sample_id_all);
>  
> @@ -715,6 +736,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
>  	[PERF_RECORD_AUXTRACE_ERROR]	  = perf_event__auxtrace_error_swap,
>  	[PERF_RECORD_THREAD_MAP]	  = perf_event__thread_map_swap,
>  	[PERF_RECORD_CPU_MAP]		  = perf_event__cpu_map_swap,
> +	[PERF_RECORD_STAT_CONFIG]	  = perf_event__stat_config_swap,
>  	[PERF_RECORD_HEADER_MAX]	  = NULL,
>  };
>  
> @@ -1255,6 +1277,8 @@ static s64 perf_session__process_user_event(struct perf_session *session,
>  		return tool->thread_map(tool, event, session);
>  	case PERF_RECORD_CPU_MAP:
>  		return tool->cpu_map(tool, event, session);
> +	case PERF_RECORD_STAT_CONFIG:
> +		return tool->stat_config(tool, event, session);
>  	default:
>  		return -EINVAL;
>  	}
> diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h
> index 9e5925c78519..aa7ae73d76b4 100644
> --- a/tools/perf/util/tool.h
> +++ b/tools/perf/util/tool.h
> @@ -57,7 +57,8 @@ struct perf_tool {
>  			auxtrace_info,
>  			auxtrace_error,
>  			thread_map,
> -			cpu_map;
> +			cpu_map,
> +			stat_config;
>  	event_op3	auxtrace;
>  	bool		ordered_events;
>  	bool		ordering_requires_timestamps;
> -- 
> 2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ