Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b11f7244 authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge tag 'perf-core-for-mingo-5.5-20190925' of...

Merge tag 'perf-core-for-mingo-5.5-20190925' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

 into perf/urgent

Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:

perf record:

  Stephane Eranian:

  - Fix priv level with branch sampling for paranoid=2, i.e. the kernel checks
    if perf_event_attr_attr.exclude_hv is set in addition to .exclude_kernel,
    so reset both to zero.

  Arnaldo Carvalho de Melo:

  - Don't warn about not being able to read kernel maps (kallsyms, etc) when
    kernel samples aren't being collected.

perf list:

  Kim Phillips:

  - Allow plurals for metric, metricgroup., i.e.:

    $ perf list metrics

    was showing nothing, which is very confusing, make it work like:

    $ perf stat metric

perf stat:

  Andi Kleen:

  - Free memory access/leaks detected via valgrind, related to metrics.

Libraries:

libperf:

  Jiri Olsa:

  - Move more stuff from tools/perf, this time a first stab at moving perf_mmap
    methods.

libtracevent:

  Steven Rostedt (VMware):

  - Round up in tep_print_event() time precision.

  Tzvetomir Stoyanov (VMware):

  - Man pages for event print and related and plugins APIs.

  - Move traceevent plugins in its own subdirectory.

Feature detection:

  Thomas Richter:

  - Add detection of java-11-openjdk-devel package, in addition to the older
    versions supported.

Architecture specific:

S/390:

  Thomas Richter (2):

  - Include JVMTI support for s390

Vendor events:

AMD:

  Kim Phillips:

  - Add L3 cache events for Family 17h.

  - Remove redundant '['.

PowerPC:

  Mamatha Inamdar:

  - Remove P8 HW events which are not supported.

Cleanups:

  Arnaldo Carvalho de Melo:

  - Remove needless headers, add needed ones, move things around to reduce the
    headers dependency tree, speeding up builds by not doing needless compiles
    when unrelated stuff gets changed.

  - Ditch unused code that was dragging headers.

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 2b327697 d6840d87
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
#define _TOOLS_ASM_BUG_H

#include <linux/compiler.h>
#include <stdio.h>

#define __WARN_printf(arg...)	do { fprintf(stderr, arg); } while (0)

+0 −11
Original line number Diff line number Diff line
@@ -6,14 +6,3 @@ libtraceevent-y += parse-utils.o
libtraceevent-y += kbuffer-parse.o
libtraceevent-y += tep_strerror.o
libtraceevent-y += event-parse-api.o

plugin_jbd2-y         += plugin_jbd2.o
plugin_hrtimer-y      += plugin_hrtimer.o
plugin_kmem-y         += plugin_kmem.o
plugin_kvm-y          += plugin_kvm.o
plugin_mac80211-y     += plugin_mac80211.o
plugin_sched_switch-y += plugin_sched_switch.o
plugin_function-y     += plugin_function.o
plugin_xen-y          += plugin_xen.o
plugin_scsi-y         += plugin_scsi.o
plugin_cfg80211-y     += plugin_cfg80211.o
+130 −0
Original line number Diff line number Diff line
libtraceevent(3)
================

NAME
----
tep_print_event - Writes event information into a trace sequence.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*
*#include <trace-seq.h>*

void *tep_print_event*(struct tep_handle pass:[*]_tep_, struct trace_seqpass:[*]_s_, struct tep_record pass:[*]_record_, const char pass:[*]_fmt_, _..._)
--

DESCRIPTION
-----------

The _tep_print_event()_ function parses the event information of the given
_record_ and writes it into the trace sequence _s_, according to the format
string _fmt_. The desired information is specified after the format string.
The _fmt_ is printf-like format string, following arguments are supported:
[verse]
--
	TEP_PRINT_PID, "%d"  - PID of the event.
	TEP_PRINT_CPU, "%d"  - Event CPU.
	TEP_PRINT_COMM, "%s" - Event command string.
	TEP_PRINT_NAME, "%s" - Event name.
	TEP_PRINT_LATENCY, "%s" - Latency of the event. It prints 4 or more
			fields - interrupt state, scheduling state,
			current context, and preemption count.
			Field 1 is the interrupt enabled state:
				d : Interrupts are disabled
				. : Interrupts are enabled
				X : The architecture does not support this
				    information
			Field 2 is the "need resched" state.
				N : The task is set to call the scheduler when
				    possible, as another higher priority task
				    may need to be scheduled in.
				. : The task is not set to call the scheduler.
			Field 3 is the context state.
				. : Normal context
				s : Soft interrupt context
				h : Hard interrupt context
				H : Hard interrupt context which triggered
				    during soft interrupt context.
				z : NMI context
				Z : NMI context which triggered during hard
				    interrupt context
			Field 4 is the preemption count.
				. : The preempt count is zero.
			On preemptible kernels (where the task can be scheduled
			out in arbitrary locations while in kernel context), the
			preempt count, when non zero, will prevent the kernel
			from scheduling out the current task. The preempt count
			number is displayed when it is not zero.
			Depending on the kernel, it may show other fields
			(lock depth, or migration disabled, which are unique to
			specialized kernels).
	TEP_PRINT_TIME, %d - event time stamp. A divisor and precision can be
			specified as part of this format string:
			"%precision.divisord". Example:
			"%3.1000d" - divide the time by 1000 and print the first
			3 digits before the dot. Thus, the time stamp
			"123456000" will be printed as "123.456"
	TEP_PRINT_INFO, "%s" - event information.
	TEP_PRINT_INFO_RAW, "%s" - event information, in raw format.

