All of lore.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL 0/8] perf/core improvements and fixes
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Chang Hyun Park, David Ahern, Davidlohr Bueso,
	Don Zickus, Douglas Hatch, Frederic Weisbecker, H . Peter Anvin,
	Jean Pihet, Jiri Olsa, linux-arm-kernel, Matt Fleming,
	Mike Galbraith, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	Scott J Norton, Stephane Eranian, Thomas Gleixner, Waiman Long,
	Will Deacon, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

Best Regards,

- Arnaldo

The following changes since commit 07394b5f13a04f86b27e0ddd96a36c7d9bfe1a4f:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-09-27 09:15:48 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 281f92f233a59ef52bb45287242bd815a67f5647:

  perf record: Fix error message for --filter option not coming after tracepoint (2014-10-01 15:05:32 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

. Fix mmap return address truncation to 32-bit in 'perf trace'. (Chang Hyun Park)

o Support operations for shared futexes. (Davidlohr Bueso)

. Fix error message for --filter option not coming after tracepoint. (Arnaldo Carvalho de Melo)

Infrastructure:

. Refactor unit and scale function parameters for pmu parsing routines. (Matt Fleming)

. Improve DSO long names lookup with rbtree, resulting in great speedup for
  workloads with lots of DSOs. (Waiman Long)

. Fix build breakage on arm64 targets. (Will Deacon)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
      perf record: Fix error message for --filter option not coming after tracepoint

Chang Hyun Park (1):
      perf trace: Fix mmap return address truncation to 32-bit

Davidlohr Bueso (2):
      perf bench futex: Support operations for shared futexes
      perf bench futex: Sanitize -q option in requeue

Matt Fleming (1):
      perf tools: Refactor unit and scale function parameters

Waiman Long (2):
      perf symbols: Encapsulate dsos list head into struct dsos
      perf symbols: Improve DSO long names lookup speed with rbtree

Will Deacon (1):
      perf tools: Fix build breakage on arm64 targets

 tools/perf/arch/arm64/util/unwind-libunwind.c |  1 +
 tools/perf/bench/futex-hash.c                 |  7 ++-
 tools/perf/bench/futex-requeue.c              | 28 +++++----
 tools/perf/bench/futex-wake.c                 | 15 +++--
 tools/perf/builtin-trace.c                    |  6 +-
 tools/perf/util/dso.c                         | 85 +++++++++++++++++++++++----
 tools/perf/util/dso.h                         | 16 ++++-
 tools/perf/util/header.c                      | 32 +++++-----
 tools/perf/util/machine.c                     | 25 ++++----
 tools/perf/util/machine.h                     |  5 +-
 tools/perf/util/parse-events.c                | 11 ++--
 tools/perf/util/pmu.c                         | 38 +++++++-----
 tools/perf/util/pmu.h                         |  7 ++-
 tools/perf/util/probe-event.c                 |  3 +-
 tools/perf/util/symbol-elf.c                  |  7 ++-
 15 files changed, 200 insertions(+), 86 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Ingo,

	Please consider pulling,

Best Regards,

- Arnaldo

The following changes since commit 07394b5f13a04f86b27e0ddd96a36c7d9bfe1a4f:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-09-27 09:15:48 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 281f92f233a59ef52bb45287242bd815a67f5647:

  perf record: Fix error message for --filter option not coming after tracepoint (2014-10-01 15:05:32 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

. Fix mmap return address truncation to 32-bit in 'perf trace'. (Chang Hyun Park)

o Support operations for shared futexes. (Davidlohr Bueso)

. Fix error message for --filter option not coming after tracepoint. (Arnaldo Carvalho de Melo)

Infrastructure:

. Refactor unit and scale function parameters for pmu parsing routines. (Matt Fleming)

. Improve DSO long names lookup with rbtree, resulting in great speedup for
  workloads with lots of DSOs. (Waiman Long)

. Fix build breakage on arm64 targets. (Will Deacon)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
      perf record: Fix error message for --filter option not coming after tracepoint

Chang Hyun Park (1):
      perf trace: Fix mmap return address truncation to 32-bit

Davidlohr Bueso (2):
      perf bench futex: Support operations for shared futexes
      perf bench futex: Sanitize -q option in requeue

Matt Fleming (1):
      perf tools: Refactor unit and scale function parameters

Waiman Long (2):
      perf symbols: Encapsulate dsos list head into struct dsos
      perf symbols: Improve DSO long names lookup speed with rbtree

Will Deacon (1):
      perf tools: Fix build breakage on arm64 targets

 tools/perf/arch/arm64/util/unwind-libunwind.c |  1 +
 tools/perf/bench/futex-hash.c                 |  7 ++-
 tools/perf/bench/futex-requeue.c              | 28 +++++----
 tools/perf/bench/futex-wake.c                 | 15 +++--
 tools/perf/builtin-trace.c                    |  6 +-
 tools/perf/util/dso.c                         | 85 +++++++++++++++++++++++----
 tools/perf/util/dso.h                         | 16 ++++-
 tools/perf/util/header.c                      | 32 +++++-----
 tools/perf/util/machine.c                     | 25 ++++----
 tools/perf/util/machine.h                     |  5 +-
 tools/perf/util/parse-events.c                | 11 ++--
 tools/perf/util/pmu.c                         | 38 +++++++-----
 tools/perf/util/pmu.h                         |  7 ++-
 tools/perf/util/probe-event.c                 |  3 +-
 tools/perf/util/symbol-elf.c                  |  7 ++-
 15 files changed, 200 insertions(+), 86 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [PATCH 1/8] perf tools: Refactor unit and scale function parameters
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Matt Fleming, H. Peter Anvin, Jiri Olsa,
	Peter Zijlstra, Thomas Gleixner, Arnaldo Carvalho de Melo

From: Matt Fleming <matt.fleming@intel.com>

Passing pointers to alias modifiers 'unit' and 'scale' isn't very
future-proof since if we add more modifiers to the list we'll end up
passing more arguments.

Instead wrap everything up in a struct perf_pmu_info, which can easily
be expanded when additional alias modifiers are necessary in the future.

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1411567455-31264-3-git-send-email-matt@console-pimps.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/parse-events.c |  9 ++++-----
 tools/perf/util/pmu.c          | 38 +++++++++++++++++++++++---------------
 tools/perf/util/pmu.h          |  7 ++++++-
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 61be3e695ec2..9522cf22ad81 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -634,10 +634,9 @@ int parse_events_add_pmu(struct list_head *list, int *idx,
 			 char *name, struct list_head *head_config)
 {
 	struct perf_event_attr attr;
+	struct perf_pmu_info info;
 	struct perf_pmu *pmu;
 	struct perf_evsel *evsel;
-	const char *unit;
-	double scale;
 
 	pmu = perf_pmu__find(name);
 	if (!pmu)
@@ -656,7 +655,7 @@ int parse_events_add_pmu(struct list_head *list, int *idx,
 		return evsel ? 0 : -ENOMEM;
 	}
 
-	if (perf_pmu__check_alias(pmu, head_config, &unit, &scale))
+	if (perf_pmu__check_alias(pmu, head_config, &info))
 		return -EINVAL;
 
 	/*
@@ -671,8 +670,8 @@ int parse_events_add_pmu(struct list_head *list, int *idx,
 	evsel = __add_event(list, idx, &attr, pmu_event_name(head_config),
 			    pmu->cpus);
 	if (evsel) {
-		evsel->unit = unit;
-		evsel->scale = scale;
+		evsel->unit = info.unit;
+		evsel->scale = info.scale;
 	}
 
 	return evsel ? 0 : -ENOMEM;
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index 22a4ad5a927a..93a41ca96b8e 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -210,6 +210,19 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI
 	return 0;
 }
 
+static inline bool pmu_alias_info_file(char *name)
+{
+	size_t len;
+
+	len = strlen(name);
+	if (len > 5 && !strcmp(name + len - 5, ".unit"))
+		return true;
+	if (len > 6 && !strcmp(name + len - 6, ".scale"))
+		return true;
+
+	return false;
+}
+
 /*
  * Process all the sysfs attributes located under the directory
  * specified in 'dir' parameter.
@@ -218,7 +231,6 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
 {
 	struct dirent *evt_ent;
 	DIR *event_dir;
-	size_t len;
 	int ret = 0;
 
 	event_dir = opendir(dir);
@@ -234,13 +246,9 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
 			continue;
 
 		/*
-		 * skip .unit and .scale info files
-		 * parsed in perf_pmu__new_alias()
+		 * skip info files parsed in perf_pmu__new_alias()
 		 */
-		len = strlen(name);
-		if (len > 5 && !strcmp(name + len - 5, ".unit"))
-			continue;
-		if (len > 6 && !strcmp(name + len - 6, ".scale"))
+		if (pmu_alias_info_file(name))
 			continue;
 
 		snprintf(path, PATH_MAX, "%s/%s", dir, name);
@@ -645,7 +653,7 @@ static int check_unit_scale(struct perf_pmu_alias *alias,
  * defined for the alias
  */
 int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
-			  const char **unit, double *scale)
+			  struct perf_pmu_info *info)
 {
 	struct parse_events_term *term, *h;
 	struct perf_pmu_alias *alias;
@@ -655,8 +663,8 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
 	 * Mark unit and scale as not set
 	 * (different from default values, see below)
 	 */
-	*unit   = NULL;
-	*scale  = 0.0;
+	info->unit   = NULL;
+	info->scale  = 0.0;
 
 	list_for_each_entry_safe(term, h, head_terms, list) {
 		alias = pmu_find_alias(pmu, term);
@@ -666,7 +674,7 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
 		if (ret)
 			return ret;
 
-		ret = check_unit_scale(alias, unit, scale);
+		ret = check_unit_scale(alias, &info->unit, &info->scale);
 		if (ret)
 			return ret;
 
@@ -679,11 +687,11 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
 	 * set defaults as for evsel
 	 * unit cannot left to NULL
 	 */
-	if (*unit == NULL)
-		*unit   = "";
+	if (info->unit == NULL)
+		info->unit   = "";
 
-	if (*scale == 0.0)
-		*scale  = 1.0;
+	if (info->scale == 0.0)
+		info->scale  = 1.0;
 
 	return 0;
 }
diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
index 0f5c0a88fdc8..fe90a012c003 100644
--- a/tools/perf/util/pmu.h
+++ b/tools/perf/util/pmu.h
@@ -25,6 +25,11 @@ struct perf_pmu {
 	struct list_head list;    /* ELEM */
 };
 
+struct perf_pmu_info {
+	const char *unit;
+	double scale;
+};
+
 struct perf_pmu *perf_pmu__find(const char *name);
 int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr,
 		     struct list_head *head_terms);
@@ -33,7 +38,7 @@ int perf_pmu__config_terms(struct list_head *formats,
 			   struct list_head *head_terms,
 			   bool zero);
 int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
-			  const char **unit, double *scale);
+			  struct perf_pmu_info *info);
 struct list_head *perf_pmu__alias(struct perf_pmu *pmu,
 				  struct list_head *head_terms);
 int perf_pmu_wrap(void);
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 2/8] perf trace: Fix mmap return address truncation to 32-bit
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  (?)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Chang Hyun Park, H. Peter Anvin, Ingo Molnar,
	Thomas Gleixner, Arnaldo Carvalho de Melo

From: Chang Hyun Park <heartinpiece@gmail.com>

Using 'perf trace' for mmap is truncating return values by stripping the
top 32 bits, actually printing only the lower 32 bits.

This was because the ret value was of an 'int' type and not a 'long'
type.

  The Problem:

  991258501.244 ( 0.004 ms): mmap(len: 40001536, prot: READ|WRITE, flags: PRIVATE|ANONYMOUS, fd: -1) = 0x56691000
  991258501.257 ( 0.000 ms): minfault [_int_malloc+0x1038] => //anon@0x7fa056691008 //(d.)

The first line shows an mmap, which succeeds and returns 0x56691000.

However the next line shows a memory access to that virtual memory area,
specifically to 0x7fa056691008. The upper 32 bit is lost due to the
problem mentioned above, and thus mmap's return value didn't have the
upper 0x7fa0.

Tested on 3.17-rc5 from the linus's tree, and the HEAD of tip/master

Signed-off-by: Chang Hyun Park <heartinpiece@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1411736041-8017-1-git-send-email-heartinpiece@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-trace.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index c70e69ea1c5d..09bcf2393910 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1695,7 +1695,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
 			   union perf_event *event __maybe_unused,
 			   struct perf_sample *sample)
 {
-	int ret;
+	long ret;
 	u64 duration = 0;
 	struct thread *thread;
 	int id = perf_evsel__sc_tp_uint(evsel, id, sample);
@@ -1748,7 +1748,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
 
 	if (sc->fmt == NULL) {
 signed_print:
-		fprintf(trace->output, ") = %d", ret);
+		fprintf(trace->output, ") = %ld", ret);
 	} else if (ret < 0 && sc->fmt->errmsg) {
 		char bf[STRERR_BUFSIZE];
 		const char *emsg = strerror_r(-ret, bf, sizeof(bf)),
@@ -1758,7 +1758,7 @@ signed_print:
 	} else if (ret == 0 && sc->fmt->timeout)
 		fprintf(trace->output, ") = 0 Timeout");
 	else if (sc->fmt->hexret)
-		fprintf(trace->output, ") = %#x", ret);
+		fprintf(trace->output, ") = %#lx", ret);
 	else
 		goto signed_print;
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 3/8] perf bench futex: Support operations for shared futexes
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
                   ` (2 preceding siblings ...)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Davidlohr Bueso, Davidlohr Bueso, Arnaldo Carvalho de Melo

From: Davidlohr Bueso <dave@stgolabs.net>

Unlike futex-hash, requeuing and wakeup benchmarks do not support shared
futexes, limiting the usefulness of the programs. Correct this, and
allow using the local -S parameter. The default remains using private
futexes.

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Cc: Davidlohr Bueso <dbueso@suse.de>
Link: http://lkml.kernel.org/r/1412008868-22328-1-git-send-email-dave@stgolabs.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/bench/futex-hash.c    |  7 +++++--
 tools/perf/bench/futex-requeue.c | 24 +++++++++++++++---------
 tools/perf/bench/futex-wake.c    | 15 ++++++++++-----
 3 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c
index a84206e9c4aa..fc9bebd2cca0 100644
--- a/tools/perf/bench/futex-hash.c
+++ b/tools/perf/bench/futex-hash.c
@@ -26,6 +26,7 @@ static unsigned int nsecs    = 10;
 /* amount of futexes per thread */
 static unsigned int nfutexes = 1024;
 static bool fshared = false, done = false, silent = false;
+static int futex_flag = 0;
 
 struct timeval start, end, runtime;
 static pthread_mutex_t thread_lock;
@@ -75,8 +76,7 @@ static void *workerfn(void *arg)
 			 * such as internal waitqueue handling, thus enlarging
 			 * the critical region protected by hb->lock.
 			 */
-			ret = futex_wait(&w->futex[i], 1234, NULL,
-					 fshared ? 0 : FUTEX_PRIVATE_FLAG);
+			ret = futex_wait(&w->futex[i], 1234, NULL, futex_flag);
 			if (!silent &&
 			    (!ret || errno != EAGAIN || errno != EWOULDBLOCK))
 				warn("Non-expected futex return call");
@@ -135,6 +135,9 @@ int bench_futex_hash(int argc, const char **argv,
 	if (!worker)
 		goto errmem;
 
+	if (!fshared)
+		futex_flag = FUTEX_PRIVATE_FLAG;
+
 	printf("Run summary [PID %d]: %d threads, each operating on %d [%s] futexes for %d secs.\n\n",
 	       getpid(), nthreads, nfutexes, fshared ? "shared":"private", nsecs);
 
diff --git a/tools/perf/bench/futex-requeue.c b/tools/perf/bench/futex-requeue.c
index 732403bfd31a..9837a8831406 100644
--- a/tools/perf/bench/futex-requeue.c
+++ b/tools/perf/bench/futex-requeue.c
@@ -30,16 +30,18 @@ static u_int32_t futex1 = 0, futex2 = 0;
 static unsigned int nrequeue = 1;
 
 static pthread_t *worker;
-static bool done = 0, silent = 0;
+static bool done = false, silent = false, fshared = false;
 static pthread_mutex_t thread_lock;
 static pthread_cond_t thread_parent, thread_worker;
 static struct stats requeuetime_stats, requeued_stats;
 static unsigned int ncpus, threads_starting, nthreads = 0;
+static int futex_flag = 0;
 
 static const struct option options[] = {
 	OPT_UINTEGER('t', "threads",  &nthreads, "Specify amount of threads"),
 	OPT_UINTEGER('q', "nrequeue", &nrequeue, "Specify amount of threads to requeue at once"),
 	OPT_BOOLEAN( 's', "silent",   &silent,   "Silent mode: do not display data/details"),
+	OPT_BOOLEAN( 'S', "shared",   &fshared,  "Use shared futexes instead of private ones"),
 	OPT_END()
 };
 
@@ -70,7 +72,7 @@ static void *workerfn(void *arg __maybe_unused)
 	pthread_cond_wait(&thread_worker, &thread_lock);
 	pthread_mutex_unlock(&thread_lock);
 
-	futex_wait(&futex1, 0, NULL, FUTEX_PRIVATE_FLAG);
+	futex_wait(&futex1, 0, NULL, futex_flag);
 	return NULL;
 }
 
@@ -127,9 +129,12 @@ int bench_futex_requeue(int argc, const char **argv,
 	if (!worker)
 		err(EXIT_FAILURE, "calloc");
 
-	printf("Run summary [PID %d]: Requeuing %d threads (from %p to %p), "
-	       "%d at a time.\n\n",
-	       getpid(), nthreads, &futex1, &futex2, nrequeue);
+	if (!fshared)
+		futex_flag = FUTEX_PRIVATE_FLAG;
+
+	printf("Run summary [PID %d]: Requeuing %d threads (from [%s] %p to %p), "
+	       "%d at a time.\n\n",  getpid(), nthreads,
+	       fshared ? "shared":"private", &futex1, &futex2, nrequeue);
 
 	init_stats(&requeued_stats);
 	init_stats(&requeuetime_stats);
@@ -156,13 +161,14 @@ int bench_futex_requeue(int argc, const char **argv,
 
 		/* Ok, all threads are patiently blocked, start requeueing */
 		gettimeofday(&start, NULL);
-		for (nrequeued = 0; nrequeued < nthreads; nrequeued += nrequeue)
+		for (nrequeued = 0; nrequeued < nthreads; nrequeued += nrequeue) {
 			/*
 			 * Do not wakeup any tasks blocked on futex1, allowing
 			 * us to really measure futex_wait functionality.
 			 */
-			futex_cmp_requeue(&futex1, 0, &futex2, 0, nrequeue,
-					  FUTEX_PRIVATE_FLAG);
+			futex_cmp_requeue(&futex1, 0, &futex2, 0,
+					  nrequeue, futex_flag);
+		}
 		gettimeofday(&end, NULL);
 		timersub(&end, &start, &runtime);
 
@@ -175,7 +181,7 @@ int bench_futex_requeue(int argc, const char **argv,
 		}
 
 		/* everybody should be blocked on futex2, wake'em up */
-		nrequeued = futex_wake(&futex2, nthreads, FUTEX_PRIVATE_FLAG);
+		nrequeued = futex_wake(&futex2, nthreads, futex_flag);
 		if (nthreads != nrequeued)
 			warnx("couldn't wakeup all tasks (%d/%d)", nrequeued, nthreads);
 
diff --git a/tools/perf/bench/futex-wake.c b/tools/perf/bench/futex-wake.c
index 50022cbce87e..929f762be47e 100644
--- a/tools/perf/bench/futex-wake.c
+++ b/tools/perf/bench/futex-wake.c
@@ -31,16 +31,18 @@ static u_int32_t futex1 = 0;
 static unsigned int nwakes = 1;
 
 pthread_t *worker;
-static bool done = false, silent = false;
+static bool done = false, silent = false, fshared = false;
 static pthread_mutex_t thread_lock;
 static pthread_cond_t thread_parent, thread_worker;
 static struct stats waketime_stats, wakeup_stats;
 static unsigned int ncpus, threads_starting, nthreads = 0;
+static int futex_flag = 0;
 
 static const struct option options[] = {
 	OPT_UINTEGER('t', "threads", &nthreads, "Specify amount of threads"),
 	OPT_UINTEGER('w', "nwakes",  &nwakes,   "Specify amount of threads to wake at once"),
 	OPT_BOOLEAN( 's', "silent",  &silent,   "Silent mode: do not display data/details"),
+	OPT_BOOLEAN( 'S', "shared",  &fshared,  "Use shared futexes instead of private ones"),
 	OPT_END()
 };
 
@@ -58,7 +60,7 @@ static void *workerfn(void *arg __maybe_unused)
 	pthread_cond_wait(&thread_worker, &thread_lock);
 	pthread_mutex_unlock(&thread_lock);
 
-	futex_wait(&futex1, 0, NULL, FUTEX_PRIVATE_FLAG);
+	futex_wait(&futex1, 0, NULL, futex_flag);
 	return NULL;
 }
 
@@ -130,9 +132,12 @@ int bench_futex_wake(int argc, const char **argv,
 	if (!worker)
 		err(EXIT_FAILURE, "calloc");
 
-	printf("Run summary [PID %d]: blocking on %d threads (at futex %p), "
+	if (!fshared)
+		futex_flag = FUTEX_PRIVATE_FLAG;
+
+	printf("Run summary [PID %d]: blocking on %d threads (at [%s] futex %p), "
 	       "waking up %d at a time.\n\n",
-	       getpid(), nthreads, &futex1, nwakes);
+	       getpid(), nthreads, fshared ? "shared":"private",  &futex1, nwakes);
 
 	init_stats(&wakeup_stats);
 	init_stats(&waketime_stats);
@@ -160,7 +165,7 @@ int bench_futex_wake(int argc, const char **argv,
 		/* Ok, all threads are patiently blocked, start waking folks up */
 		gettimeofday(&start, NULL);
 		while (nwoken != nthreads)
-			nwoken += futex_wake(&futex1, nwakes, FUTEX_PRIVATE_FLAG);
+			nwoken += futex_wake(&futex1, nwakes, futex_flag);
 		gettimeofday(&end, NULL);
 		timersub(&end, &start, &runtime);
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 4/8] perf bench futex: Sanitize -q option in requeue
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
                   ` (3 preceding siblings ...)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Davidlohr Bueso, Davidlohr Bueso, Arnaldo Carvalho de Melo

From: Davidlohr Bueso <dave@stgolabs.net>

When given the number of threads to requeue at once by user input,
there's always the risk of this value being larger than the total number
of threads.  This doesn't make any sense, and the kernel can easily deal
with such sort of situations, hence no big deal. We should however
prevent bogus output such as:

./perf bench --repeat 2 futex requeue -q 10
Run summary [PID 22210]: Requeuing 4 threads (from [private] 0x99ef3c to 0x99ef38), 10 at a time.

[Run 1]: Requeued 10 of 4 threads in 0.0040 ms
[Run 2]: Requeued 10 of 4 threads in 0.0030 ms
Requeued 10 of 4 threads in 0.0035 ms (+-14.29%)

Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Cc: Davidlohr Bueso <dbueso@suse.de>
Link: http://lkml.kernel.org/r/1412008868-22328-2-git-send-email-dave@stgolabs.net
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/bench/futex-requeue.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/bench/futex-requeue.c b/tools/perf/bench/futex-requeue.c
index 9837a8831406..bedff6b5b3cf 100644
--- a/tools/perf/bench/futex-requeue.c
+++ b/tools/perf/bench/futex-requeue.c
@@ -172,6 +172,9 @@ int bench_futex_requeue(int argc, const char **argv,
 		gettimeofday(&end, NULL);
 		timersub(&end, &start, &runtime);
 
+		if (nrequeued > nthreads)
+			nrequeued = nthreads;
+
 		update_stats(&requeued_stats, nrequeued);
 		update_stats(&requeuetime_stats, runtime.tv_usec);
 
@@ -190,7 +193,6 @@ int bench_futex_requeue(int argc, const char **argv,
 			if (ret)
 				err(EXIT_FAILURE, "pthread_join");
 		}
-
 	}
 
 	/* cleanup & report results */
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 5/8] perf symbols: Encapsulate dsos list head into struct dsos
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
                   ` (4 preceding siblings ...)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Waiman Long, Adrian Hunter, Don Zickus,
	Douglas Hatch, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton,
	Arnaldo Carvalho de Melo

From: Waiman Long <Waiman.Long@hp.com>

This is a precursor patch to enable long name searching of DSOs using
a rbtree.

In this patch, a new dsos structure is created which contains only a
list head structure for the moment.

The new dsos structure is used, in turn, in the machine structure for
the user_dsos and kernel_dsos fields.

Only the following 3 dsos functions are modified to accept the new dsos
structure parameter instead of list_head:

 - dsos__add()
 - dsos__find()
 - __dsos__findnew()

Signed-off-by: Waiman Long <Waiman.Long@hp.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Douglas Hatch <doug.hatch@hp.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Scott J Norton <scott.norton@hp.com>
Link: http://lkml.kernel.org/r/1412021249-19201-2-git-send-email-Waiman.Long@hp.com
[ Move struct dsos to dso.h to reduce the dso methods depends on machine.h ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c         | 17 +++++++++--------
 tools/perf/util/dso.h         | 13 ++++++++++---
 tools/perf/util/header.c      | 32 ++++++++++++++++++--------------
 tools/perf/util/machine.c     | 24 ++++++++++++------------
 tools/perf/util/machine.h     |  5 +++--
 tools/perf/util/probe-event.c |  3 ++-
 tools/perf/util/symbol-elf.c  |  7 ++++++-
 7 files changed, 60 insertions(+), 41 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 55e39dc1bcda..901a58fa3f22 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -851,35 +851,36 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits)
 	return have_build_id;
 }
 
-void dsos__add(struct list_head *head, struct dso *dso)
+void dsos__add(struct dsos *dsos, struct dso *dso)
 {
-	list_add_tail(&dso->node, head);
+	list_add_tail(&dso->node, &dsos->head);
 }
 
-struct dso *dsos__find(const struct list_head *head, const char *name, bool cmp_short)
+struct dso *dsos__find(const struct dsos *dsos, const char *name,
+		       bool cmp_short)
 {
 	struct dso *pos;
 
 	if (cmp_short) {
-		list_for_each_entry(pos, head, node)
+		list_for_each_entry(pos, &dsos->head, node)
 			if (strcmp(pos->short_name, name) == 0)
 				return pos;
 		return NULL;
 	}
-	list_for_each_entry(pos, head, node)
+	list_for_each_entry(pos, &dsos->head, node)
 		if (strcmp(pos->long_name, name) == 0)
 			return pos;
 	return NULL;
 }
 
-struct dso *__dsos__findnew(struct list_head *head, const char *name)
+struct dso *__dsos__findnew(struct dsos *dsos, const char *name)
 {
-	struct dso *dso = dsos__find(head, name, false);
+	struct dso *dso = dsos__find(dsos, name, false);
 
 	if (!dso) {
 		dso = dso__new(name);
 		if (dso != NULL) {
-			dsos__add(head, dso);
+			dsos__add(dsos, dso);
 			dso__set_basename(dso);
 		}
 	}
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index 5e463c0964d4..b63dc98ad71d 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -90,6 +90,13 @@ struct dso_cache {
 	char data[0];
 };
 
+/*
+ * DSOs are put into a list for fast iteration.
+ */
+struct dsos {
+	struct list_head head;
+};
+
 struct dso {
 	struct list_head node;
 	struct rb_root	 symbols[MAP__NR_TYPES];
@@ -224,10 +231,10 @@ struct map *dso__new_map(const char *name);
 struct dso *dso__kernel_findnew(struct machine *machine, const char *name,
 				const char *short_name, int dso_type);
 
-void dsos__add(struct list_head *head, struct dso *dso);
-struct dso *dsos__find(const struct list_head *head, const char *name,
+void dsos__add(struct dsos *dsos, struct dso *dso);
+struct dso *dsos__find(const struct dsos *dsos, const char *name,
 		       bool cmp_short);
-struct dso *__dsos__findnew(struct list_head *head, const char *name);
+struct dso *__dsos__findnew(struct dsos *dsos, const char *name);
 bool __dsos__read_build_ids(struct list_head *head, bool with_hits);
 
 size_t __dsos__fprintf_buildid(struct list_head *head, FILE *fp,
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 158c787ce0c4..ce0de00399da 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -214,11 +214,11 @@ static int machine__hit_all_dsos(struct machine *machine)
 {
 	int err;
 
-	err = __dsos__hit_all(&machine->kernel_dsos);
+	err = __dsos__hit_all(&machine->kernel_dsos.head);
 	if (err)
 		return err;
 
-	return __dsos__hit_all(&machine->user_dsos);
+	return __dsos__hit_all(&machine->user_dsos.head);
 }
 
 int dsos__hit_all(struct perf_session *session)
@@ -288,11 +288,12 @@ static int machine__write_buildid_table(struct machine *machine, int fd)
 		umisc = PERF_RECORD_MISC_GUEST_USER;
 	}
 
-	err = __dsos__write_buildid_table(&machine->kernel_dsos, machine,
+	err = __dsos__write_buildid_table(&machine->kernel_dsos.head, machine,
 					  machine->pid, kmisc, fd);
 	if (err == 0)
-		err = __dsos__write_buildid_table(&machine->user_dsos, machine,
-						  machine->pid, umisc, fd);
+		err = __dsos__write_buildid_table(&machine->user_dsos.head,
+						  machine, machine->pid, umisc,
+						  fd);
 	return err;
 }
 
@@ -455,9 +456,10 @@ static int __dsos__cache_build_ids(struct list_head *head,
 
 static int machine__cache_build_ids(struct machine *machine, const char *debugdir)
 {
-	int ret = __dsos__cache_build_ids(&machine->kernel_dsos, machine,
+	int ret = __dsos__cache_build_ids(&machine->kernel_dsos.head, machine,
 					  debugdir);
-	ret |= __dsos__cache_build_ids(&machine->user_dsos, machine, debugdir);
+	ret |= __dsos__cache_build_ids(&machine->user_dsos.head, machine,
+				       debugdir);
 	return ret;
 }
 
@@ -483,8 +485,10 @@ static int perf_session__cache_build_ids(struct perf_session *session)
 
 static bool machine__read_build_ids(struct machine *machine, bool with_hits)
 {
-	bool ret = __dsos__read_build_ids(&machine->kernel_dsos, with_hits);
-	ret |= __dsos__read_build_ids(&machine->user_dsos, with_hits);
+	bool ret;
+
+	ret  = __dsos__read_build_ids(&machine->kernel_dsos.head, with_hits);
+	ret |= __dsos__read_build_ids(&machine->user_dsos.head, with_hits);
 	return ret;
 }
 
@@ -1548,7 +1552,7 @@ static int __event_process_build_id(struct build_id_event *bev,
 				    struct perf_session *session)
 {
 	int err = -1;
-	struct list_head *head;
+	struct dsos *dsos;
 	struct machine *machine;
 	u16 misc;
 	struct dso *dso;
@@ -1563,22 +1567,22 @@ static int __event_process_build_id(struct build_id_event *bev,
 	switch (misc) {
 	case PERF_RECORD_MISC_KERNEL:
 		dso_type = DSO_TYPE_KERNEL;
-		head = &machine->kernel_dsos;
+		dsos = &machine->kernel_dsos;
 		break;
 	case PERF_RECORD_MISC_GUEST_KERNEL:
 		dso_type = DSO_TYPE_GUEST_KERNEL;
-		head = &machine->kernel_dsos;
+		dsos = &machine->kernel_dsos;
 		break;
 	case PERF_RECORD_MISC_USER:
 	case PERF_RECORD_MISC_GUEST_USER:
 		dso_type = DSO_TYPE_USER;
-		head = &machine->user_dsos;
+		dsos = &machine->user_dsos;
 		break;
 	default:
 		goto out;
 	}
 
-	dso = __dsos__findnew(head, filename);
+	dso = __dsos__findnew(dsos, filename);
 	if (dso != NULL) {
 		char sbuild_id[BUILD_ID_SIZE * 2 + 1];
 
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index b2ec38bf211e..49a75ec4c47b 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -17,8 +17,8 @@ int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
 {
 	map_groups__init(&machine->kmaps);
 	RB_CLEAR_NODE(&machine->rb_node);
-	INIT_LIST_HEAD(&machine->user_dsos);
-	INIT_LIST_HEAD(&machine->kernel_dsos);
+	INIT_LIST_HEAD(&machine->user_dsos.head);
+	INIT_LIST_HEAD(&machine->kernel_dsos.head);
 
 	machine->threads = RB_ROOT;
 	INIT_LIST_HEAD(&machine->dead_threads);
@@ -72,11 +72,11 @@ out_delete:
 	return NULL;
 }
 
-static void dsos__delete(struct list_head *dsos)
+static void dsos__delete(struct dsos *dsos)
 {
 	struct dso *pos, *n;
 
-	list_for_each_entry_safe(pos, n, dsos, node) {
+	list_for_each_entry_safe(pos, n, &dsos->head, node) {
 		list_del(&pos->node);
 		dso__delete(pos);
 	}
@@ -477,23 +477,23 @@ struct map *machine__new_module(struct machine *machine, u64 start,
 size_t machines__fprintf_dsos(struct machines *machines, FILE *fp)
 {
 	struct rb_node *nd;
-	size_t ret = __dsos__fprintf(&machines->host.kernel_dsos, fp) +
-		     __dsos__fprintf(&machines->host.user_dsos, fp);
+	size_t ret = __dsos__fprintf(&machines->host.kernel_dsos.head, fp) +
+		     __dsos__fprintf(&machines->host.user_dsos.head, fp);
 
 	for (nd = rb_first(&machines->guests); nd; nd = rb_next(nd)) {
 		struct machine *pos = rb_entry(nd, struct machine, rb_node);
-		ret += __dsos__fprintf(&pos->kernel_dsos, fp);
-		ret += __dsos__fprintf(&pos->user_dsos, fp);
+		ret += __dsos__fprintf(&pos->kernel_dsos.head, fp);
+		ret += __dsos__fprintf(&pos->user_dsos.head, fp);
 	}
 
 	return ret;
 }
 
-size_t machine__fprintf_dsos_buildid(struct machine *machine, FILE *fp,
+size_t machine__fprintf_dsos_buildid(struct machine *m, FILE *fp,
 				     bool (skip)(struct dso *dso, int parm), int parm)
 {
-	return __dsos__fprintf_buildid(&machine->kernel_dsos, fp, skip, parm) +
-	       __dsos__fprintf_buildid(&machine->user_dsos, fp, skip, parm);
+	return __dsos__fprintf_buildid(&m->kernel_dsos.head, fp, skip, parm) +
+	       __dsos__fprintf_buildid(&m->user_dsos.head, fp, skip, parm);
 }
 
 size_t machines__fprintf_dsos_buildid(struct machines *machines, FILE *fp,
@@ -994,7 +994,7 @@ static bool machine__uses_kcore(struct machine *machine)
 {
 	struct dso *dso;
 
-	list_for_each_entry(dso, &machine->kernel_dsos, node) {
+	list_for_each_entry(dso, &machine->kernel_dsos.head, node) {
 		if (dso__is_kcore(dso))
 			return true;
 	}
diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h
index 6a6bcc1cff54..2b651a7f5d0d 100644
--- a/tools/perf/util/machine.h
+++ b/tools/perf/util/machine.h
@@ -4,6 +4,7 @@
 #include <sys/types.h>
 #include <linux/rbtree.h>
 #include "map.h"
+#include "dso.h"
 #include "event.h"
 
 struct addr_location;
@@ -32,8 +33,8 @@ struct machine {
 	struct list_head  dead_threads;
 	struct thread	  *last_match;
 	struct vdso_info  *vdso_info;
-	struct list_head  user_dsos;
-	struct list_head  kernel_dsos;
+	struct dsos	  user_dsos;
+	struct dsos	  kernel_dsos;
 	struct map_groups kmaps;
 	struct map	  *vmlinux_maps[MAP__NR_TYPES];
 	u64		  kernel_start;
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index be37b5aca335..c150ca4343eb 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -184,7 +184,8 @@ static struct dso *kernel_get_module_dso(const char *module)
 	const char *vmlinux_name;
 
 	if (module) {
-		list_for_each_entry(dso, &host_machine->kernel_dsos, node) {
+		list_for_each_entry(dso, &host_machine->kernel_dsos.head,
+				    node) {
 			if (strncmp(dso->short_name + 1, module,
 				    dso->short_name_len - 2) == 0)
 				goto found;
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index 2a92e10317c5..1e23a5bfb044 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -6,6 +6,7 @@
 #include <inttypes.h>
 
 #include "symbol.h"
+#include "machine.h"
 #include "vdso.h"
 #include <symbol/kallsyms.h>
 #include "debug.h"
@@ -929,7 +930,11 @@ int dso__load_sym(struct dso *dso, struct map *map,
 				}
 				curr_dso->symtab_type = dso->symtab_type;
 				map_groups__insert(kmap->kmaps, curr_map);
-				dsos__add(&dso->node, curr_dso);
+				/*
+				 * The new DSO should go to the kernel DSOS
+				 */
+				dsos__add(&map->groups->machine->kernel_dsos,
+					  curr_dso);
 				dso__set_loaded(curr_dso, map->type);
 			} else
 				curr_dso = curr_map->dso;
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
                   ` (5 preceding siblings ...)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  2014-10-14  9:09   ` Jiri Olsa
  -1 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Waiman Long, Adrian Hunter, Don Zickus,
	Douglas Hatch, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton,
	Arnaldo Carvalho de Melo

From: Waiman Long <Waiman.Long@hp.com>

With workload that spawns and destroys many threads and processes, it
was found that perf-mem could took a long time to post-process the perf
data after the target workload had completed its operation.

The performance bottleneck was found to be the lookup and insertion of
the new DSO structures (thousands of them in this case).

In a dual-socket Ivy-Bridge E7-4890 v2 machine (30-core, 60-thread), the
perf profile below shows what perf was doing after the profiled AIM7
shared workload completed:

-     83.94%  perf  libc-2.11.3.so     [.] __strcmp_sse42
   - __strcmp_sse42
      - 99.82% map__new
           machine__process_mmap_event
           perf_session_deliver_event
           perf_session__process_event
           __perf_session__process_events
           cmd_record
           cmd_mem
           run_builtin
           main
           __libc_start_main
-     13.17%  perf  perf               [.] __dsos__findnew
     __dsos__findnew
     map__new
     machine__process_mmap_event
     perf_session_deliver_event
     perf_session__process_event
     __perf_session__process_events
     cmd_record
     cmd_mem
     run_builtin
     main
     __libc_start_main

So about 97% of CPU times were spent in the map__new() function trying
to insert new DSO entry into the DSO linked list. The whole
post-processing step took about 9 minutes.

The DSO structures are currently searched linearly. So the total
processing time will be proportional to n^2.

To overcome this performance problem, the DSO code is modified to also
put the DSO structures in a RB tree sorted by its long name in
additional to being in a simple linked list. With this change, the
processing time will become proportional to n*log(n) which will be much
quicker for large n. However, the short name will still be searched
using the old linear searching method.  With that patch in place, the
same perf-mem post-processing step took less than 30 seconds to
complete.

Signed-off-by: Waiman Long <Waiman.Long@hp.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Douglas Hatch <doug.hatch@hp.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Scott J Norton <scott.norton@hp.com>
Link: http://lkml.kernel.org/r/1412098575-27863-3-git-send-email-Waiman.Long@hp.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c     | 70 ++++++++++++++++++++++++++++++++++++++++++++---
 tools/perf/util/dso.h     |  5 +++-
 tools/perf/util/machine.c |  1 +
 3 files changed, 71 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 901a58fa3f22..0247acfdfaca 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -653,6 +653,65 @@ struct dso *dso__kernel_findnew(struct machine *machine, const char *name,
 	return dso;
 }
 
+/*
+ * Find a matching entry and/or link current entry to RB tree.
+ * Either one of the dso or name parameter must be non-NULL or the
+ * function will not work.
+ */
+static struct dso *dso__findlink_by_longname(struct rb_root *root,
+					     struct dso *dso, const char *name)
+{
+	struct rb_node **p = &root->rb_node;
+	struct rb_node  *parent = NULL;
+
+	if (!name)
+		name = dso->long_name;
+	/*
+	 * Find node with the matching name
+	 */
+	while (*p) {
+		struct dso *this = rb_entry(*p, struct dso, rb_node);
+		int rc = strcmp(name, this->long_name);
+
+		parent = *p;
+		if (rc == 0) {
+			/*
+			 * In case the new DSO is a duplicate of an existing
+			 * one, print an one-time warning & put the new entry
+			 * at the end of the list of duplicates.
+			 */
+			if (!dso || (dso == this))
+				return this;	/* Find matching dso */
+			/*
+			 * The core kernel DSOs may have duplicated long name.
+			 * In this case, the short name should be different.
+			 * Comparing the short names to differentiate the DSOs.
+			 */
+			rc = strcmp(dso->short_name, this->short_name);
+			if (rc == 0) {
+				pr_err("Duplicated dso name: %s\n", name);
+				return NULL;
+			}
+		}
+		if (rc < 0)
+			p = &parent->rb_left;
+		else
+			p = &parent->rb_right;
+	}
+	if (dso) {
+		/* Add new node and rebalance tree */
+		rb_link_node(&dso->rb_node, parent, p);
+		rb_insert_color(&dso->rb_node, root);
+	}
+	return NULL;
+}
+
+static inline struct dso *
+dso__find_by_longname(const struct rb_root *root, const char *name)
+{
+	return dso__findlink_by_longname((struct rb_root *)root, NULL, name);
+}
+
 void dso__set_long_name(struct dso *dso, const char *name, bool name_allocated)
 {
 	if (name == NULL)
@@ -755,6 +814,7 @@ struct dso *dso__new(const char *name)
 		dso->a2l_fails = 1;
 		dso->kernel = DSO_TYPE_USER;
 		dso->needs_swap = DSO_SWAP__UNSET;
+		RB_CLEAR_NODE(&dso->rb_node);
 		INIT_LIST_HEAD(&dso->node);
 		INIT_LIST_HEAD(&dso->data.open_entry);
 	}
@@ -765,6 +825,10 @@ struct dso *dso__new(const char *name)
 void dso__delete(struct dso *dso)
 {
 	int i;
+
+	if (!RB_EMPTY_NODE(&dso->rb_node))
+		pr_err("DSO %s is still in rbtree when being deleted!\n",
+		       dso->long_name);
 	for (i = 0; i < MAP__NR_TYPES; ++i)
 		symbols__delete(&dso->symbols[i]);
 
@@ -854,6 +918,7 @@ bool __dsos__read_build_ids(struct list_head *head, bool with_hits)
 void dsos__add(struct dsos *dsos, struct dso *dso)
 {
 	list_add_tail(&dso->node, &dsos->head);
+	dso__findlink_by_longname(&dsos->root, dso, NULL);
 }
 
 struct dso *dsos__find(const struct dsos *dsos, const char *name,
@@ -867,10 +932,7 @@ struct dso *dsos__find(const struct dsos *dsos, const char *name,
 				return pos;
 		return NULL;
 	}
-	list_for_each_entry(pos, &dsos->head, node)
-		if (strcmp(pos->long_name, name) == 0)
-			return pos;
-	return NULL;
+	return dso__find_by_longname(&dsos->root, name);
 }
 
 struct dso *__dsos__findnew(struct dsos *dsos, const char *name)
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index b63dc98ad71d..acb651acc7fd 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -91,14 +91,17 @@ struct dso_cache {
 };
 
 /*
- * DSOs are put into a list for fast iteration.
+ * DSOs are put into both a list for fast iteration and rbtree for fast
+ * long name lookup.
  */
 struct dsos {
 	struct list_head head;
+	struct rb_root	 root;	/* rbtree root sorted by long name */
 };
 
 struct dso {
 	struct list_head node;
+	struct rb_node	 rb_node;	/* rbtree node sorted by long name */
 	struct rb_root	 symbols[MAP__NR_TYPES];
 	struct rb_root	 symbol_names[MAP__NR_TYPES];
 	void		 *a2l;
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 49a75ec4c47b..b7d477fbda02 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -77,6 +77,7 @@ static void dsos__delete(struct dsos *dsos)
 	struct dso *pos, *n;
 
 	list_for_each_entry_safe(pos, n, &dsos->head, node) {
+		RB_CLEAR_NODE(&pos->rb_node);
 		list_del(&pos->node);
 		dso__delete(pos);
 	}
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 7/8] perf tools: Fix build breakage on arm64 targets
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
@ 2014-10-01 19:50   ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Will Deacon, Jean Pihet, Jiri Olsa,
	linux-arm-kernel, Arnaldo Carvalho de Melo

From: Will Deacon <will.deacon@arm.com>

Attempting to build the perf tool for an arm64 target results in the
following failure:

  arch/arm64/util/unwind-libunwind.c: In function 'libunwind__arch_reg_id':
  arch/arm64/util/unwind-libunwind.c:77:3: error: implicit declaration of function 'pr_err'
     pr_err("unwind: invalid reg id %d\n", regnum);
     ^
  arch/arm64/util/unwind-libunwind.c:77:3: error: nested extern declaration of 'pr_err'

This is due to commit 84f5d36f4866 ("perf tools: Move pr_* debug macros
into debug object") moving the pr_* macros into a new header file, but
failing to update architectures other than x86.

This patch adds the missing include, and fixes the build again.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Cc: Jean Pihet <jean.pihet@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/1412076432-22045-1-git-send-email-will.deacon@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/arm64/util/unwind-libunwind.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/arch/arm64/util/unwind-libunwind.c b/tools/perf/arch/arm64/util/unwind-libunwind.c
index 436ee43859dc..a87afa91a99e 100644
--- a/tools/perf/arch/arm64/util/unwind-libunwind.c
+++ b/tools/perf/arch/arm64/util/unwind-libunwind.c
@@ -3,6 +3,7 @@
 #include <libunwind.h>
 #include "perf_regs.h"
 #include "../../util/unwind.h"
+#include "../../util/debug.h"
 
 int libunwind__arch_reg_id(int regnum)
 {
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 7/8] perf tools: Fix build breakage on arm64 targets
@ 2014-10-01 19:50   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: linux-arm-kernel

From: Will Deacon <will.deacon@arm.com>

Attempting to build the perf tool for an arm64 target results in the
following failure:

  arch/arm64/util/unwind-libunwind.c: In function 'libunwind__arch_reg_id':
  arch/arm64/util/unwind-libunwind.c:77:3: error: implicit declaration of function 'pr_err'
     pr_err("unwind: invalid reg id %d\n", regnum);
     ^
  arch/arm64/util/unwind-libunwind.c:77:3: error: nested extern declaration of 'pr_err'

This is due to commit 84f5d36f4866 ("perf tools: Move pr_* debug macros
into debug object") moving the pr_* macros into a new header file, but
failing to update architectures other than x86.

This patch adds the missing include, and fixes the build again.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Cc: Jean Pihet <jean.pihet@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: linux-arm-kernel at lists.infradead.org
Link: http://lkml.kernel.org/r/1412076432-22045-1-git-send-email-will.deacon at arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/arm64/util/unwind-libunwind.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/arch/arm64/util/unwind-libunwind.c b/tools/perf/arch/arm64/util/unwind-libunwind.c
index 436ee43859dc..a87afa91a99e 100644
--- a/tools/perf/arch/arm64/util/unwind-libunwind.c
+++ b/tools/perf/arch/arm64/util/unwind-libunwind.c
@@ -3,6 +3,7 @@
 #include <libunwind.h>
 #include "perf_regs.h"
 #include "../../util/unwind.h"
+#include "../../util/debug.h"
 
 int libunwind__arch_reg_id(int regnum)
 {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [PATCH 8/8] perf record: Fix error message for --filter option not coming after tracepoint
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
                   ` (7 preceding siblings ...)
  (?)