--
EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
#include <trace-seq.h>
...
struct trace_seq seq;
trace_seq_init(&seq);
struct tep_handle *tep = tep_alloc();
...
void print_my_event(struct tep_record *record)
{
	trace_seq_reset(&seq);
	tep_print_event(tep, s, record, "%16s-%-5d [%03d] %s %6.1000d %s %s",
			TEP_PRINT_COMM, TEP_PRINT_PID, TEP_PRINT_CPU,
			TEP_PRINT_LATENCY, TEP_PRINT_TIME, TEP_PRINT_NAME,
			TEP_PRINT_INFO);
}
...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*trace-seq.h*
	Header file to include in order to have access to trace sequences related APIs.
	Trace sequences are used to allow a function to call several other functions
	to create a string of data to use.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
+4 −4
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ libtraceevent(3)

NAME
----
tep_alloc, tep_free,tep_ref, tep_unref,tep_ref_get - Create, destroy, manage
tep_alloc, tep_free,tep_ref, tep_unref,tep_get_ref - Create, destroy, manage
references of trace event parser context.

SYNOPSIS
@@ -16,7 +16,7 @@ struct tep_handle pass:[*]*tep_alloc*(void);
void *tep_free*(struct tep_handle pass:[*]_tep_);
void *tep_ref*(struct tep_handle pass:[*]_tep_);
void *tep_unref*(struct tep_handle pass:[*]_tep_);
int *tep_ref_get*(struct tep_handle pass:[*]_tep_);
int *tep_get_ref*(struct tep_handle pass:[*]_tep_);
--

DESCRIPTION
@@ -57,9 +57,9 @@ EXAMPLE
...
struct tep_handle *tep = tep_alloc();
...
int ref = tep_ref_get(tep);
int ref = tep_get_ref(tep);
tep_ref(tep);
if ( (ref+1) != tep_ref_get(tep)) {
if ( (ref+1) != tep_get_ref(tep)) {
	/* Something wrong happened, the counter is not incremented by 1 */
}
tep_unref(tep);
+99 −0
Original line number Diff line number Diff line
libtraceevent(3)
================

NAME
----
tep_load_plugins, tep_unload_plugins - Load / unload traceevent plugins.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*

struct tep_plugin_list pass:[*]*tep_load_plugins*(struct tep_handle pass:[*]_tep_);
void *tep_unload_plugins*(struct tep_plugin_list pass:[*]_plugin_list_, struct tep_handle pass:[*]_tep_);
--

DESCRIPTION
-----------
The _tep_load_plugins()_ function loads all plugins, located in the plugin
directories. The _tep_ argument is trace event parser context.
The plugin directories are :
[verse]
--
	- System's plugin directory, defined at the library compile time. It
	  depends on the library installation prefix and usually is
	  _(install_preffix)/lib/traceevent/plugins_
	- Directory, defined by the environment variable _TRACEEVENT_PLUGIN_DIR_
	- User's plugin directory, located at _~/.local/lib/traceevent/plugins_
--
Loading of plugins can be controlled by the _tep_flags_, using the
_tep_set_flag()_ API:
[verse]
--
	_TEP_DISABLE_SYS_PLUGINS_	- do not load plugins, located in
					the system's plugin directory.
	_TEP_DISABLE_PLUGINS_		- do not load any plugins.
--
The _tep_set_flag()_ API needs to be called before _tep_load_plugins()_, if
loading of all plugins is not the desired case.

The _tep_unload_plugins()_ function unloads the plugins, previously loaded by
_tep_load_plugins()_. The _tep_ argument is trace event parser context. The
_plugin_list_ is the list of loaded plugins, returned by
the _tep_load_plugins()_ function.

RETURN VALUE
------------
The _tep_load_plugins()_ function returns a list of successfully loaded plugins,
or NULL in case no plugins are loaded.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
struct tep_plugin_list *plugins = tep_load_plugins(tep);
if (plugins == NULL) {
	/* no plugins are loaded */
}
...
tep_unload_plugins(plugins, tep);
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_, _tep_set_flag(3)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Loading