@ 2014-10-01 19:50 ` Arnaldo Carvalho de Melo
  -1 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-01 19:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, David Ahern, Don Zickus, Frederic Weisbecker,
	Jiri Olsa, Mike Galbraith, Namhyung Kim, Paul Mackerras,
	Peter Zijlstra, Stephane Eranian

From: Arnaldo Carvalho de Melo <acme@redhat.com>

  [root@zoo ~]# perf record --filter "common_pid != PERF_PID" -a
  -F option should follow a -e tracepoint option.

The -F option is for --freq, not --filter. Fix it up to show:

  [root@zoo ~]# perf record --filter "common_pid != PERF_PID" -a
  --filter option should follow a -e tracepoint option

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-z0yrm8stn9w3423nkov3eksg@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/parse-events.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 9522cf22ad81..d76aa30cb1fb 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -984,7 +984,7 @@ int parse_filter(const struct option *opt, const char *str,
 
 	if (last == NULL || last->attr.type != PERF_TYPE_TRACEPOINT) {
 		fprintf(stderr,
-			"-F option should follow a -e tracepoint option\n");
+			"--filter option should follow a -e tracepoint option\n");
 		return -1;
 	}
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2014-10-01 19:50 ` Arnaldo Carvalho de Melo
@ 2014-10-03  3:31   ` Ingo Molnar
  -1 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2014-10-03  3:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Chang Hyun Park,
	David Ahern, Davidlohr Bueso, Don Zickus, Douglas Hatch,
	Frederic Weisbecker, H . Peter Anvin, Jean Pihet, Jiri Olsa,
	linux-arm-kernel, Matt Fleming, Mike Galbraith, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton, Stephane Eranian,
	Thomas Gleixner, Waiman Long, Will Deacon,
	Arnaldo Carvalho de Melo, Peter Zijlstra


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> Best Regards,
> 
> - Arnaldo
> 
> The following changes since commit 07394b5f13a04f86b27e0ddd96a36c7d9bfe1a4f:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-09-27 09:15:48 +0200)
> 
> are available in the git repository at:
> 
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 281f92f233a59ef52bb45287242bd815a67f5647:
> 
>   perf record: Fix error message for --filter option not coming after tracepoint (2014-10-01 15:05:32 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> . Fix mmap return address truncation to 32-bit in 'perf trace'. (Chang Hyun Park)
> 
> o Support operations for shared futexes. (Davidlohr Bueso)
> 
> . Fix error message for --filter option not coming after tracepoint. (Arnaldo Carvalho de Melo)
> 
> Infrastructure:
> 
> . Refactor unit and scale function parameters for pmu parsing routines. (Matt Fleming)
> 
> . Improve DSO long names lookup with rbtree, resulting in great speedup for
>   workloads with lots of DSOs. (Waiman Long)
> 
> . Fix build breakage on arm64 targets. (Will Deacon)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (1):
>       perf record: Fix error message for --filter option not coming after tracepoint
> 
> Chang Hyun Park (1):
>       perf trace: Fix mmap return address truncation to 32-bit
> 
> Davidlohr Bueso (2):
>       perf bench futex: Support operations for shared futexes
>       perf bench futex: Sanitize -q option in requeue
> 
> Matt Fleming (1):
>       perf tools: Refactor unit and scale function parameters
> 
> Waiman Long (2):
>       perf symbols: Encapsulate dsos list head into struct dsos
>       perf symbols: Improve DSO long names lookup speed with rbtree
> 
> Will Deacon (1):
>       perf tools: Fix build breakage on arm64 targets
> 
>  tools/perf/arch/arm64/util/unwind-libunwind.c |  1 +
>  tools/perf/bench/futex-hash.c                 |  7 ++-
>  tools/perf/bench/futex-requeue.c              | 28 +++++----
>  tools/perf/bench/futex-wake.c                 | 15 +++--
>  tools/perf/builtin-trace.c                    |  6 +-
>  tools/perf/util/dso.c                         | 85 +++++++++++++++++++++++----
>  tools/perf/util/dso.h                         | 16 ++++-
>  tools/perf/util/header.c                      | 32 +++++-----
>  tools/perf/util/machine.c                     | 25 ++++----
>  tools/perf/util/machine.h                     |  5 +-
>  tools/perf/util/parse-events.c                | 11 ++--
>  tools/perf/util/pmu.c                         | 38 +++++++-----
>  tools/perf/util/pmu.h                         |  7 ++-
>  tools/perf/util/probe-event.c                 |  3 +-
>  tools/perf/util/symbol-elf.c                  |  7 ++-
>  15 files changed, 200 insertions(+), 86 deletions(-)

Pulled into tip:perf/core, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2014-10-03  3:31   ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2014-10-03  3:31 UTC (permalink / raw)
  To: linux-arm-kernel


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> Best Regards,
> 
> - Arnaldo
> 
> The following changes since commit 07394b5f13a04f86b27e0ddd96a36c7d9bfe1a4f:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2014-09-27 09:15:48 +0200)
> 
> are available in the git repository at:
> 
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 281f92f233a59ef52bb45287242bd815a67f5647:
> 
>   perf record: Fix error message for --filter option not coming after tracepoint (2014-10-01 15:05:32 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> . Fix mmap return address truncation to 32-bit in 'perf trace'. (Chang Hyun Park)
> 
> o Support operations for shared futexes. (Davidlohr Bueso)
> 
> . Fix error message for --filter option not coming after tracepoint. (Arnaldo Carvalho de Melo)
> 
> Infrastructure:
> 
> . Refactor unit and scale function parameters for pmu parsing routines. (Matt Fleming)
> 
> . Improve DSO long names lookup with rbtree, resulting in great speedup for
>   workloads with lots of DSOs. (Waiman Long)
> 
> . Fix build breakage on arm64 targets. (Will Deacon)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (1):
>       perf record: Fix error message for --filter option not coming after tracepoint
> 
> Chang Hyun Park (1):
>       perf trace: Fix mmap return address truncation to 32-bit
> 
> Davidlohr Bueso (2):
>       perf bench futex: Support operations for shared futexes
>       perf bench futex: Sanitize -q option in requeue
> 
> Matt Fleming (1):
>       perf tools: Refactor unit and scale function parameters
> 
> Waiman Long (2):
>       perf symbols: Encapsulate dsos list head into struct dsos
>       perf symbols: Improve DSO long names lookup speed with rbtree
> 
> Will Deacon (1):
>       perf tools: Fix build breakage on arm64 targets
> 
>  tools/perf/arch/arm64/util/unwind-libunwind.c |  1 +
>  tools/perf/bench/futex-hash.c                 |  7 ++-
>  tools/perf/bench/futex-requeue.c              | 28 +++++----
>  tools/perf/bench/futex-wake.c                 | 15 +++--
>  tools/perf/builtin-trace.c                    |  6 +-
>  tools/perf/util/dso.c                         | 85 +++++++++++++++++++++++----
>  tools/perf/util/dso.h                         | 16 ++++-
>  tools/perf/util/header.c                      | 32 +++++-----
>  tools/perf/util/machine.c                     | 25 ++++----
>  tools/perf/util/machine.h                     |  5 +-
>  tools/perf/util/parse-events.c                | 11 ++--
>  tools/perf/util/pmu.c                         | 38 +++++++-----
>  tools/perf/util/pmu.h                         |  7 ++-
>  tools/perf/util/probe-event.c                 |  3 +-
>  tools/perf/util/symbol-elf.c                  |  7 ++-
>  15 files changed, 200 insertions(+), 86 deletions(-)

Pulled into tip:perf/core, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree
  2014-10-01 19:50 ` [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree Arnaldo Carvalho de Melo
@ 2014-10-14  9:09   ` Jiri Olsa
  2014-10-14 17:34     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 38+ messages in thread
From: Jiri Olsa @ 2014-10-14  9:09 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, linux-kernel, Waiman Long, Adrian Hunter,
	Don Zickus, Douglas Hatch, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton,
	Arnaldo Carvalho de Melo

On Wed, Oct 01, 2014 at 04:50:41PM -0300, Arnaldo Carvalho de Melo wrote:
> From: Waiman Long <Waiman.Long@hp.com>
> 
> With workload that spawns and destroys many threads and processes, it
> was found that perf-mem could took a long time to post-process the perf
> data after the target workload had completed its operation.
> 
> The performance bottleneck was found to be the lookup and insertion of
> the new DSO structures (thousands of them in this case).

this change segfaults (below) some tests, but only if I compiled
without DEBUG when I revert this commit, I can no longer reproduce..

jirka

(gdb) set follow-fork-mode child
(gdb) r test 31
Starting program: /home/jolsa/kernel.org/linux-perf/tools/perf/perf test 31
warning: section  not found in /usr/lib/debug/lib/modules/3.16.3-200.fc20.x86_64/vdso/vdso64.so.debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
31: Test output sorting of hist entries                    :[New process 15477]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7b9d7c0 (LWP 15477)]
__strcmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:210
210             movlpd  (%rsi), %xmm2
(gdb) bt
#0  __strcmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:210
#1  0x0000000000477967 in dso__findlink_by_longname (name=<optimized out>, dso=0x0, root=0x7fffffffdbf0)
    at util/dso.c:674
#2  dso__find_by_longname (name=0x7fffffffcae8 "perf", root=0x7fffffffdbf0) at util/dso.c:712
#3  dsos__find (cmp_short=false, name=0x7fffffffcae8 "perf", dsos=0x7fffffffdbe0) at util/dso.c:935
#4  __dsos__findnew (dsos=dsos@entry=0x7fffffffdbe0, name=name@entry=0x7fffffffcae8 "perf") at util/dso.c:940
#5  0x00000000004915d9 in map__new (machine=machine@entry=0x7fffffffdb90, start=4194304, len=1048576, pgoff=0, 
    pid=<optimized out>, d_maj=d_maj@entry=0, d_min=d_min@entry=0, ino=ino@entry=0, ino_gen=ino_gen@entry=0, 
    prot=prot@entry=0, flags=flags@entry=0, filename=filename@entry=0x7fffffffcae8 "perf", type=MAP__FUNCTION, 
    thread=thread@entry=0x90d1f0) at util/map.c:180
#6  0x00000000004900f4 in machine__process_mmap_event (machine=machine@entry=0x7fffffffdb90, 
    event=event@entry=0x7fffffffcac0, sample=sample@entry=0x0) at util/machine.c:1182
#7  0x00000000004d12bb in setup_fake_machine (machines=machines@entry=0x7fffffffdb90)
    at tests/hists_common.c:116
#8  0x00000000004d4478 in test__hists_output () at tests/hists_output.c:600
#9  0x0000000000448fe4 in run_test (test=0x8166a0 <tests+480>) at tests/builtin-test.c:210
#10 __cmd_test (skiplist=0x0, argv=0x7fffffffe2d0, argc=1) at tests/builtin-test.c:255
#11 cmd_test (argc=1, argv=0x7fffffffe2d0, prefix=<optimized out>) at tests/builtin-test.c:320
#12 0x000000000041c8f5 in run_builtin (p=p@entry=0x814fc0 <commands+480>, argc=argc@entry=2, 
    argv=argv@entry=0x7fffffffe2d0) at perf.c:331
#13 0x000000000041c110 in handle_internal_command (argv=0x7fffffffe2d0, argc=2) at perf.c:390
#14 run_argv (argv=0x7fffffffe050, argcp=0x7fffffffe05c) at perf.c:434
#15 main (argc=2, argv=0x7fffffffe2d0) at perf.c:549
(gdb) 

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree
  2014-10-14  9:09   ` Jiri Olsa
@ 2014-10-14 17:34     ` Arnaldo Carvalho de Melo
  2014-10-14 18:03       ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-14 17:34 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Ingo Molnar, linux-kernel, Waiman Long, Adrian Hunter,
	Don Zickus, Douglas Hatch, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton

Em Tue, Oct 14, 2014 at 11:09:58AM +0200, Jiri Olsa escreveu:
> On Wed, Oct 01, 2014 at 04:50:41PM -0300, Arnaldo Carvalho de Melo wrote:
> > From: Waiman Long <Waiman.Long@hp.com>
> > 
> > With workload that spawns and destroys many threads and processes, it
> > was found that perf-mem could took a long time to post-process the perf
> > data after the target workload had completed its operation.
> > 
> > The performance bottleneck was found to be the lookup and insertion of
> > the new DSO structures (thousands of them in this case).
> 
> this change segfaults (below) some tests, but only if I compiled
> without DEBUG when I revert this commit, I can no longer reproduce..

Reproduced, looking at it... 
 
> jirka
> 
> (gdb) set follow-fork-mode child
> (gdb) r test 31
> Starting program: /home/jolsa/kernel.org/linux-perf/tools/perf/perf test 31
> warning: section  not found in /usr/lib/debug/lib/modules/3.16.3-200.fc20.x86_64/vdso/vdso64.so.debug
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib64/libthread_db.so.1".
> 31: Test output sorting of hist entries                    :[New process 15477]
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib64/libthread_db.so.1".
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x7ffff7b9d7c0 (LWP 15477)]
> __strcmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:210
> 210             movlpd  (%rsi), %xmm2
> (gdb) bt
> #0  __strcmp_ssse3 () at ../sysdeps/x86_64/strcmp.S:210
> #1  0x0000000000477967 in dso__findlink_by_longname (name=<optimized out>, dso=0x0, root=0x7fffffffdbf0)
>     at util/dso.c:674
> #2  dso__find_by_longname (name=0x7fffffffcae8 "perf", root=0x7fffffffdbf0) at util/dso.c:712
> #3  dsos__find (cmp_short=false, name=0x7fffffffcae8 "perf", dsos=0x7fffffffdbe0) at util/dso.c:935
> #4  __dsos__findnew (dsos=dsos@entry=0x7fffffffdbe0, name=name@entry=0x7fffffffcae8 "perf") at util/dso.c:940
> #5  0x00000000004915d9 in map__new (machine=machine@entry=0x7fffffffdb90, start=4194304, len=1048576, pgoff=0, 
>     pid=<optimized out>, d_maj=d_maj@entry=0, d_min=d_min@entry=0, ino=ino@entry=0, ino_gen=ino_gen@entry=0, 
>     prot=prot@entry=0, flags=flags@entry=0, filename=filename@entry=0x7fffffffcae8 "perf", type=MAP__FUNCTION, 
>     thread=thread@entry=0x90d1f0) at util/map.c:180
> #6  0x00000000004900f4 in machine__process_mmap_event (machine=machine@entry=0x7fffffffdb90, 
>     event=event@entry=0x7fffffffcac0, sample=sample@entry=0x0) at util/machine.c:1182
> #7  0x00000000004d12bb in setup_fake_machine (machines=machines@entry=0x7fffffffdb90)
>     at tests/hists_common.c:116
> #8  0x00000000004d4478 in test__hists_output () at tests/hists_output.c:600
> #9  0x0000000000448fe4 in run_test (test=0x8166a0 <tests+480>) at tests/builtin-test.c:210
> #10 __cmd_test (skiplist=0x0, argv=0x7fffffffe2d0, argc=1) at tests/builtin-test.c:255
> #11 cmd_test (argc=1, argv=0x7fffffffe2d0, prefix=<optimized out>) at tests/builtin-test.c:320
> #12 0x000000000041c8f5 in run_builtin (p=p@entry=0x814fc0 <commands+480>, argc=argc@entry=2, 
>     argv=argv@entry=0x7fffffffe2d0) at perf.c:331
> #13 0x000000000041c110 in handle_internal_command (argv=0x7fffffffe2d0, argc=2) at perf.c:390
> #14 run_argv (argv=0x7fffffffe050, argcp=0x7fffffffe05c) at perf.c:434
> #15 main (argc=2, argv=0x7fffffffe2d0) at perf.c:549
> (gdb) 

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree
  2014-10-14 17:34     ` Arnaldo Carvalho de Melo
@ 2014-10-14 18:03       ` Arnaldo Carvalho de Melo
  2014-10-15 10:05         ` [tip:perf/urgent] perf machine: Add missing dsos-> root rbtree root initialization tip-bot for Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-10-14 18:03 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Ingo Molnar, linux-kernel, Waiman Long, Adrian Hunter,
	Don Zickus, Douglas Hatch, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Scott J Norton

Em Tue, Oct 14, 2014 at 02:34:03PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Oct 14, 2014 at 11:09:58AM +0200, Jiri Olsa escreveu:
> > On Wed, Oct 01, 2014 at 04:50:41PM -0300, Arnaldo Carvalho de Melo wrote:
> > > From: Waiman Long <Waiman.Long@hp.com>

> > > With workload that spawns and destroys many threads and processes, it
> > > was found that perf-mem could took a long time to post-process the perf
> > > data after the target workload had completed its operation.

> > > The performance bottleneck was found to be the lookup and insertion of
> > > the new DSO structures (thousands of them in this case).

> > this change segfaults (below) some tests, but only if I compiled
> > without DEBUG when I revert this commit, I can no longer reproduce..
 
> Reproduced, looking at it... 

Fixed, this happens because we end up using a struct machines on the
stack, and then machines__init() was not initializing the newly
introduced rb_root, just the existing list_head.

When we introduced struct dsos, to group the two ways to store dsos,
i.e. the linked list and the rbtree, we didn't turned the initialization
done in machines__init(machines->host) -> machine__init() ->
INIT_LIST_HEAD into a dsos__init() to keep on initializing the list_head
but _as well_ initializing the rb_root, oops. All worked because outside
perf-test we probably zalloc the whole thing which ends up initializing
it in to NULL.

So the problem looks contained to 'perf test' that uses it on stack,
etc.

Will add your Reported-by, but if you're quick, I can give you a
Tested-by too ;-)

- Arnaldo

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index b7d477fbda02..34fc7c8672e4 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -13,12 +13,18 @@
 #include <symbol/kallsyms.h>
 #include "unwind.h"
 
+static void dsos__init(struct dsos *dsos)
+{
+	INIT_LIST_HEAD(&dsos->head);
+	dsos->root = RB_ROOT;
+}
+
 int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
 {
 	map_groups__init(&machine->kmaps);
 	RB_CLEAR_NODE(&machine->rb_node);
-	INIT_LIST_HEAD(&machine->user_dsos.head);
-	INIT_LIST_HEAD(&machine->kernel_dsos.head);
+	dsos__init(&machine->user_dsos);
+	dsos__init(&machine->kernel_dsos);
 
 	machine->threads = RB_ROOT;
 	INIT_LIST_HEAD(&machine->dead_threads);

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [tip:perf/urgent] perf machine: Add missing dsos-> root rbtree root initialization
  2014-10-14 18:03       ` Arnaldo Carvalho de Melo
@ 2014-10-15 10:05         ` tip-bot for Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 38+ messages in thread
From: tip-bot for Arnaldo Carvalho de Melo @ 2014-10-15 10:05 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: mingo, dzickus, paulus, jolsa, tglx, hpa, acme, namhyung,
	linux-kernel, doug.hatch, peterz, jolsa, scott.norton, mingo

Commit-ID:  e167f995e26249aa93708589c5eea539652351fa
Gitweb:     http://git.kernel.org/tip/e167f995e26249aa93708589c5eea539652351fa
Author:     Arnaldo Carvalho de Melo <acme@redhat.com>
AuthorDate: Tue, 14 Oct 2014 15:07:48 -0300
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 14 Oct 2014 17:50:44 -0300

perf machine: Add missing dsos->root rbtree root initialization

A segfault happens on 'perf test hists_link' because we end up using a
struct machines on the stack, and then machines__init() was not
initializing the newly introduced rb_root, just the existing list_head.

When we introduced struct dsos, to group the two ways to store dsos,
i.e. the linked list and the rbtree, we didn't turned the initialization
done in:

	machines__init(machines->host) ->
		machine__init() ->
			INIT_LIST_HEAD

into a dsos__init() to keep on initializing the list_head but _as well_
initializing the rb_root, oops.

All worked because outside perf-test we probably zalloc the whole thing
which ends up initializing it in to NULL.

So the problem looks contained to 'perf test' that uses it on stack,
etc.

Reported-by: Jiri Olsa <jolsa@redhat.com>
Acked-by: Waiman Long <Waiman.Long@hp.com>,
Cc: Adrian Hunter <adrian.hunter@intel.com>,
Cc: Don Zickus <dzickus@redhat.com>
Cc: Douglas Hatch <doug.hatch@hp.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Scott J Norton <scott.norton@hp.com>
Cc: Waiman Long <Waiman.Long@hp.com>,
Link: http://lkml.kernel.org/r/20141014180353.GF3198@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/machine.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index b7d477f..34fc7c8 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -13,12 +13,18 @@
 #include <symbol/kallsyms.h>
 #include "unwind.h"
 
+static void dsos__init(struct dsos *dsos)
+{
+	INIT_LIST_HEAD(&dsos->head);
+	dsos->root = RB_ROOT;
+}
+
 int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
 {
 	map_groups__init(&machine->kmaps);
 	RB_CLEAR_NODE(&machine->rb_node);
-	INIT_LIST_HEAD(&machine->user_dsos.head);
-	INIT_LIST_HEAD(&machine->kernel_dsos.head);
+	dsos__init(&machine->user_dsos);
+	dsos__init(&machine->kernel_dsos);
 
 	machine->threads = RB_ROOT;
 	INIT_LIST_HEAD(&machine->dead_threads);

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2018-03-28 18:49 Arnaldo Carvalho de Melo
@ 2018-03-29  7:23 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2018-03-29  7:23 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, linux-perf-users, Adrian Hunter,
	Alexander Shishkin, David Ahern, Heiko Carstens,
	Hendrik Brueckner, Jiri Olsa, Kan Liang, Martin Schwidefsky,
	Namhyung Kim, Peter Zijlstra, Thomas Richter, Wang Nan,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> Test results at the end of this message, as usual.
> 
> The following changes since commit 631fe154edb0a37308d0116a0f9b7bba9dca6218:
> 
>   perf/x86: Update rdpmc_always_available static key to the modern API (2018-03-27 07:53:00 +0200)
> 
> are available in the Git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.17-20180328
> 
> for you to fetch changes up to 109d59b900e78834c66657dd4748fcedb9a1fe8d:
> 
>   perf vendor events s390: Add JSON files for IBM z14 (2018-03-27 13:13:39 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> - Be consistent when checking if a perf_mmap instance had
>   its ring buffer unmmaped, fixing segfaults noticed in
>   'perf trace' (Kan Liang, Arnaldo Carvalho de Melo)
> 
> - Avoid adding the same option multiple times to the 'diff'
>   command in check-headers.sh (Jiri Olsa)
> 
> - Add vendor event files (JSON format) to various IBM
>   s390 models (z10EC, z10BC, z196, zEC12, zBC12, z13
>   and z14) (Thomas Richter)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (1):
>       perf mmap: Be consistent when checking for an unmaped ring buffer
> 
> Jiri Olsa (1):
>       perf build: Fix check-headers.sh opts assignment
> 
> Kan Liang (1):
>       perf mmap: Fix accessing unmapped mmap in perf_mmap__read_done()
> 
> Thomas Richter (5):
>       perf vendor events s390: Add JSON files for IBM z10EC z10BC
>       perf vendor events s390: Add JSON files for IBM z196
>       perf vendor events s390: Add JSON files for IBM zEC12 zBC12
>       perf vendor events s390: Add JSON files for IBM z13
>       perf vendor events s390: Add JSON files for IBM z14
> 
>  tools/perf/check-headers.sh                        |   1 +
>  tools/perf/pmu-events/arch/s390/cf_z10/basic.json  |  74 +++++
>  tools/perf/pmu-events/arch/s390/cf_z10/crypto.json |  98 ++++++
>  .../perf/pmu-events/arch/s390/cf_z10/extended.json | 110 +++++++
>  tools/perf/pmu-events/arch/s390/cf_z13/basic.json  |  74 +++++
>  tools/perf/pmu-events/arch/s390/cf_z13/crypto.json |  98 ++++++
>  .../perf/pmu-events/arch/s390/cf_z13/extended.json | 338 +++++++++++++++++++++
>  tools/perf/pmu-events/arch/s390/cf_z14/basic.json  |  50 +++
>  tools/perf/pmu-events/arch/s390/cf_z14/crypto.json |  98 ++++++
>  .../perf/pmu-events/arch/s390/cf_z14/extended.json | 320 +++++++++++++++++++
>  tools/perf/pmu-events/arch/s390/cf_z196/basic.json |  74 +++++
>  .../perf/pmu-events/arch/s390/cf_z196/crypto.json  |  98 ++++++
>  .../pmu-events/arch/s390/cf_z196/extended.json     | 146 +++++++++
>  .../perf/pmu-events/arch/s390/cf_zec12/basic.json  |  74 +++++
>  .../perf/pmu-events/arch/s390/cf_zec12/crypto.json |  98 ++++++
>  .../pmu-events/arch/s390/cf_zec12/extended.json    | 212 +++++++++++++
>  tools/perf/pmu-events/arch/s390/mapfile.csv        |   6 +
>  tools/perf/util/mmap.c                             |  19 +-
>  18 files changed, 1987 insertions(+), 1 deletion(-)
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/basic.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/crypto.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/extended.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/basic.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/crypto.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/extended.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/basic.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/crypto.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/extended.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/basic.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/crypto.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/extended.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/basic.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/crypto.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/extended.json
>  create mode 100644 tools/perf/pmu-events/arch/s390/mapfile.csv

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2018-03-28 18:49 Arnaldo Carvalho de Melo
  2018-03-29  7:23 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2018-03-28 18:49 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, linux-perf-users, Arnaldo Carvalho de Melo,
	Adrian Hunter, Alexander Shishkin, David Ahern, Heiko Carstens,
	Hendrik Brueckner, Jiri Olsa, Kan Liang, Martin Schwidefsky,
	Namhyung Kim, Peter Zijlstra, Thomas Richter, Wang Nan,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

Test results at the end of this message, as usual.

The following changes since commit 631fe154edb0a37308d0116a0f9b7bba9dca6218:

  perf/x86: Update rdpmc_always_available static key to the modern API (2018-03-27 07:53:00 +0200)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.17-20180328

for you to fetch changes up to 109d59b900e78834c66657dd4748fcedb9a1fe8d:

  perf vendor events s390: Add JSON files for IBM z14 (2018-03-27 13:13:39 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

- Be consistent when checking if a perf_mmap instance had
  its ring buffer unmmaped, fixing segfaults noticed in
  'perf trace' (Kan Liang, Arnaldo Carvalho de Melo)

- Avoid adding the same option multiple times to the 'diff'
  command in check-headers.sh (Jiri Olsa)

- Add vendor event files (JSON format) to various IBM
  s390 models (z10EC, z10BC, z196, zEC12, zBC12, z13
  and z14) (Thomas Richter)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
      perf mmap: Be consistent when checking for an unmaped ring buffer

Jiri Olsa (1):
      perf build: Fix check-headers.sh opts assignment

Kan Liang (1):
      perf mmap: Fix accessing unmapped mmap in perf_mmap__read_done()

Thomas Richter (5):
      perf vendor events s390: Add JSON files for IBM z10EC z10BC
      perf vendor events s390: Add JSON files for IBM z196
      perf vendor events s390: Add JSON files for IBM zEC12 zBC12
      perf vendor events s390: Add JSON files for IBM z13
      perf vendor events s390: Add JSON files for IBM z14

 tools/perf/check-headers.sh                        |   1 +
 tools/perf/pmu-events/arch/s390/cf_z10/basic.json  |  74 +++++
 tools/perf/pmu-events/arch/s390/cf_z10/crypto.json |  98 ++++++
 .../perf/pmu-events/arch/s390/cf_z10/extended.json | 110 +++++++
 tools/perf/pmu-events/arch/s390/cf_z13/basic.json  |  74 +++++
 tools/perf/pmu-events/arch/s390/cf_z13/crypto.json |  98 ++++++
 .../perf/pmu-events/arch/s390/cf_z13/extended.json | 338 +++++++++++++++++++++
 tools/perf/pmu-events/arch/s390/cf_z14/basic.json  |  50 +++
 tools/perf/pmu-events/arch/s390/cf_z14/crypto.json |  98 ++++++
 .../perf/pmu-events/arch/s390/cf_z14/extended.json | 320 +++++++++++++++++++
 tools/perf/pmu-events/arch/s390/cf_z196/basic.json |  74 +++++
 .../perf/pmu-events/arch/s390/cf_z196/crypto.json  |  98 ++++++
 .../pmu-events/arch/s390/cf_z196/extended.json     | 146 +++++++++
 .../perf/pmu-events/arch/s390/cf_zec12/basic.json  |  74 +++++
 .../perf/pmu-events/arch/s390/cf_zec12/crypto.json |  98 ++++++
 .../pmu-events/arch/s390/cf_zec12/extended.json    | 212 +++++++++++++
 tools/perf/pmu-events/arch/s390/mapfile.csv        |   6 +
 tools/perf/util/mmap.c                             |  19 +-
 18 files changed, 1987 insertions(+), 1 deletion(-)
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/basic.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/crypto.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z10/extended.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/basic.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/crypto.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z13/extended.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/basic.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/crypto.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z14/extended.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/basic.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/crypto.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_z196/extended.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/basic.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/crypto.json
 create mode 100644 tools/perf/pmu-events/arch/s390/cf_zec12/extended.json
 create mode 100644 tools/perf/pmu-events/arch/s390/mapfile.csv

Test results:

The first ones are container (docker) based builds of tools/perf with and
without libelf support.  Where clang is available, it is also used to build
perf with/without libelf.

The objtool and samples/bpf/ builds are disabled now that I'm switching from
using the sources in a local volume to fetching them from a http server to
build it inside the container, to make it easier to build in a container cluster.
Those will come back later.

Several are cross builds, the ones with -x-ARCH and the android one, and those
may not have all the features built, due to lack of multi-arch devel packages,
available and being used so far on just a few, like
debian:experimental-x-{arm64,mipsel}.

The 'perf test' one will perform a variety of tests exercising
tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands
with a variety of command line event specifications to then intercept the
sys_perf_event syscall to check that the perf_event_attr fields are set up as
expected, among a variety of other unit tests.

Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/
with a variety of feature sets, exercising the build with an incomplete set of
features as well as with a complete one. It is planned to have it run on each
of the containers mentioned above, using some container orchestration
infrastructure. Get in contact if interested in helping having this in place.

  # docker images | grep none
  # time dm
   1 alpine:3.4                    : Ok   gcc (Alpine 5.3.0) 5.3.0
   2 alpine:3.5                    : Ok   gcc (Alpine 6.2.1) 6.2.1 20160822
   3 alpine:3.6                    : Ok   gcc (Alpine 6.3.0) 6.3.0
   4 alpine:3.7                    : Ok   gcc (Alpine 6.4.0) 6.4.0
   5 alpine:edge                   : Ok   gcc (Alpine 6.4.0) 6.4.0
   6 amazonlinux:1                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
   7 amazonlinux:2                 : Ok   gcc (GCC) 7.2.1 20170915 (Red Hat 7.2.1-2)
   8 android-ndk:r12b-arm          : Ok   arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
   9 android-ndk:r15c-arm          : Ok   arm-linux-androideabi-gcc (GCC) 4.9.x 20150123 (prerelease)
  10 centos:5                      : Ok   gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55)
  11 centos:6                      : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
  12 centos:7                      : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
  13 debian:7                      : Ok   gcc (Debian 4.7.2-5) 4.7.2
  14 debian:8                      : Ok   gcc (Debian 4.9.2-10+deb8u1) 4.9.2
  15 debian:9                      : Ok   gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
  16 debian:experimental           : Ok   gcc (Debian 7.3.0-12) 7.3.0
  17 debian:experimental-x-arm64   : Ok   aarch64-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0
  18 debian:experimental-x-mips    : Ok   mips-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0
  19 debian:experimental-x-mips64  : Ok   mips64-linux-gnuabi64-gcc (Debian 7.3.0-11) 7.3.0
  20 debian:experimental-x-mipsel  : Ok   mipsel-linux-gnu-gcc (Debian 7.3.0-12) 7.3.0
  21 fedora:20                     : Ok   gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-7)
  22 fedora:21                     : Ok   gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)
  23 fedora:22                     : Ok   gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
  24 fedora:23                     : Ok   gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
  25 fedora:24                     : Ok   gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
  26 fedora:24-x-ARC-uClibc        : Ok   arc-linux-gcc (ARCompact ISA Linux uClibc toolchain 2017.09-rc2) 7.1.1 20170710
  27 fedora:25                     : Ok   gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1)
  28 fedora:26                     : Ok   gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2)
  29 fedora:27                     : Ok   gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
  30 fedora:rawhide                : Ok   gcc (GCC) 8.0.1 20180222 (Red Hat 8.0.1-0.16)
  31 gentoo-stage3-amd64:latest    : Ok   gcc (Gentoo 6.4.0-r1 p1.3) 6.4.0
  32 mageia:5                      : Ok   gcc (GCC) 4.9.2
  33 mageia:6                      : Ok   gcc (Mageia 5.5.0-1.mga6) 5.5.0
  34 opensuse:42.1                 : Ok   gcc (SUSE Linux) 4.8.5
  35 opensuse:42.2                 : Ok   gcc (SUSE Linux) 4.8.5
  36 opensuse:42.3                 : Ok   gcc (SUSE Linux) 4.8.5
  37 opensuse:tumbleweed           : Ok   gcc (SUSE Linux) 7.3.0
  38 oraclelinux:6                 : Ok   gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
  39 oraclelinux:7                 : Ok   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16.0.3)
  40 ubuntu:12.04.5                : Ok   gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
  41 ubuntu:14.04.4                : Ok   gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
  42 ubuntu:14.04.4-x-linaro-arm64 : Ok   aarch64-linux-gnu-gcc (Linaro GCC 5.4-2017.05) 5.4.1 20170404
  43 ubuntu:15.04                  : Ok   gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
  44 ubuntu:16.04                  : Ok   gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  45 ubuntu:16.04-x-arm            : Ok   arm-linux-gnueabihf-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  46 ubuntu:16.04-x-arm64          : Ok   aarch64-linux-gnu-gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  47 ubuntu:16.04-x-powerpc        : Ok   powerpc-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  48 ubuntu:16.04-x-powerpc64      : Ok   powerpc64-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  49 ubuntu:16.04-x-powerpc64el    : Ok   powerpc64le-linux-gnu-gcc (Ubuntu/IBM 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  50 ubuntu:16.04-x-s390           : Ok   s390x-linux-gnu-gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
  51 ubuntu:16.10                  : Ok   gcc (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005
  52 ubuntu:17.04                  : Ok   gcc (Ubuntu 6.3.0-12ubuntu2) 6.3.0 20170406
  53 ubuntu:17.10                  : Ok   gcc (Ubuntu 7.2.0-8ubuntu3) 7.2.0
  54 ubuntu:18.04                  : Ok   gcc (Ubuntu 7.2.0-16ubuntu1) 7.2.0
  #
  
  # uname -r
  4.16.0-rc7
  # perf test
   1: vmlinux symtab matches kallsyms                       : Ok
   2: Detect openat syscall event                           : Ok
   3: Detect openat syscall event on all cpus               : Ok
   4: Read samples using the mmap interface                 : Ok
   5: Test data source output                               : Ok
   6: Parse event definition strings                        : Ok
   7: Simple expression parser                              : Ok
   8: PERF_RECORD_* events & perf_sample fields             : Ok
   9: Parse perf pmu format                                 : Ok
  10: DSO data read                                         : Ok
  11: DSO data cache                                        : Ok
  12: DSO data reopen                                       : Ok
  13: Roundtrip evsel->name                                 : Ok
  14: Parse sched tracepoints fields                        : Ok
  15: syscalls:sys_enter_openat event fields                : Ok
  16: Setup struct perf_event_attr                          : Ok
  17: Match and link multiple hists                         : Ok
  18: 'import perf' in python                               : Ok
  19: Breakpoint overflow signal handler                    : Ok
  20: Breakpoint overflow sampling                          : Ok
  21: Breakpoint accounting                                 : Skip
  22: Number of exit events of a simple workload            : Ok
  23: Software clock events period values                   : Ok
  24: Object code reading                                   : Ok
  25: Sample parsing                                        : Ok
  26: Use a dummy software event to keep tracking           : Ok
  27: Parse with no sample_id_all bit set                   : Ok
  28: Filter hist entries                                   : Ok
  29: Lookup mmap thread                                    : Ok
  30: Share thread mg                                       : Ok
  31: Sort output of hist entries                           : Ok
  32: Cumulate child hist entries                           : Ok
  33: Track with sched_switch                               : Ok
  34: Filter fds with revents mask in a fdarray             : Ok
  35: Add fd to a fdarray, making it autogrow               : Ok
  36: kmod_path__parse                                      : Ok
  37: Thread map                                            : Ok
  38: LLVM search and compile                               :
  38.1: Basic BPF llvm compile                              : Ok
  38.2: kbuild searching                                    : Ok
  38.3: Compile source for BPF prologue generation          : Ok
  38.4: Compile source for BPF relocation                   : Ok
  39: Session topology                                      : Ok
  40: BPF filter                                            :
  40.1: Basic BPF filtering                                 : Ok
  40.2: BPF pinning                                         : Ok
  40.3: BPF prologue generation                             : Ok
  40.4: BPF relocation checker                              : Ok
  41: Synthesize thread map                                 : Ok
  42: Remove thread map                                     : Ok
  43: Synthesize cpu map                                    : Ok
  44: Synthesize stat config                                : Ok
  45: Synthesize stat                                       : Ok
  46: Synthesize stat round                                 : Ok
  47: Synthesize attr update                                : Ok
  48: Event times                                           : Ok
  49: Read backward ring buffer                             : Ok
  50: Print cpu map                                         : Ok
  51: Probe SDT events                                      : Ok
  52: is_printable_array                                    : Ok
  53: Print bitmap                                          : Ok
  54: perf hooks                                            : Ok
  55: builtin clang support                                 : Skip (not compiled in)
  56: unit_number__scnprintf                                : Ok
  57: mem2node                                              : Ok
  58: x86 rdpmc                                             : Ok
  59: Convert perf time to TSC                              : Ok
  60: DWARF unwind                                          : Ok
  61: x86 instruction decoder - new instructions            : Ok
  62: Use vfs_getname probe to get syscall args filenames   : Ok
  63: probe libc's inet_pton & backtrace it with ping       : Ok
  64: Check open filename arg using perf trace + vfs_getname: Ok
  65: probe libc's inet_pton & backtrace it with ping       : Ok
  66: Add vfs_getname probe to get syscall args filenames   : Ok
  #
  
  $ make -C tools/perf build-test
  make: Entering directory '/home/acme/git/perf/tools/perf'
  - tarpkg: ./tests/perf-targz-src-pkg .
                  make_no_ui_O: make NO_NEWT=1 NO_SLANG=1 NO_GTK2=1
             make_no_libperl_O: make NO_LIBPERL=1
           make_no_libbionic_O: make NO_LIBBIONIC=1
         make_install_prefix_O: make install prefix=/tmp/krava
                 make_perf_o_O: make perf.o
           make_no_libpython_O: make NO_LIBPYTHON=1
                   make_tags_O: make tags
                make_install_O: make install
                    make_doc_O: make doc
       make_util_pmu_bison_o_O: make util/pmu-bison.o
              make_no_libelf_O: make NO_LIBELF=1
            make_install_bin_O: make install-bin
           make_no_backtrace_O: make NO_BACKTRACE=1
                make_no_gtk2_O: make NO_GTK2=1
               make_no_slang_O: make NO_SLANG=1
  make_no_libdw_dwarf_unwind_O: make NO_LIBDW_DWARF_UNWIND=1
        make_with_babeltrace_O: make LIBBABELTRACE=1
                   make_help_O: make help
            make_no_demangle_O: make NO_DEMANGLE=1
              make_no_libbpf_O: make NO_LIBBPF=1
                make_minimal_O: make NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1
              make_clean_all_O: make clean all
                make_no_newt_O: make NO_NEWT=1
            make_no_libaudit_O: make NO_LIBAUDIT=1
           make_no_libunwind_O: make NO_LIBUNWIND=1
            make_no_auxtrace_O: make NO_AUXTRACE=1
                  make_debug_O: make DEBUG=1
                   make_pure_O: make
             make_no_libnuma_O: make NO_LIBNUMA=1
             make_no_scripts_O: make NO_LIBPYTHON=1 NO_LIBPERL=1
                 make_static_O: make LDFLAGS=-static
         make_with_clangllvm_O: make LIBCLANGLLVM=1
   make_install_prefix_slash_O: make install prefix=/tmp/krava/
             make_util_map_o_O: make util/map.o
  OK
  make: Leaving directory '/home/acme/git/perf/tools/perf'
  $ 

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2017-10-03 12:55 Arnaldo Carvalho de Melo
@ 2017-10-03 16:38 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2017-10-03 16:38 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, linux-perf-users, Adrian Hunter,
	Alexei Starovoitov, Andi Kleen, David Ahern, Heiko Carstens,
	He Kuang, Hendrik Brueckner, Jiri Olsa, Kan Liang,
	Lukasz Odzioba, Martin Schwidefsky, Namhyung Kim, Peter Zijlstra,
	Thomas-Mich Richter, Wang Nan, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	I pulled tip/perf/urgent to pick up fixes, please consider
> pulling, I've been away for a while, so I'll be harvesting outstanding
> patches in the next few days, as well as trying and reviewing more
> complex patchkits,
> 
> - Arnaldo
> 
> Test results at the end of this message, as usual.
> 
> The following changes since commit c976a7d6db215481261b63a89a408cb265a9812b:
> 
>   Merge remote-tracking branch 'tip/perf/urgent' into perf/core, to pick up fixes (2017-10-02 13:58:12 -0300)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.15-20171003
> 
> for you to fetch changes up to f6a9820d572bd8384d982357cbad214b3a6c04bb:
> 
>   perf tests attr: Fix group stat tests (2017-10-03 09:41:45 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> - Multithread the synthesizing of PERF_RECORD_ events for pre-existing
>   threads in 'perf top', speeding up that phase, greatly improving the
>   user experience in systems such as Intel's Knights Mill (Kan Liang)
> 
> - 'perf test' fixes for the perf_event_attr test case (Jiri Olsa, Thomas Richter)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Jiri Olsa (2):
>       perf tests attr: Fix task term values
>       perf tests attr: Fix group stat tests
> 
> Kan Liang (4):
>       perf tools: Lock to protect namespaces and comm list
>       perf tools: Lock to protect comm_str rb tree
>       perf top: Implement multithreading for perf_event__synthesize_threads
>       perf top: Add option to set the number of thread for event synthesize
> 
> Thomas Richter (2):
>       perf test attr: Fix python error on empty result
>       perf test attr: Fix ignored test case result
> 
>  tools/perf/Documentation/perf-top.txt            |   3 +
>  tools/perf/builtin-kvm.c                         |   3 +-
>  tools/perf/builtin-record.c                      |   2 +-
>  tools/perf/builtin-top.c                         |  13 +-
>  tools/perf/builtin-trace.c                       |   2 +-
>  tools/perf/tests/attr.c                          |   2 +-
>  tools/perf/tests/attr.py                         |   6 +-
>  tools/perf/tests/attr/base-record                |   2 +-
>  tools/perf/tests/attr/test-record-group          |   1 +
>  tools/perf/tests/attr/test-record-group-sampling |   2 +-
>  tools/perf/tests/attr/test-record-group1         |   1 +
>  tools/perf/tests/attr/test-stat-group            |   2 +
>  tools/perf/tests/attr/test-stat-group1           |   2 +
>  tools/perf/tests/mmap-thread-lookup.c            |   2 +-
>  tools/perf/util/comm.c                           |  18 ++-
>  tools/perf/util/event.c                          | 163 ++++++++++++++++++-----
>  tools/perf/util/event.h                          |   3 +-
>  tools/perf/util/machine.c                        |   8 +-
>  tools/perf/util/machine.h                        |   9 +-
>  tools/perf/util/thread.c                         |  53 +++++++-
>  tools/perf/util/thread.h                         |   3 +
>  tools/perf/util/top.h                            |   1 +
>  22 files changed, 249 insertions(+), 52 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2017-10-03 12:55 Arnaldo Carvalho de Melo
  2017-10-03 16:38 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-10-03 12:55 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, linux-perf-users, Arnaldo Carvalho de Melo,
	Adrian Hunter, Alexei Starovoitov, Andi Kleen, David Ahern,
	Heiko Carstens, He Kuang, Hendrik Brueckner, Jiri Olsa,
	Kan Liang, Lukasz Odzioba, Martin Schwidefsky, Namhyung Kim,
	Peter Zijlstra, Thomas-Mich Richter, Wang Nan,
	Arnaldo Carvalho de Melo

Hi Ingo,

	I pulled tip/perf/urgent to pick up fixes, please consider
pulling, I've been away for a while, so I'll be harvesting outstanding
patches in the next few days, as well as trying and reviewing more
complex patchkits,

- Arnaldo

Test results at the end of this message, as usual.

The following changes since commit c976a7d6db215481261b63a89a408cb265a9812b:

  Merge remote-tracking branch 'tip/perf/urgent' into perf/core, to pick up fixes (2017-10-02 13:58:12 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-4.15-20171003

for you to fetch changes up to f6a9820d572bd8384d982357cbad214b3a6c04bb:

  perf tests attr: Fix group stat tests (2017-10-03 09:41:45 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

- Multithread the synthesizing of PERF_RECORD_ events for pre-existing
  threads in 'perf top', speeding up that phase, greatly improving the
  user experience in systems such as Intel's Knights Mill (Kan Liang)

- 'perf test' fixes for the perf_event_attr test case (Jiri Olsa, Thomas Richter)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Jiri Olsa (2):
      perf tests attr: Fix task term values
      perf tests attr: Fix group stat tests

Kan Liang (4):
      perf tools: Lock to protect namespaces and comm list
      perf tools: Lock to protect comm_str rb tree
      perf top: Implement multithreading for perf_event__synthesize_threads
      perf top: Add option to set the number of thread for event synthesize

Thomas Richter (2):
      perf test attr: Fix python error on empty result
      perf test attr: Fix ignored test case result

 tools/perf/Documentation/perf-top.txt            |   3 +
 tools/perf/builtin-kvm.c                         |   3 +-
 tools/perf/builtin-record.c                      |   2 +-
 tools/perf/builtin-top.c                         |  13 +-
 tools/perf/builtin-trace.c                       |   2 +-
 tools/perf/tests/attr.c                          |   2 +-
 tools/perf/tests/attr.py                         |   6 +-
 tools/perf/tests/attr/base-record                |   2 +-
 tools/perf/tests/attr/test-record-group          |   1 +
 tools/perf/tests/attr/test-record-group-sampling |   2 +-
 tools/perf/tests/attr/test-record-group1         |   1 +
 tools/perf/tests/attr/test-stat-group            |   2 +
 tools/perf/tests/attr/test-stat-group1           |   2 +
 tools/perf/tests/mmap-thread-lookup.c            |   2 +-
 tools/perf/util/comm.c                           |  18 ++-
 tools/perf/util/event.c                          | 163 ++++++++++++++++++-----
 tools/perf/util/event.h                          |   3 +-
 tools/perf/util/machine.c                        |   8 +-
 tools/perf/util/machine.h                        |   9 +-
 tools/perf/util/thread.c                         |  53 +++++++-
 tools/perf/util/thread.h                         |   3 +
 tools/perf/util/top.h                            |   1 +
 22 files changed, 249 insertions(+), 52 deletions(-)

Test results:

The first ones are container (docker) based builds of tools/perf with and
without libelf support.  Where clang is available, it is also used to build
perf with/without libelf.

The objtool and samples/bpf/ builds are disabled now that I'm switching from
using the sources in a local volume to fetching them from a http server to
build it inside the container, to make it easier to build in a container cluster.
Those will come back later.

Several are cross builds, the ones with -x-ARCH and the android one, and those
may not have all the features built, due to lack of multi-arch devel packages,
available and being used so far on just a few, like
debian:experimental-x-{arm64,mipsel}.

The 'perf test' one will perform a variety of tests exercising
tools/perf/util/, tools/lib/{bpf,traceevent,etc}, as well as run perf commands
with a variety of command line event specifications to then intercept the
sys_perf_event syscall to check that the perf_event_attr fields are set up as
expected, among a variety of other unit tests.

Then there is the 'make -C tools/perf build-test' ones, that build tools/perf/
with a variety of feature sets, exercising the build with an incomplete set of
features as well as with a complete one. It is planned to have it run on each
of the containers mentioned above, using some container orchestration
infrastructure. Get in contact if interested in helping having this in place.

  # dm
   1 alpine:3.4: Ok
   2 alpine:3.5: Ok
   3 alpine:3.6: Ok
   4 alpine:edge: Ok
   5 android-ndk:r12b-arm: Ok
   6 android-ndk:r15c-arm: Ok
   7 centos:5: Ok
   8 centos:6: Ok
   9 centos:7: Ok
  10 debian:7: Ok
  11 debian:8: Ok
  12 debian:9: Ok
  13 debian:experimental: Ok
  14 debian:experimental-x-arm64: Ok
  15 debian:experimental-x-mips: Ok
  16 debian:experimental-x-mips64: Ok
  17 debian:experimental-x-mipsel: Ok
  18 fedora:20: Ok
  19 fedora:21: Ok
  20 fedora:22: Ok
  21 fedora:23: Ok
  22 fedora:24: Ok
  23 fedora:24-x-ARC-uClibc: FAIL

builtin-sched.c: In function 'timehist_sched_switch_event':
builtin-sched.c:2580:1: internal compiler error: in change_address_1, at emit-rtl.c:2150
 }
 ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/issues> for instructions.

  24 fedora:25: Ok
  25 fedora:26: Ok
  26 fedora:rawhide: Ok
  27 mageia:5: Ok
  28 opensuse:42.1: Ok
  29 opensuse:42.2: Ok
  30 opensuse:42.3: Ok
  31 opensuse:tumbleweed: Ok
  32 oraclelinux:6: Ok
  33 oraclelinux:7: Ok
  34 ubuntu:12.04.5: Ok
  35 ubuntu:14.04.4: Ok
  36 ubuntu:14.04.4-x-linaro-arm64: Ok
  37 ubuntu:15.10: Ok
  38 ubuntu:16.04: Ok
  39 ubuntu:16.04-x-arm: Ok
  40 ubuntu:16.04-x-arm64: Ok
  41 ubuntu:16.04-x-powerpc: Ok
  42 ubuntu:16.04-x-powerpc64: Ok
  43 ubuntu:16.04-x-powerpc64el: Ok
  44 ubuntu:16.04-x-s390: Ok

  # uname -a
  Linux jouet 4.13.0+ #3 SMP Mon Sep 25 11:51:22 -03 2017 x86_64 x86_64 x86_64 GNU/Linux
  # perf test
   1: vmlinux symtab matches kallsyms                       : Ok
   2: Detect openat syscall event                           : Ok
   3: Detect openat syscall event on all cpus               : Ok
   4: Read samples using the mmap interface                 : Ok
   5: Test data source output                               : Ok
   6: Parse event definition strings                        : Ok
   7: Simple expression parser                              : Ok
   8: PERF_RECORD_* events & perf_sample fields             : Ok
   9: Parse perf pmu format                                 : Ok
  10: DSO data read                                         : Ok
  11: DSO data cache                                        : Ok
  12: DSO data reopen                                       : Ok
  13: Roundtrip evsel->name                                 : Ok
  14: Parse sched tracepoints fields                        : Ok
  15: syscalls:sys_enter_openat event fields                : Ok
  16: Setup struct perf_event_attr                          : Ok
  17: Match and link multiple hists                         : Ok
  18: 'import perf' in python                               : Ok
  19: Breakpoint overflow signal handler                    : Ok
  20: Breakpoint overflow sampling                          : Ok
  21: Number of exit events of a simple workload            : Ok
  22: Software clock events period values                   : Ok
  23: Object code reading                                   : Ok
  24: Sample parsing                                        : Ok
  25: Use a dummy software event to keep tracking           : Ok
  26: Parse with no sample_id_all bit set                   : Ok
  27: Filter hist entries                                   : Ok
  28: Lookup mmap thread                                    : Ok
  29: Share thread mg                                       : Ok
  30: Sort output of hist entries                           : Ok
  31: Cumulate child hist entries                           : Ok
  32: Track with sched_switch                               : Ok
  33: Filter fds with revents mask in a fdarray             : Ok
  34: Add fd to a fdarray, making it autogrow               : Ok
  35: kmod_path__parse                                      : Ok
  36: Thread map                                            : Ok
  37: LLVM search and compile                               :
  37.1: Basic BPF llvm compile                              : Ok
  37.2: kbuild searching                                    : Ok
  37.3: Compile source for BPF prologue generation          : Ok
  37.4: Compile source for BPF relocation                   : Ok
  38: Session topology                                      : Ok
  39: BPF filter                                            :
  39.1: Basic BPF filtering                                 : Ok
  39.2: BPF pinning                                         : Ok
  39.3: BPF prologue generation                             : Ok
  39.4: BPF relocation checker                              : Ok
  40: Synthesize thread map                                 : Ok
  41: Remove thread map                                     : Ok
  42: Synthesize cpu map                                    : Ok
  43: Synthesize stat config                                : Ok
  44: Synthesize stat                                       : Ok
  45: Synthesize stat round                                 : Ok
  46: Synthesize attr update                                : Ok
  47: Event times                                           : Ok
  48: Read backward ring buffer                             : Ok
  49: Print cpu map                                         : Ok
  50: Probe SDT events                                      : Ok
  51: is_printable_array                                    : Ok
  52: Print bitmap                                          : Ok
  53: perf hooks                                            : Ok
  54: builtin clang support                                 : Skip (not compiled in)
  55: unit_number__scnprintf                                : Ok
  56: x86 rdpmc                                             : Ok
  57: Convert perf time to TSC                              : Ok
  58: DWARF unwind                                          : Ok
  59: x86 instruction decoder - new instructions            : Ok
  60: Use vfs_getname probe to get syscall args filenames   : Ok
  61: probe libc's inet_pton & backtrace it with ping       : Ok
  62: Check open filename arg using perf trace + vfs_getname: Ok
  63: Add vfs_getname probe to get syscall args filenames   : Ok
  #

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2016-01-15 21:40 Arnaldo Carvalho de Melo
@ 2016-01-19  7:32 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2016-01-19  7:32 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Ben Hutchings, Jiri Olsa, Namhyung Kim,
	Naveen N . Rao, Peter Zijlstra, pi3orama, Ravi Bangoria,
	Wang Nan, Zefan Li, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit c36608843adf4674c462e49f63b64b2987d0ba0b:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2016-01-13 10:36:03 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 96b9e70b8e6cd65f71ee71889143976f3afb038a:
> 
>   perf build: Introduce FEATURES_DUMP make variable (2016-01-15 16:32:00 -0300)
> 
> ----------------------------------------------------------------
> perf tools improvements and fixes:
> 
> User visible bug fixes:
> 
> - Fix reading of build-id from vDSO (Ben Hutchings)
> 
> - Fix processing samples for guests, noticed with 'perf kvm',
>   but noticeable as well via other tools, such as 'perf top'
>   (Ravi Bangoria)
> 
> Build infrastructure:
> 
> - Add feature-dump target and FEATURES_DUMP make variable, to
>   allow reusing the feature detection results among multiple
>   tools/ living codebases, such as perf and lib/bpf (Jiri Olsa)
> 
> - 'make -C tools/perf build-test' improvements, making it more
>   paralelizable and allowing building it outside of the source
>   tree, using O= (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Ben Hutchings (1):
>       perf symbols: Fix reading of build-id from vDSO
> 
> Jiri Olsa (2):
>       perf build: Add feature-dump target
>       perf build: Introduce FEATURES_DUMP make variable
> 
> Ravi Bangoria (1):
>       perf kvm record/report: 'unprocessable sample' error while recording/reporting guest data
> 
> Wang Nan (4):
>       perf build: Set parallel making options build-test
>       perf build: Pass O option to Makefile.perf in build-test
>       perf build: Test correct path of perf in build-test
>       perf build: Pass O option to kernel makefile in build-test
> 
>  tools/perf/Makefile.perf   | 25 ++++++++++++++++++++-
>  tools/perf/config/Makefile |  4 ++++
>  tools/perf/tests/make      | 55 +++++++++++++++++++++++++++++++++-------------
>  tools/perf/util/session.c  |  2 +-
>  tools/perf/util/symbol.c   |  2 +-
>  5 files changed, 70 insertions(+), 18 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2016-01-15 21:40 Arnaldo Carvalho de Melo
  2016-01-19  7:32 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-01-15 21:40 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Ben Hutchings, Jiri Olsa,
	Namhyung Kim, Naveen N . Rao, Peter Zijlstra, pi3orama,
	Ravi Bangoria, Wang Nan, Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit c36608843adf4674c462e49f63b64b2987d0ba0b:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2016-01-13 10:36:03 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 96b9e70b8e6cd65f71ee71889143976f3afb038a:

  perf build: Introduce FEATURES_DUMP make variable (2016-01-15 16:32:00 -0300)

----------------------------------------------------------------
perf tools improvements and fixes:

User visible bug fixes:

- Fix reading of build-id from vDSO (Ben Hutchings)

- Fix processing samples for guests, noticed with 'perf kvm',
  but noticeable as well via other tools, such as 'perf top'
  (Ravi Bangoria)

Build infrastructure:

- Add feature-dump target and FEATURES_DUMP make variable, to
  allow reusing the feature detection results among multiple
  tools/ living codebases, such as perf and lib/bpf (Jiri Olsa)

- 'make -C tools/perf build-test' improvements, making it more
  paralelizable and allowing building it outside of the source
  tree, using O= (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Ben Hutchings (1):
      perf symbols: Fix reading of build-id from vDSO

Jiri Olsa (2):
      perf build: Add feature-dump target
      perf build: Introduce FEATURES_DUMP make variable

Ravi Bangoria (1):
      perf kvm record/report: 'unprocessable sample' error while recording/reporting guest data

Wang Nan (4):
      perf build: Set parallel making options build-test
      perf build: Pass O option to Makefile.perf in build-test
      perf build: Test correct path of perf in build-test
      perf build: Pass O option to kernel makefile in build-test

 tools/perf/Makefile.perf   | 25 ++++++++++++++++++++-
 tools/perf/config/Makefile |  4 ++++
 tools/perf/tests/make      | 55 +++++++++++++++++++++++++++++++++-------------
 tools/perf/util/session.c  |  2 +-
 tools/perf/util/symbol.c   |  2 +-
 5 files changed, 70 insertions(+), 18 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-10-29 23:05 Arnaldo Carvalho de Melo
@ 2015-10-30  9:10 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2015-10-30  9:10 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Alexei Starovoitov, Andi Kleen,
	Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa,
	Kaixu Xia, Kan Liang, Masami Hiramatsu, Namhyung Kim,
	Peter Zijlstra, pi3orama, Rabin Vincent, Stephane Eranian,
	Wang Nan, Yuanfang Chen, Zefan Li, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	This one gets us to pass .c files that gets built and
> loaded, next step will be to be able to access function arguments,
> for which there are patches available, but I'm still reviewing them.
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 66a565c203bc31b76969711fbd92da11bee2f129:
> 
>   Merge tag 'perf-ebpf-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-29 13:17:56 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 7ed4915ad60788d6b846e2cd034f49ee15698143:
> 
>   perf unwind: Pass symbol source to libunwind (2015-10-29 17:48:38 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> New features:
> 
> - Allow passing C language eBPF scriptlets via --event in all tools,
>   so that it gets built using clang and then pass it to the kernel via
>   sys_bpf() (Wang Nan)
> 
> - Wire up the loaded ebpf object file with associated kprobes, so that
>   it can determine if the kprobes will be filtered or not (Wang Nan)
> 
> User visible:
> 
> - Add cmd string table to decode sys_bpf first arg in 'trace' (Arnaldo Carvalho de Melo)
> 
> - Enable printing of branch stack in 'perf script' (Stephane Eranian)
> 
> - Pass the right file with debug info to libunwind (Rabin Vincent)
> 
> Build Fixes:
> 
> - Make sure fixdep is built before libbpf, fixing a race (Jiri Olsa)
> 
> - Fix libiberty feature detection (Rabin Vincent)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (1):
>       perf trace: Add cmd string table to decode sys_bpf first arg
> 
> Jiri Olsa (1):
>       perf tools: Make sure fixdep is built before libbpf
> 
> Rabin Vincent (2):
>       tools build: Fix libiberty feature detection
>       perf unwind: Pass symbol source to libunwind
> 
> Stephane Eranian (1):
>       perf script: Enable printing of branch stack
> 
> Wang Nan (3):
>       perf bpf: Attach eBPF filter to perf event
>       perf record: Add clang options for compiling BPF scripts
>       perf tools: Compile scriptlets to BPF objects when passing '.c' to --event
> 
>  tools/build/feature/Makefile             |  4 +-
>  tools/perf/Documentation/perf-record.txt |  6 +++
>  tools/perf/Documentation/perf-script.txt | 14 +++++-
>  tools/perf/Makefile.perf                 |  2 +-
>  tools/perf/builtin-record.c              |  7 +++
>  tools/perf/builtin-script.c              | 82 +++++++++++++++++++++++++++++++-
>  tools/perf/builtin-trace.c               |  7 +++
>  tools/perf/tests/bpf-script-example.c    | 44 +++++++++++++++++
>  tools/perf/util/bpf-loader.c             | 17 ++++++-
>  tools/perf/util/bpf-loader.h             |  5 +-
>  tools/perf/util/evsel.c                  | 17 +++++++
>  tools/perf/util/evsel.h                  |  1 +
>  tools/perf/util/parse-events.c           | 11 ++++-
>  tools/perf/util/parse-events.h           |  3 +-
>  tools/perf/util/parse-events.l           |  3 ++
>  tools/perf/util/parse-events.y           | 15 +++++-
>  tools/perf/util/unwind-libunwind.c       |  5 +-
>  17 files changed, 227 insertions(+), 16 deletions(-)
>  create mode 100644 tools/perf/tests/bpf-script-example.c

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2015-10-29 23:05 Arnaldo Carvalho de Melo
  2015-10-30  9:10 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-10-29 23:05 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Alexei Starovoitov, Andi Kleen, Brendan Gregg, Daniel Borkmann,
	David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Kan Liang,
	Masami Hiramatsu, Namhyung Kim, Peter Zijlstra, pi3orama,
	Rabin Vincent, Stephane Eranian, Wang Nan, Yuanfang Chen,
	Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	This one gets us to pass .c files that gets built and
loaded, next step will be to be able to access function arguments,
for which there are patches available, but I'm still reviewing them.

	Please consider pulling,

- Arnaldo

The following changes since commit 66a565c203bc31b76969711fbd92da11bee2f129:

  Merge tag 'perf-ebpf-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-29 13:17:56 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 7ed4915ad60788d6b846e2cd034f49ee15698143:

  perf unwind: Pass symbol source to libunwind (2015-10-29 17:48:38 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

New features:

- Allow passing C language eBPF scriptlets via --event in all tools,
  so that it gets built using clang and then pass it to the kernel via
  sys_bpf() (Wang Nan)

- Wire up the loaded ebpf object file with associated kprobes, so that
  it can determine if the kprobes will be filtered or not (Wang Nan)

User visible:

- Add cmd string table to decode sys_bpf first arg in 'trace' (Arnaldo Carvalho de Melo)

- Enable printing of branch stack in 'perf script' (Stephane Eranian)

- Pass the right file with debug info to libunwind (Rabin Vincent)

Build Fixes:

- Make sure fixdep is built before libbpf, fixing a race (Jiri Olsa)

- Fix libiberty feature detection (Rabin Vincent)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (1):
      perf trace: Add cmd string table to decode sys_bpf first arg

Jiri Olsa (1):
      perf tools: Make sure fixdep is built before libbpf

Rabin Vincent (2):
      tools build: Fix libiberty feature detection
      perf unwind: Pass symbol source to libunwind

Stephane Eranian (1):
      perf script: Enable printing of branch stack

Wang Nan (3):
      perf bpf: Attach eBPF filter to perf event
      perf record: Add clang options for compiling BPF scripts
      perf tools: Compile scriptlets to BPF objects when passing '.c' to --event

 tools/build/feature/Makefile             |  4 +-
 tools/perf/Documentation/perf-record.txt |  6 +++
 tools/perf/Documentation/perf-script.txt | 14 +++++-
 tools/perf/Makefile.perf                 |  2 +-
 tools/perf/builtin-record.c              |  7 +++
 tools/perf/builtin-script.c              | 82 +++++++++++++++++++++++++++++++-
 tools/perf/builtin-trace.c               |  7 +++
 tools/perf/tests/bpf-script-example.c    | 44 +++++++++++++++++
 tools/perf/util/bpf-loader.c             | 17 ++++++-
 tools/perf/util/bpf-loader.h             |  5 +-
 tools/perf/util/evsel.c                  | 17 +++++++
 tools/perf/util/evsel.h                  |  1 +
 tools/perf/util/parse-events.c           | 11 ++++-
 tools/perf/util/parse-events.h           |  3 +-
 tools/perf/util/parse-events.l           |  3 ++
 tools/perf/util/parse-events.y           | 15 +++++-
 tools/perf/util/unwind-libunwind.c       |  5 +-
 17 files changed, 227 insertions(+), 16 deletions(-)
 create mode 100644 tools/perf/tests/bpf-script-example.c

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-10-22 22:14 Arnaldo Carvalho de Melo
@ 2015-10-23  8:28 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2015-10-23  8:28 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Borislav Petkov, Brendan Gregg,
	Chandler Carruth, Dave Chinner, David Ahern, Frederic Weisbecker,
	Jiri Olsa, Martin Liška, Namhyung Kim, Peter Zijlstra,
	Scott Wood, Stephane Eranian, Steven Rostedt, Taeung Song,
	Wang Nan, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 4ba792e303e278052bb0ee60cce15d6d7dc15c7c:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-22 09:33:46 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to f06cff7c59b6b252d667435d7baad48687b41002:
> 
>   perf annotate: Don't die() when finding an invalid config option (2015-10-22 18:10:52 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - The default for callchains is back to 'callee' when --children is not used,
>   (Namhyung Kim)
> 
> - Move the 'use_offset' option to the right place where the annotate code
>   expects it to be to be able to properly handle it (Namhyung Kim)
> 
> - Don't die when an unknown 'annotate' option is found in the perf config
>   file (usually ~/.perfconfig), just warn the user (Arnaldo Carvalho de Melo)
> 
> Infrastructure:
> 
> - Support %ps/%pS in libtraceevent (Scott Wood)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (2):
>       perf ui tui: Register the error callbacks before initializing the widgets
>       perf annotate: Don't die() when finding an invalid config option
> 
> Namhyung Kim (5):
>       perf tools: Move callchain help messages to callchain.h
>       perf top: Support call-graph display options also
>       perf tools: Defaults to 'caller' callchain order only if --children is enabled
>       perf tools: Improve call graph documents and help messages
>       perf annotate: Fix 'annotate.use_offset' config variable usage
> 
> Scott Wood (1):
>       tools lib traceevent: Support %ps/%pS
> 
>  tools/lib/traceevent/event-parse.c       |  4 +--
>  tools/perf/Documentation/perf-record.txt |  9 +++++--
>  tools/perf/Documentation/perf-report.txt | 38 ++++++++++++++++++-----------
>  tools/perf/Documentation/perf-top.txt    |  5 ++--
>  tools/perf/builtin-record.c              | 11 +++------
>  tools/perf/builtin-report.c              | 17 ++++++++++---
>  tools/perf/builtin-top.c                 | 30 +++++++++++++++++++----
>  tools/perf/ui/browsers/annotate.c        |  8 +++---
>  tools/perf/ui/tui/setup.c                |  8 +++---
>  tools/perf/util/callchain.c              | 42 +++++++++++++++++++++++++++++---
>  tools/perf/util/callchain.h              | 26 ++++++++++++++++++++
>  tools/perf/util/util.c                   |  2 +-
>  12 files changed, 151 insertions(+), 49 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2015-10-22 22:14 Arnaldo Carvalho de Melo
  2015-10-23  8:28 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-10-22 22:14 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, Brendan Gregg, Chandler Carruth, Dave Chinner,
	David Ahern, Frederic Weisbecker, Jiri Olsa, Martin Liška,
	Namhyung Kim, Peter Zijlstra, Scott Wood, Stephane Eranian,
	Steven Rostedt, Taeung Song, Wang Nan, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 4ba792e303e278052bb0ee60cce15d6d7dc15c7c:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-22 09:33:46 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to f06cff7c59b6b252d667435d7baad48687b41002:

  perf annotate: Don't die() when finding an invalid config option (2015-10-22 18:10:52 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- The default for callchains is back to 'callee' when --children is not used,
  (Namhyung Kim)

- Move the 'use_offset' option to the right place where the annotate code
  expects it to be to be able to properly handle it (Namhyung Kim)

- Don't die when an unknown 'annotate' option is found in the perf config
  file (usually ~/.perfconfig), just warn the user (Arnaldo Carvalho de Melo)

Infrastructure:

- Support %ps/%pS in libtraceevent (Scott Wood)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
      perf ui tui: Register the error callbacks before initializing the widgets
      perf annotate: Don't die() when finding an invalid config option

Namhyung Kim (5):
      perf tools: Move callchain help messages to callchain.h
      perf top: Support call-graph display options also
      perf tools: Defaults to 'caller' callchain order only if --children is enabled
      perf tools: Improve call graph documents and help messages
      perf annotate: Fix 'annotate.use_offset' config variable usage

Scott Wood (1):
      tools lib traceevent: Support %ps/%pS

 tools/lib/traceevent/event-parse.c       |  4 +--
 tools/perf/Documentation/perf-record.txt |  9 +++++--
 tools/perf/Documentation/perf-report.txt | 38 ++++++++++++++++++-----------
 tools/perf/Documentation/perf-top.txt    |  5 ++--
 tools/perf/builtin-record.c              | 11 +++------
 tools/perf/builtin-report.c              | 17 ++++++++++---
 tools/perf/builtin-top.c                 | 30 +++++++++++++++++++----
 tools/perf/ui/browsers/annotate.c        |  8 +++---
 tools/perf/ui/tui/setup.c                |  8 +++---
 tools/perf/util/callchain.c              | 42 +++++++++++++++++++++++++++++---
 tools/perf/util/callchain.h              | 26 ++++++++++++++++++++
 tools/perf/util/util.c                   |  2 +-
 12 files changed, 151 insertions(+), 49 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-10-13 19:41 Arnaldo Carvalho de Melo
@ 2015-10-14 13:09 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2015-10-14 13:09 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Andi Kleen, Borislav Petkov,
	David Ahern, Frederic Weisbecker, He Kuang, Jiri Olsa,
	linux-next, Martin Liska, Namhyung Kim, Peter Zijlstra,
	Rabin Vincent, Stephane Eranian, Wang Nan,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling.
> 
> - Arnaldo
> 
> BTW.: There are several outstanding patchkits needing review and processing,
> I'll be out this week for a conference, will try and speed up processing next
> week.
> 
> The following changes since commit 0e537fef24d64f7bf3ef61a27edf64a8d9a5424c:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-08 10:52:44 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 3a70fcd3a4db56731f67f0189514953c74257944:
> 
>   tools build: Fix cross compile build (2015-10-13 11:59:43 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Use the alternative with the most descriptive filename containing
>   a vmlinux file for a given build-id, providing a better title line
>   for tools such as 'annotate' (Arnaldo Carvalho de Melo)
> 
> - Remove help messages about previous right and left arrow keybidings, that
>   were repurposed for horizontal scrolling (Arnaldo Carvalho de Melo)
> 
> - Inform how to reset the symbol filter in the hists browser (top & report)
>   (Arnaldo Carvalho de Melo)
> 
> - Add 'm' key for context menu display in the hists browser, that became
>   inacessible with the repurposing of the right arrow key for horizontal
>   scrolling (Namhyung Kim)
> 
> - Use debug_frame for callchains if eh_frame is unusable (Rabin Vicent)
> 
> Build fixes:
> 
> - Fix strict-aliasing breakage with gcc 4.4 in the READ_ONCE/WRITE_ONCE code
>   adopted from the kernel tree, that builds with -fno-strict-aliasing while
>   tools/perf/ uses -Wstrict-aliasing=3 (Jiri Olsa)
> 
> - Fix unw_word_t pointer casts in code using libunwind for callchains,
>   fixing the build in at least 32-bit MIPS systems (Rabin Vicent)
> 
> - Workaround cross compile build problems related to fixdep (Jiri Olsa)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (3):
>       perf symbols: Try the .debug/ DSO cache as a last resort
>       perf ui browsers: Remove help messages about use of right and arrow keys
>       perf hists browser: Inform how to reset the symbol filter
> 
> Jiri Olsa (2):
>       tools include: Fix strict-aliasing rules breakage
>       tools build: Fix cross compile build
> 
> Namhyung Kim (1):
>       perf hists browser: Add 'm' key for context menu display
> 
> Rabin Vincent (2):
>       perf callchain: Use debug_frame if eh_frame is unusable
>       perf callchains: Fix unw_word_t pointer casts
> 
>  tools/build/Makefile.include       |  4 ++++
>  tools/include/linux/compiler.h     | 32 ++++++++++++++++++++++++--------
>  tools/perf/ui/browsers/annotate.c  |  6 +++---
>  tools/perf/ui/browsers/hists.c     | 13 ++++++++-----
>  tools/perf/ui/browsers/map.c       |  2 +-
>  tools/perf/ui/browsers/scripts.c   |  2 +-
>  tools/perf/util/symbol.c           | 18 +++++++++---------
>  tools/perf/util/unwind-libunwind.c | 14 ++++++++------
>  8 files changed, 58 insertions(+), 33 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2015-10-13 19:41 Arnaldo Carvalho de Melo
  2015-10-14 13:09 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-10-13 19:41 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Andi Kleen, Borislav Petkov, David Ahern, Frederic Weisbecker,
	He Kuang, Jiri Olsa, linux-next, Martin Liska, Namhyung Kim,
	Peter Zijlstra, Rabin Vincent, Stephane Eranian, Wang Nan,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling.

- Arnaldo

BTW.: There are several outstanding patchkits needing review and processing,
I'll be out this week for a conference, will try and speed up processing next
week.

The following changes since commit 0e537fef24d64f7bf3ef61a27edf64a8d9a5424c:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-10-08 10:52:44 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to 3a70fcd3a4db56731f67f0189514953c74257944:

  tools build: Fix cross compile build (2015-10-13 11:59:43 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Use the alternative with the most descriptive filename containing
  a vmlinux file for a given build-id, providing a better title line
  for tools such as 'annotate' (Arnaldo Carvalho de Melo)

- Remove help messages about previous right and left arrow keybidings, that
  were repurposed for horizontal scrolling (Arnaldo Carvalho de Melo)

- Inform how to reset the symbol filter in the hists browser (top & report)
  (Arnaldo Carvalho de Melo)

- Add 'm' key for context menu display in the hists browser, that became
  inacessible with the repurposing of the right arrow key for horizontal
  scrolling (Namhyung Kim)

- Use debug_frame for callchains if eh_frame is unusable (Rabin Vicent)

Build fixes:

- Fix strict-aliasing breakage with gcc 4.4 in the READ_ONCE/WRITE_ONCE code
  adopted from the kernel tree, that builds with -fno-strict-aliasing while
  tools/perf/ uses -Wstrict-aliasing=3 (Jiri Olsa)

- Fix unw_word_t pointer casts in code using libunwind for callchains,
  fixing the build in at least 32-bit MIPS systems (Rabin Vicent)

- Workaround cross compile build problems related to fixdep (Jiri Olsa)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (3):
      perf symbols: Try the .debug/ DSO cache as a last resort
      perf ui browsers: Remove help messages about use of right and arrow keys
      perf hists browser: Inform how to reset the symbol filter

Jiri Olsa (2):
      tools include: Fix strict-aliasing rules breakage
      tools build: Fix cross compile build

Namhyung Kim (1):
      perf hists browser: Add 'm' key for context menu display

Rabin Vincent (2):
      perf callchain: Use debug_frame if eh_frame is unusable
      perf callchains: Fix unw_word_t pointer casts

 tools/build/Makefile.include       |  4 ++++
 tools/include/linux/compiler.h     | 32 ++++++++++++++++++++++++--------
 tools/perf/ui/browsers/annotate.c  |  6 +++---
 tools/perf/ui/browsers/hists.c     | 13 ++++++++-----
 tools/perf/ui/browsers/map.c       |  2 +-
 tools/perf/ui/browsers/scripts.c   |  2 +-
 tools/perf/util/symbol.c           | 18 +++++++++---------
 tools/perf/util/unwind-libunwind.c | 14 ++++++++------
 8 files changed, 58 insertions(+), 33 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-09-16  7:25 ` Ingo Molnar
@ 2015-09-16 13:50   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-16 13:50 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann,
	David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Masami Hiramatsu,
	Matt Fleming, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	pi3orama, Raphael Beamonte, Wang Nan, Zefan Li

Em Wed, Sep 16, 2015 at 09:25:44AM +0200, Ingo Molnar escreveu:
> 
> * Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> 
> > Hi Ingo,
> > 
> > 	Please consider pulling,
> > 
> > - Arnaldo
> > 
> > The following changes since commit 9059b284caecb628fac826c2c5cc8ee85708eec1:
> > 
> >   Merge tag 'perf-core-for-mingo-2' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-09-15 08:50:59 +0200)
> > 
> > are available in the git repository at:
> > 
> >   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> So your perf/urgent bits now conflict with the latest perf/core, in 
> tools/perf/ui/browsers/hists.c. I have merged perf/urgent into perf/core - please 
> double check my resolution (d71b0ad8d309).

Looks fine, tested it even, thanks!

- Arnaldo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-09-15 15:28 Arnaldo Carvalho de Melo
@ 2015-09-16  7:25 ` Ingo Molnar
  2015-09-16 13:50   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 38+ messages in thread
From: Ingo Molnar @ 2015-09-16  7:25 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Alexei Starovoitov, Brendan Gregg, Daniel Borkmann,
	David Ahern, He Kuang, Jiri Olsa, Kaixu Xia, Masami Hiramatsu,
	Matt Fleming, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	pi3orama, Raphael Beamonte, Wang Nan, Zefan Li,
	Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 9059b284caecb628fac826c2c5cc8ee85708eec1:
> 
>   Merge tag 'perf-core-for-mingo-2' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-09-15 08:50:59 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

So your perf/urgent bits now conflict with the latest perf/core, in 
tools/perf/ui/browsers/hists.c. I have merged perf/urgent into perf/core - please 
double check my resolution (d71b0ad8d309).

> 
> for you to fetch changes up to bbbe6bf6037d77816c4a19aaf35f4cecf662b49a:
> 
>   perf tools: Introduce regs_query_register_offset() for x86 (2015-09-15 09:48:33 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Enhance the error reporting of tracepoint event parsing, e.g.:
> 
>     $ oldperf record -e sched:sched_switc usleep 1
>     event syntax error: 'sched:sched_switc'
>                         \___ unknown tracepoint
>     Run 'perf list' for a list of valid events
> 
>   Now we get the much nicer:
> 
>     $ perf record -e sched:sched_switc ls
>     event syntax error: 'sched:sched_switc'
>                          \___ can't access trace events
> 
>     Error: No permissions to read /sys/kernel/debug/tracing/events/sched/sched_switc
>     Hint:  Try 'sudo mount -o remount,mode=755 /sys/kernel/debug'
> 
>   And after we have those mount point permissions fixed:
> 
>     $ perf record -e sched:sched_switc ls
>     event syntax error: 'sched:sched_switc'
>                          \___ unknown tracepoint
> 
>     Error: File /sys/kernel/debug/tracing/events/sched/sched_switc not found.
>     Hint:  Perhaps this kernel misses some CONFIG_ setting to enable this feature?.
> 
>   Now its just a matter of using what git uses to suggest alternatives when we
>   make a typo, i.e. that it is just an 'h' missing :-)

Nice changes!

Btw., wouldn't it be even better to allow partial matches? Not allowing 
'sched:sched_switc' is unnecessarily pedantic IMHO.

For example 'perf list' allows partial matches as well. As long as the resulting 
event is unique, we should allow partial matches. If it's not unique, we should 
print the first 3 matching entries or so.

There's a real UI advantage as well: I could abbreviate the command line with:

  -e sched_sw

instead of always being forced to type out the full tracepoint name.

(Programmatic tracepoint usage and portable scripts should naturally always spell 
out the full event, to make sure new tracepoints don't cause overlaps - but ad-hoc 
usage can do abbreviations just fine.)


>   I.e. basically now the event parsing routing uses the strerror_open()
>   routines introduced by and used in 'perf trace' work. (Jiri Olsa)
> 
> Infrastructure:
> 
> - Export init/exit_probe_symbol_maps() from 'perf probe' for use in eBPF
>   (Namhyung Kim)
> 
> - Free perf_probe_event in cleanup_perf_probe_events() (Namhyung Kim)
> 
> - regs_query_register_offset() infrastructure + implementation for x86.
>   First user will be the perf/eBPF code (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Jiri Olsa (4):
>       tools: Add err.h with ERR_PTR PTR_ERR interface
>       perf tools: Propagate error info for the tracepoint parsing
>       perf evsel: Propagate error info from tp_format
>       perf tools: Enhance parsing events tracepoint error output
> 
> Namhyung Kim (2):
>       perf probe: Free perf_probe_event in cleanup_perf_probe_events()
>       perf probe: Export init/exit_probe_symbol_maps()
> 
> Wang Nan (2):
>       perf tools: regs_query_register_offset() infrastructure
>       perf tools: Introduce regs_query_register_offset() for x86
> 
>  tools/include/linux/err.h                   |  49 +++++++++++
>  tools/perf/arch/x86/Makefile                |   1 +
>  tools/perf/arch/x86/util/dwarf-regs.c       | 122 ++++++++++++++++++++--------
>  tools/perf/builtin-probe.c                  |   5 ++
>  tools/perf/builtin-trace.c                  |  19 +++--
>  tools/perf/config/Makefile                  |   4 +
>  tools/perf/tests/evsel-tp-sched.c           |  10 ++-
>  tools/perf/tests/mmap-basic.c               |   3 +-
>  tools/perf/tests/openat-syscall-all-cpus.c  |   3 +-
>  tools/perf/tests/openat-syscall-tp-fields.c |   3 +-
>  tools/perf/tests/openat-syscall.c           |   3 +-
>  tools/perf/util/evlist.c                    |   3 +-
>  tools/perf/util/evsel.c                     |  16 +++-
>  tools/perf/util/evsel.h                     |   3 +
>  tools/perf/util/include/dwarf-regs.h        |   8 ++
>  tools/perf/util/parse-events.c              |  66 +++++++++++----
>  tools/perf/util/parse-events.h              |   3 +-
>  tools/perf/util/parse-events.y              |  16 ++--
>  tools/perf/util/probe-event.c               |  32 ++++----
>  tools/perf/util/probe-event.h               |   2 +
>  tools/perf/util/trace-event.c               |  15 +++-
>  21 files changed, 291 insertions(+), 95 deletions(-)
>  create mode 100644 tools/include/linux/err.h

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2015-09-15 15:28 Arnaldo Carvalho de Melo
  2015-09-16  7:25 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-09-15 15:28 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Alexei Starovoitov,
	Brendan Gregg, Daniel Borkmann, David Ahern, He Kuang, Jiri Olsa,
	Kaixu Xia, Masami Hiramatsu, Matt Fleming, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, pi3orama, Raphael Beamonte,
	Wang Nan, Zefan Li, Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 9059b284caecb628fac826c2c5cc8ee85708eec1:

  Merge tag 'perf-core-for-mingo-2' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2015-09-15 08:50:59 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo

for you to fetch changes up to bbbe6bf6037d77816c4a19aaf35f4cecf662b49a:

  perf tools: Introduce regs_query_register_offset() for x86 (2015-09-15 09:48:33 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Enhance the error reporting of tracepoint event parsing, e.g.:

    $ oldperf record -e sched:sched_switc usleep 1
    event syntax error: 'sched:sched_switc'
                        \___ unknown tracepoint
    Run 'perf list' for a list of valid events

  Now we get the much nicer:

    $ perf record -e sched:sched_switc ls
    event syntax error: 'sched:sched_switc'
                         \___ can't access trace events

    Error: No permissions to read /sys/kernel/debug/tracing/events/sched/sched_switc
    Hint:  Try 'sudo mount -o remount,mode=755 /sys/kernel/debug'

  And after we have those mount point permissions fixed:

    $ perf record -e sched:sched_switc ls
    event syntax error: 'sched:sched_switc'
                         \___ unknown tracepoint

    Error: File /sys/kernel/debug/tracing/events/sched/sched_switc not found.
    Hint:  Perhaps this kernel misses some CONFIG_ setting to enable this feature?.

  Now its just a matter of using what git uses to suggest alternatives when we
  make a typo, i.e. that it is just an 'h' missing :-)

  I.e. basically now the event parsing routing uses the strerror_open()
  routines introduced by and used in 'perf trace' work. (Jiri Olsa)

Infrastructure:

- Export init/exit_probe_symbol_maps() from 'perf probe' for use in eBPF
  (Namhyung Kim)

- Free perf_probe_event in cleanup_perf_probe_events() (Namhyung Kim)

- regs_query_register_offset() infrastructure + implementation for x86.
  First user will be the perf/eBPF code (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Jiri Olsa (4):
      tools: Add err.h with ERR_PTR PTR_ERR interface
      perf tools: Propagate error info for the tracepoint parsing
      perf evsel: Propagate error info from tp_format
      perf tools: Enhance parsing events tracepoint error output

Namhyung Kim (2):
      perf probe: Free perf_probe_event in cleanup_perf_probe_events()
      perf probe: Export init/exit_probe_symbol_maps()

Wang Nan (2):
      perf tools: regs_query_register_offset() infrastructure
      perf tools: Introduce regs_query_register_offset() for x86

 tools/include/linux/err.h                   |  49 +++++++++++
 tools/perf/arch/x86/Makefile                |   1 +
 tools/perf/arch/x86/util/dwarf-regs.c       | 122 ++++++++++++++++++++--------
 tools/perf/builtin-probe.c                  |   5 ++
 tools/perf/builtin-trace.c                  |  19 +++--
 tools/perf/config/Makefile                  |   4 +
 tools/perf/tests/evsel-tp-sched.c           |  10 ++-
 tools/perf/tests/mmap-basic.c               |   3 +-
 tools/perf/tests/openat-syscall-all-cpus.c  |   3 +-
 tools/perf/tests/openat-syscall-tp-fields.c |   3 +-
 tools/perf/tests/openat-syscall.c           |   3 +-
 tools/perf/util/evlist.c                    |   3 +-
 tools/perf/util/evsel.c                     |  16 +++-
 tools/perf/util/evsel.h                     |   3 +
 tools/perf/util/include/dwarf-regs.h        |   8 ++
 tools/perf/util/parse-events.c              |  66 +++++++++++----
 tools/perf/util/parse-events.h              |   3 +-
 tools/perf/util/parse-events.y              |  16 ++--
 tools/perf/util/probe-event.c               |  32 ++++----
 tools/perf/util/probe-event.h               |   2 +
 tools/perf/util/trace-event.c               |  15 +++-
 21 files changed, 291 insertions(+), 95 deletions(-)
 create mode 100644 tools/include/linux/err.h

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2015-06-17 21:22 Arnaldo Carvalho de Melo
@ 2015-06-18  7:40 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2015-06-18  7:40 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Adrian Hunter, Borislav Petkov, David Ahern,
	Don Zickus, Frederic Weisbecker, He Kuang, Jiri Olsa, Li Zhang,
	Masami Hiramatsu, Namhyung Kim, Naohiro Aota, Peter Zijlstra,
	pi3orama, Stephane Eranian, Sukadev Bhattiprolu, Wang Nan,
	Zefan Li, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling, this is on top of perf-core-for-mingo, that is
> still outstanding,
> 
> Thanks!
> 
> - Arnaldo
> 
> The following changes since commit b031220d520238075bd99513a420e65cf37866ad:
> 
>   perf probe: Fix to return error if no probe is added (2015-06-16 11:39:51 -0300)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-2
> 
> for you to fetch changes up to 5d484f99aed547e235f2229653c95392a1bc3692:
> 
>   perf top: Allow disabling/enabling events dynamicly (2015-06-17 16:50:52 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Allow disabling/enabling events dynamicly in 'perf top':
>   a 'perf top' session can instantly become a 'perf report'
>   one, i.e. going from dynamic analysis to a static one,
>   returning to a dynamic one is possible, to toogle the
>   modes, just press CTRL+z. (Arnaldo Carvalho de Melo)

Nice!! :-)

Btw., it would be nice if the status line carried information about whether 
collection is 'frozen' or running, at a glance. A hint might also suggest how to 
unfreeze the session - in case someone pressed Ctrl-Z to suspend the perf top 
session ...

Also, there's now a GUI inconsistency with perf report: which will now exit on 
Ctrl-Z. It should probably print a warning in the status line instead, that 
freezing/unfreezing only works in 'perf top'.

> 
> - Greatly speed up 'perf probe --list' by caching debuginfo
>   (Masami Hiramatsu)
> 
> - Fix 'perf trace' race condition at the end of started
>   workloads (Sukadev Bhattiprolu)
> 
> - Fix a problem when opening old perf.data with different
>   byte order (Wang Nan)
> 
> Infrastructure:
> 
> - Ignore .config-detected in .gitignore (Wang Nan)
> 
> - Move libtraceevent dynamic list to separated LDFLAGS
>   variable (Wang Nan)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (2):
>       perf evlist: Add toggle_enable() method
>       perf top: Allow disabling/enabling events dynamicly
> 
> Masami Hiramatsu (2):
>       perf probe: Show usage even if the last event is skipped
>       perf probe: Speed up perf probe --list by caching debuginfo
> 
> Sukadev Bhattiprolu (1):
>       perf trace: Fix race condition at the end of started workloads
> 
> Wang Nan (3):
>       perf tools: Ignore .config-detected in .gitignore
>       perf tools: Fix a problem when opening old perf.data with different byte order
>       perf tools: Move libtraceevent dynamic list to separated LDFLAGS variable
> 
>  tools/perf/.gitignore          |  1 +
>  tools/perf/Makefile.perf       |  8 ++--
>  tools/perf/builtin-top.c       | 52 ++++++++++++++++++--------
>  tools/perf/ui/browsers/hists.c |  2 +
>  tools/perf/util/evlist.c       | 18 ++++++++-
>  tools/perf/util/evlist.h       |  2 +
>  tools/perf/util/probe-event.c  | 83 +++++++++++++++++++++++++++++++-----------
>  tools/perf/util/session.c      | 50 ++++++++++++++++++-------
>  8 files changed, 160 insertions(+), 56 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2015-06-17 21:22 Arnaldo Carvalho de Melo
  2015-06-18  7:40 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2015-06-17 21:22 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Adrian Hunter,
	Borislav Petkov, David Ahern, Don Zickus, Frederic Weisbecker,
	He Kuang, Jiri Olsa, Li Zhang, Masami Hiramatsu, Namhyung Kim,
	Naohiro Aota, Peter Zijlstra, pi3orama, Stephane Eranian,
	Sukadev Bhattiprolu, Wang Nan, Zefan Li,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling, this is on top of perf-core-for-mingo, that is
still outstanding,

Thanks!

- Arnaldo

The following changes since commit b031220d520238075bd99513a420e65cf37866ad:

  perf probe: Fix to return error if no probe is added (2015-06-16 11:39:51 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo-2

for you to fetch changes up to 5d484f99aed547e235f2229653c95392a1bc3692:

  perf top: Allow disabling/enabling events dynamicly (2015-06-17 16:50:52 -0300)

----------------------------------------------------------------
perf/core improvements and fixes:

User visible:

- Allow disabling/enabling events dynamicly in 'perf top':
  a 'perf top' session can instantly become a 'perf report'
  one, i.e. going from dynamic analysis to a static one,
  returning to a dynamic one is possible, to toogle the
  modes, just press CTRL+z. (Arnaldo Carvalho de Melo)

- Greatly speed up 'perf probe --list' by caching debuginfo
  (Masami Hiramatsu)

- Fix 'perf trace' race condition at the end of started
  workloads (Sukadev Bhattiprolu)

- Fix a problem when opening old perf.data with different
  byte order (Wang Nan)

Infrastructure:

- Ignore .config-detected in .gitignore (Wang Nan)

- Move libtraceevent dynamic list to separated LDFLAGS
  variable (Wang Nan)

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (2):
      perf evlist: Add toggle_enable() method
      perf top: Allow disabling/enabling events dynamicly

Masami Hiramatsu (2):
      perf probe: Show usage even if the last event is skipped
      perf probe: Speed up perf probe --list by caching debuginfo

Sukadev Bhattiprolu (1):
      perf trace: Fix race condition at the end of started workloads

Wang Nan (3):
      perf tools: Ignore .config-detected in .gitignore
      perf tools: Fix a problem when opening old perf.data with different byte order
      perf tools: Move libtraceevent dynamic list to separated LDFLAGS variable

 tools/perf/.gitignore          |  1 +
 tools/perf/Makefile.perf       |  8 ++--
 tools/perf/builtin-top.c       | 52 ++++++++++++++++++--------
 tools/perf/ui/browsers/hists.c |  2 +
 tools/perf/util/evlist.c       | 18 ++++++++-
 tools/perf/util/evlist.h       |  2 +
 tools/perf/util/probe-event.c  | 83 +++++++++++++++++++++++++++++++-----------
 tools/perf/util/session.c      | 50 ++++++++++++++++++-------
 8 files changed, 160 insertions(+), 56 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2014-05-19 12:30 Jiri Olsa
@ 2014-05-20  6:37 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2014-05-20  6:37 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Corey Ashford,
	David Ahern, Dongsheng Yang, Frederic Weisbecker, Jean Pihet,
	Masanari Iida, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	Peter Zijlstra, Will Deacon


* Jiri Olsa <jolsa@kernel.org> wrote:

> hi Ingo,
> please consider pulling
> 
> thanks,
> jirka
> 
> 
> The following changes since commit 26f273802b6ed28e059f4359bc7711dffceda022:
> 
>   Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-05-12 17:57:48 +0200)
> 
> are available in the git repository at:
> 
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 97eac381b113932bd7bd4a5c3c68b18e9ff7a2a0:
> 
>   perf tools: Add libdw DWARF post unwind support for ARM (2014-05-16 11:39:29 +0200)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> . Add libdw DWARF post unwind support for ARM (Jean Pihet)
> 
> . Consolidate types.h for ARM and ARM64 (Jean Pihet)
> 
> . Fix possible null pointer dereference in session.c (Masanari Iida)
> 
> . Cleanup, remove unused variables in map_switch_event() (Dongsheng Yang)
> 
> . Remove nr_state_machine_bugs in perf latency (Dongsheng Yang)
> 
> . Remove usage of trace_sched_wakeup(.success) (Peter Zijlstra)
> 
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> 
> ----------------------------------------------------------------
> Dongsheng Yang (2):
>       perf sched: Remove nr_state_machine_bugs in perf latency
>       perf sched: Cleanup, remove unused variables in map_switch_event()
> 
> Jean Pihet (4):
>       perf tools: Consolidate types.h for ARM and ARM64
>       perf tests: Introduce perf_regs_load function on ARM
>       perf tests: Add dwarf unwind test on ARM
>       perf tools: Add libdw DWARF post unwind support for ARM
> 
> Masanari Iida (1):
>       perf session: Fix possible null pointer dereference in session.c
> 
> Peter Zijlstra (1):
>       perf tools: Remove usage of trace_sched_wakeup(.success)
> 
>  tools/perf/Makefile.perf                  |  2 +-
>  tools/perf/arch/arm/Makefile              |  7 ++++
>  tools/perf/arch/arm/include/perf_regs.h   |  7 +++-
>  tools/perf/arch/arm/tests/dwarf-unwind.c  | 60 +++++++++++++++++++++++++++++++
>  tools/perf/arch/arm/tests/regs_load.S     | 58 ++++++++++++++++++++++++++++++
>  tools/perf/arch/arm/util/unwind-libdw.c   | 36 +++++++++++++++++++
>  tools/perf/arch/arm64/include/perf_regs.h |  2 +-
>  tools/perf/builtin-sched.c                | 32 ++++++-----------
>  tools/perf/config/Makefile                |  4 +--
>  tools/perf/tests/builtin-test.c           |  2 +-
>  tools/perf/tests/evsel-tp-sched.c         |  3 --
>  tools/perf/tests/tests.h                  |  2 +-
>  tools/perf/util/session.c                 |  5 +--
>  13 files changed, 187 insertions(+), 33 deletions(-)
>  create mode 100644 tools/perf/arch/arm/tests/dwarf-unwind.c
>  create mode 100644 tools/perf/arch/arm/tests/regs_load.S
>  create mode 100644 tools/perf/arch/arm/util/unwind-libdw.c

Pulled, thanks a lot Jiri!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2014-05-19 12:30 Jiri Olsa
  2014-05-20  6:37 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Jiri Olsa @ 2014-05-19 12:30 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Corey Ashford,
	David Ahern, Dongsheng Yang, Frederic Weisbecker, Jean Pihet,
	Masanari Iida, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	Peter Zijlstra, Will Deacon, Jiri Olsa

hi Ingo,
please consider pulling

thanks,
jirka


The following changes since commit 26f273802b6ed28e059f4359bc7711dffceda022:

  Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf into perf/core (2014-05-12 17:57:48 +0200)

are available in the git repository at:


  git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git tags/perf-core-for-mingo

for you to fetch changes up to 97eac381b113932bd7bd4a5c3c68b18e9ff7a2a0:

  perf tools: Add libdw DWARF post unwind support for ARM (2014-05-16 11:39:29 +0200)

----------------------------------------------------------------
perf/core improvements and fixes:

. Add libdw DWARF post unwind support for ARM (Jean Pihet)

. Consolidate types.h for ARM and ARM64 (Jean Pihet)

. Fix possible null pointer dereference in session.c (Masanari Iida)

. Cleanup, remove unused variables in map_switch_event() (Dongsheng Yang)

. Remove nr_state_machine_bugs in perf latency (Dongsheng Yang)

. Remove usage of trace_sched_wakeup(.success) (Peter Zijlstra)

Signed-off-by: Jiri Olsa <jolsa@kernel.org>

----------------------------------------------------------------
Dongsheng Yang (2):
      perf sched: Remove nr_state_machine_bugs in perf latency
      perf sched: Cleanup, remove unused variables in map_switch_event()

Jean Pihet (4):
      perf tools: Consolidate types.h for ARM and ARM64
      perf tests: Introduce perf_regs_load function on ARM
      perf tests: Add dwarf unwind test on ARM
      perf tools: Add libdw DWARF post unwind support for ARM

Masanari Iida (1):
      perf session: Fix possible null pointer dereference in session.c

Peter Zijlstra (1):
      perf tools: Remove usage of trace_sched_wakeup(.success)

 tools/perf/Makefile.perf                  |  2 +-
 tools/perf/arch/arm/Makefile              |  7 ++++
 tools/perf/arch/arm/include/perf_regs.h   |  7 +++-
 tools/perf/arch/arm/tests/dwarf-unwind.c  | 60 +++++++++++++++++++++++++++++++
 tools/perf/arch/arm/tests/regs_load.S     | 58 ++++++++++++++++++++++++++++++
 tools/perf/arch/arm/util/unwind-libdw.c   | 36 +++++++++++++++++++
 tools/perf/arch/arm64/include/perf_regs.h |  2 +-
 tools/perf/builtin-sched.c                | 32 ++++++-----------
 tools/perf/config/Makefile                |  4 +--
 tools/perf/tests/builtin-test.c           |  2 +-
 tools/perf/tests/evsel-tp-sched.c         |  3 --
 tools/perf/tests/tests.h                  |  2 +-
 tools/perf/util/session.c                 |  5 +--
 13 files changed, 187 insertions(+), 33 deletions(-)
 create mode 100644 tools/perf/arch/arm/tests/dwarf-unwind.c
 create mode 100644 tools/perf/arch/arm/tests/regs_load.S
 create mode 100644 tools/perf/arch/arm/util/unwind-libdw.c

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [GIT PULL 0/8] perf/core improvements and fixes
  2012-09-06 19:31 Arnaldo Carvalho de Melo
@ 2012-09-07  5:39 ` Ingo Molnar
  0 siblings, 0 replies; 38+ messages in thread
From: Ingo Molnar @ 2012-09-07  5:39 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, Corey Ashford, David Ahern, Frederic Weisbecker,
	Ingo Molnar, Jiri Olsa, Joel Uckelman, Mike Galbraith,
	Namhyung Kim, Namhyung Kim, Paul Mackerras, Peter Zijlstra,
	Stephane Eranian, Steven Rostedt, Arnaldo Carvalho de Melo


* Arnaldo Carvalho de Melo <acme@infradead.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit 7a4ec938857cf534270b23545495300fbac7f5de:
> 
>   perf tools: Allow user to indicate path to objdump in command line (2012-09-05 19:41:55 -0300)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo
> 
> for you to fetch changes up to 275ef3878f698941353780440fec6926107a320b:
> 
>   perf tools: Fix cache event name generation (2012-09-06 15:01:08 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes
> 
> . Fix hardware cache event name generation, fix from Jiri Olsa
> 
> . Add round trip test for sw, hw and cache event names, catching the
>   problem Jiri fixed, after Jiri's patch, the test passes successfully.
> 
> . Clean target should do clean for lib/traceevent too, fix from David Ahern
> 
> . Check the right variable for allocation failure, fix from Namhyung Kim
> 
> . Set up evsel->tp_format regardless of evsel->name being set already,
>   fix from Namhyung Kim
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (4):
>       perf test: Add round trip test for sw and hw event names
>       perf tools: Remove extraneous newline when parsing hardware cache events
>       perf evlist: Add fprintf method
>       perf test: Add roundtrip test for hardware cache events
> 
> David Ahern (1):
>       perf tools: Clean target should do clean for lib/traceevent too
> 
> Jiri Olsa (1):
>       perf tools: Fix cache event name generation
> 
> Namhyung Kim (2):
>       perf header: Fix a typo on evsel
>       perf header: Prepare tracepoint events regardless of name
> 
>  tools/perf/Makefile            |    5 +-
>  tools/perf/builtin-test.c      |  114 ++++++++++++++++++++++++++++++++++++++++
>  tools/perf/util/evlist.c       |   13 +++++
>  tools/perf/util/evlist.h       |    2 +
>  tools/perf/util/evsel.c        |    6 +--
>  tools/perf/util/evsel.h        |    6 ++-
>  tools/perf/util/header.c       |   36 ++++++++-----
>  tools/perf/util/parse-events.c |    2 +-
>  8 files changed, 163 insertions(+), 21 deletions(-)

Pulled, thanks a lot Arnaldo!

	Ingo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [GIT PULL 0/8] perf/core improvements and fixes
@ 2012-09-06 19:31 Arnaldo Carvalho de Melo
  2012-09-07  5:39 ` Ingo Molnar
  0 siblings, 1 reply; 38+ messages in thread
From: Arnaldo Carvalho de Melo @ 2012-09-06 19:31 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Arnaldo Carvalho de Melo, Corey Ashford,
	David Ahern, Frederic Weisbecker, Ingo Molnar, Jiri Olsa,
	Joel Uckelman, Mike Galbraith, Namhyung Kim, Namhyung Kim,
	Paul Mackerras, Peter Zijlstra, Stephane Eranian, Steven Rostedt,
	Arnaldo Carvalho de Melo

Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit 7a4ec938857cf534270b23545495300fbac7f5de:

  perf tools: Allow user to indicate path to objdump in command line (2012-09-05 19:41:55 -0300)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux tags/perf-core-for-mingo

for you to fetch changes up to 275ef3878f698941353780440fec6926107a320b:

  perf tools: Fix cache event name generation (2012-09-06 15:01:08 -0300)

----------------------------------------------------------------
perf/core improvements and fixes

. Fix hardware cache event name generation, fix from Jiri Olsa

. Add round trip test for sw, hw and cache event names, catching the
  problem Jiri fixed, after Jiri's patch, the test passes successfully.

. Clean target should do clean for lib/traceevent too, fix from David Ahern

. Check the right variable for allocation failure, fix from Namhyung Kim

. Set up evsel->tp_format regardless of evsel->name being set already,
  fix from Namhyung Kim

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Arnaldo Carvalho de Melo (4):
      perf test: Add round trip test for sw and hw event names
      perf tools: Remove extraneous newline when parsing hardware cache events
      perf evlist: Add fprintf method
      perf test: Add roundtrip test for hardware cache events

David Ahern (1):
      perf tools: Clean target should do clean for lib/traceevent too

Jiri Olsa (1):
      perf tools: Fix cache event name generation

Namhyung Kim (2):
      perf header: Fix a typo on evsel
      perf header: Prepare tracepoint events regardless of name

 tools/perf/Makefile            |    5 +-
 tools/perf/builtin-test.c      |  114 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/evlist.c       |   13 +++++
 tools/perf/util/evlist.h       |    2 +
 tools/perf/util/evsel.c        |    6 +--
 tools/perf/util/evsel.h        |    6 ++-
 tools/perf/util/header.c       |   36 ++++++++-----
 tools/perf/util/parse-events.c |    2 +-
 8 files changed, 163 insertions(+), 21 deletions(-)

^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2018-03-29  7:23 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-01 19:50 [GIT PULL 0/8] perf/core improvements and fixes Arnaldo Carvalho de Melo
2014-10-01 19:50 ` Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 1/8] perf tools: Refactor unit and scale function parameters Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 2/8] perf trace: Fix mmap return address truncation to 32-bit Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 3/8] perf bench futex: Support operations for shared futexes Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 4/8] perf bench futex: Sanitize -q option in requeue Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 5/8] perf symbols: Encapsulate dsos list head into struct dsos Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 6/8] perf symbols: Improve DSO long names lookup speed with rbtree Arnaldo Carvalho de Melo
2014-10-14  9:09   ` Jiri Olsa
2014-10-14 17:34     ` Arnaldo Carvalho de Melo
2014-10-14 18:03       ` Arnaldo Carvalho de Melo
2014-10-15 10:05         ` [tip:perf/urgent] perf machine: Add missing dsos-> root rbtree root initialization tip-bot for Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 7/8] perf tools: Fix build breakage on arm64 targets Arnaldo Carvalho de Melo
2014-10-01 19:50   ` Arnaldo Carvalho de Melo
2014-10-01 19:50 ` [PATCH 8/8] perf record: Fix error message for --filter option not coming after tracepoint Arnaldo Carvalho de Melo
2014-10-03  3:31 ` [GIT PULL 0/8] perf/core improvements and fixes Ingo Molnar
2014-10-03  3:31   ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2018-03-28 18:49 Arnaldo Carvalho de Melo
2018-03-29  7:23 ` Ingo Molnar
2017-10-03 12:55 Arnaldo Carvalho de Melo
2017-10-03 16:38 ` Ingo Molnar
2016-01-15 21:40 Arnaldo Carvalho de Melo
2016-01-19  7:32 ` Ingo Molnar
2015-10-29 23:05 Arnaldo Carvalho de Melo
2015-10-30  9:10 ` Ingo Molnar
2015-10-22 22:14 Arnaldo Carvalho de Melo
2015-10-23  8:28 ` Ingo Molnar
2015-10-13 19:41 Arnaldo Carvalho de Melo
2015-10-14 13:09 ` Ingo Molnar
2015-09-15 15:28 Arnaldo Carvalho de Melo
2015-09-16  7:25 ` Ingo Molnar
2015-09-16 13:50   ` Arnaldo Carvalho de Melo
2015-06-17 21:22 Arnaldo Carvalho de Melo
2015-06-18  7:40 ` Ingo Molnar
2014-05-19 12:30 Jiri Olsa
2014-05-20  6:37 ` Ingo Molnar
2012-09-06 19:31 Arnaldo Carvalho de Melo
2012-09-07  5:39 ` Ingo Molnar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.