Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1238584 > unrolled thread

[GIT PULL 00/10] perf/cover improvements and fixes

Started byArnaldo Carvalho de Melo <acme@kernel.org>
First post2015-10-02 22:30 +0200
Last post2015-10-03 08:40 +0200
Articles 9 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [GIT PULL 00/10] perf/cover improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 09/10] perf record: Change 'record.samples' type to unsigned long long Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 05/10] perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 03/10] perf top: Register idle thread Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 01/10] perf record: Allocate area for sample_id_hdr in a synthesized comm event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 02/10] perf top: Fix unresolved comm when -s comm is used Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 06/10] perf list: Do event name substring search as last resort when no events found Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    [PATCH 08/10] perf probe: Allow probing on kmodules without dwarf Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-02 22:30 +0200
    Re: [GIT PULL 00/10] perf/cover improvements and fixes Ingo Molnar <mingo@kernel.org> - 2015-10-03 08:40 +0200

#1238584 — [GIT PULL 00/10] perf/cover improvements and fixes

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[GIT PULL 00/10] perf/cover improvements and fixes
Message-ID<qff7P-5Cf-5@gated-at.bofh.it>
Hi Ingo,

	Please consider pulling,

- Arnaldo

The following changes since commit c2365b9388e8ec19305e3f449c1826e7493d156d:

  perf/x86/intel/uncore: Do not use macro DEFINE_PCI_DEVICE_TABLE() (2015-10-01 10:53:03 +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 19afd10410957b1c808c2c49a88e6dd8b23aa894:

  perf stat: Reduce min --interval-print to 10ms (2015-10-02 17:07:55 -0300)

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

User visible:

- Do event name substring search as last resort in 'perf list'.
  (Arnaldo Carvalho de Melo)

  E.g.:

   # perf list clock

   List of pre-defined events (to be used in -e):

     cpu-clock                                          [Software event]
     task-clock                                         [Software event]

     uncore_cbox_0/clockticks/                          [Kernel PMU event]
     uncore_cbox_1/clockticks/                          [Kernel PMU event]

     kvm:kvm_pvclock_update                             [Tracepoint event]
     kvm:kvm_update_master_clock                        [Tracepoint event]
     power:clock_disable                                [Tracepoint event]
     power:clock_enable                                 [Tracepoint event]
     power:clock_set_rate                               [Tracepoint event]
     syscalls:sys_enter_clock_adjtime                   [Tracepoint event]
     syscalls:sys_enter_clock_getres                    [Tracepoint event]
     syscalls:sys_enter_clock_gettime                   [Tracepoint event]
     syscalls:sys_enter_clock_nanosleep                 [Tracepoint event]
     syscalls:sys_enter_clock_settime                   [Tracepoint event]
     syscalls:sys_exit_clock_adjtime                    [Tracepoint event]
     syscalls:sys_exit_clock_getres                     [Tracepoint event]
     syscalls:sys_exit_clock_gettime                    [Tracepoint event]
     syscalls:sys_exit_clock_nanosleep                  [Tracepoint event]
     syscalls:sys_exit_clock_settime                    [Tracepoint event]

- Reduce min 'perf stat --interval-print/-I' to 10ms (Kan Liang)

  perf stat --interval in action:

  # perf stat -e cycles -I 50 -a usleep $((200 * 1000))
  print interval < 100ms. The overhead percentage could be high in some cases. Please proceed with caution.
  #   time                    counts unit events
      0.050233636         48,240,396      cycles
      0.100557098         35,492,594      cycles
      0.150804687         39,295,112      cycles
      0.201032269         33,101,961      cycles
      0.201980732            786,379      cycles
  #

- Allow for max_stack greater than PERF_MAX_STACK_DEPTH, as when
  synthesizing callchains from Intel PT data (Adrian Hunter)

- Allow probing on kmodules without DWARF (Masami Hiramatsu)

- Fix a segfault when processing a perf.data file with callchains using
  "perf report --call-graph none" (Namhyung Kim)

- Fix unresolved COMMs in 'perf top' when -s comm is used (Namhyung Kim)

- Register idle thread in 'perf top' (Namhyung Kim)

- Change 'record.samples' type to unsigned long long, fixing output of
  number of samples in 32-bit architectures (Yang Shi)

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

----------------------------------------------------------------
Adrian Hunter (1):
      perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH

Arnaldo Carvalho de Melo (2):
      perf list: Do event name substring search as last resort when no events found
      perf list: Honour 'event_glob' whem printing selectable PMUs

Kan Liang (1):
      perf stat: Reduce min --interval-print to 10ms

Masami Hiramatsu (1):
      perf probe: Allow probing on kmodules without dwarf

Namhyung Kim (4):
      perf record: Allocate area for sample_id_hdr in a synthesized comm event
      perf top: Fix unresolved comm when -s comm is used
      perf top: Register idle thread
      perf report: Fix a bug on "--call-graph none" option

Yang Shi (1):
      perf record: Change 'record.samples' type to unsigned long long

 tools/perf/Documentation/perf-list.txt |  2 ++
 tools/perf/Documentation/perf-stat.txt |  5 +++--
 tools/perf/builtin-list.c              | 18 ++++++++++++++++--
 tools/perf/builtin-probe.c             |  8 +++-----
 tools/perf/builtin-record.c            | 16 ++++++++++++----
 tools/perf/builtin-stat.c              | 13 +++++++++----
 tools/perf/builtin-top.c               | 10 ++++++++--
 tools/perf/util/hist.c                 |  2 +-
 tools/perf/util/machine.c              |  2 +-
 tools/perf/util/pmu.c                  |  3 ++-
 tools/perf/util/probe-event.c          |  8 +++++---
 tools/perf/util/session.c              |  2 +-
 tools/perf/util/session.h              |  2 ++
 13 files changed, 65 insertions(+), 26 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1238585 — [PATCH 09/10] perf record: Change 'record.samples' type to unsigned long long

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 09/10] perf record: Change 'record.samples' type to unsigned long long
Message-ID<qff7Q-5Cf-11@gated-at.bofh.it>
In reply to#1238584
From: Yang Shi <yang.shi@linaro.org>

When run "perf record -e", the number of samples showed up is wrong on some
32 bit systems, i.e. powerpc and arm.

For example, run the below commands on 32 bit powerpc:

  perf probe -x /lib/libc.so.6 malloc
  perf record -e probe_libc:malloc -a ls perf.data
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.036 MB perf.data (13829241621624967218 samples) ]

Actually, "perf script" just shows 21 samples. The number of samples is also
absurd since samples is long type, but it is printed as PRIu64.

Build test ran on x86-64, x86, aarch64, arm, mips, ppc and ppc64.

Signed-off-by: Yang Shi <yang.shi@linaro.org>
Cc: linaro-kernel@lists.linaro.org
Link: http://lkml.kernel.org/r/1443563383-4064-1-git-send-email-yang.shi@linaro.org
[ Bumped the 'hits' var used together with record.samples to 'unsigned long long' too ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-record.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 5e01c070dbf2..24ace2f318c1 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -49,7 +49,7 @@ struct record {
 	int			realtime_prio;
 	bool			no_buildid;
 	bool			no_buildid_cache;
-	long			samples;
+	unsigned long long	samples;
 };
 
 static int record__write(struct record *rec, void *bf, size_t size)
@@ -667,7 +667,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 
 	auxtrace_snapshot_enabled = 1;
 	for (;;) {
-		int hits = rec->samples;
+		unsigned long long hits = rec->samples;
 
 		if (record__mmap_read_all(rec) < 0) {
 			auxtrace_snapshot_enabled = 0;
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238588 — [PATCH 05/10] perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 05/10] perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH
Message-ID<qff7Q-5Cf-21@gated-at.bofh.it>
In reply to#1238584
From: Adrian Hunter <adrian.hunter@intel.com>

Adjust the validation to allow for max_stack greater than
PERF_MAX_STACK_DEPTH.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lkml.kernel.org/r/1443186956-18718-18-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/machine.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 76fe167c359e..5ef90be2a249 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1831,7 +1831,7 @@ static int thread__resolve_callchain_sample(struct thread *thread,
 	}
 
 check_calls:
-	if (chain->nr > PERF_MAX_STACK_DEPTH) {
+	if (chain->nr > PERF_MAX_STACK_DEPTH && (int)chain->nr > max_stack) {
 		pr_warning("corrupted callchain. skipping...\n");
 		return 0;
 	}
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238589 — [PATCH 03/10] perf top: Register idle thread

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 03/10] perf top: Register idle thread
Message-ID<qff7Q-5Cf-23@gated-at.bofh.it>
In reply to#1238584
From: Namhyung Kim <namhyung@kernel.org>

The perf top didn't add the idle/swapper thread to the machine's thread
list and its comm was displayed as ':0'.  Fix it.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1443577526-3240-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-top.c  | 3 +++
 tools/perf/util/session.c | 2 +-
 tools/perf/util/session.h | 2 ++
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index ae4c6420300b..6f641fd68296 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -964,6 +964,9 @@ static int __cmd_top(struct perf_top *top)
 	if (ret)
 		goto out_delete;
 
+	if (perf_session__register_idle_thread(top->session) == NULL)
+		goto out_delete;
+
 	machine__synthesize_threads(&top->session->machines.host, &opts->target,
 				    top->evlist->threads, false, opts->proc_map_timeout);
 
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 84a02eae4394..428149bc64d2 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1311,7 +1311,7 @@ struct thread *perf_session__findnew(struct perf_session *session, pid_t pid)
 	return machine__findnew_thread(&session->machines.host, -1, pid);
 }
 
-static struct thread *perf_session__register_idle_thread(struct perf_session *session)
+struct thread *perf_session__register_idle_thread(struct perf_session *session)
 {
 	struct thread *thread;
 
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index b44afc75d1cc..3e900c0efc73 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -89,6 +89,8 @@ struct machine *perf_session__findnew_machine(struct perf_session *session, pid_
 }
 
 struct thread *perf_session__findnew(struct perf_session *session, pid_t pid);
+struct thread *perf_session__register_idle_thread(struct perf_session *session);
+
 size_t perf_session__fprintf(struct perf_session *session, FILE *fp);
 
 size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp);
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238591 — [PATCH 01/10] perf record: Allocate area for sample_id_hdr in a synthesized comm event

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 01/10] perf record: Allocate area for sample_id_hdr in a synthesized comm event
Message-ID<qff7R-5Cf-27@gated-at.bofh.it>
In reply to#1238584
From: Namhyung Kim <namhyung@kernel.org>

A previous patch added a synthesized comm event for forked child process
but it missed that the event should contain area for sample_id_hdr at
the end.  It worked by accident since the perf_event union contains
bigger event structs like mmap_events.

This patch fixes it by dynamically allocating event struct including
those area like in perf_event__synthesize_thread_map().

Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1443577526-3240-1-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-record.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index a01c8ae1ee07..5e01c070dbf2 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -637,17 +637,25 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
 	 * Let the child rip
 	 */
 	if (forks) {
-		union perf_event event;
+		union perf_event *event;
+
+		event = malloc(sizeof(event->comm) + machine->id_hdr_size);
+		if (event == NULL) {
+			err = -ENOMEM;
+			goto out_child;
+		}
+
 		/*
 		 * Some H/W events are generated before COMM event
 		 * which is emitted during exec(), so perf script
 		 * cannot see a correct process name for those events.
 		 * Synthesize COMM event to prevent it.
 		 */
-		perf_event__synthesize_comm(tool, &event,
+		perf_event__synthesize_comm(tool, event,
 					    rec->evlist->workload.pid,
 					    process_synthesized_event,
 					    machine);
+		free(event);
 
 		perf_evlist__start_workload(rec->evlist);
 	}
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238593 — [PATCH 02/10] perf top: Fix unresolved comm when -s comm is used

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 02/10] perf top: Fix unresolved comm when -s comm is used
Message-ID<qff7R-5Cf-29@gated-at.bofh.it>
In reply to#1238584
From: Namhyung Kim <namhyung@kernel.org>

The perf top uses 'dso,symbol' sort keys by default so it overlooked a
problem in task's comm resolving.  When the sort key contains 'comm',
some task's comm is not shown properly.  This is because the
perf_top__mmap_read_idx() checks the cpumode value improperly.

The cpumode value of non-sample events are 0 (PERF_RECORD_MISC_CPUMODE_
UNKNOWN) so the events will be ignored by the switch statement.  This patch
allows it for non-sample events.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1443577526-3240-2-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-top.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 38d4d6cac823..ae4c6420300b 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -857,9 +857,12 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
 			 * TODO: we don't process guest user from host side
 			 * except simple counting.
 			 */
-			/* Fall thru */
-		default:
 			goto next_event;
+		default:
+			if (event->header.type == PERF_RECORD_SAMPLE)
+				goto next_event;
+			machine = &session->machines.host;
+			break;
 		}
 
 
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238594 — [PATCH 06/10] perf list: Do event name substring search as last resort when no events found

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 06/10] perf list: Do event name substring search as last resort when no events found
Message-ID<qff7R-5Cf-35@gated-at.bofh.it>
In reply to#1238584
From: Arnaldo Carvalho de Melo <acme@redhat.com>

Before:

  # perf list _alloc_ | head -10
  #

After:

  # perf list _alloc_ | head -10
    ext4:ext4_alloc_da_blocks                          [Tracepoint event]
    ext4:ext4_get_implied_cluster_alloc_exit           [Tracepoint event]
    kmem:kmem_cache_alloc_node                         [Tracepoint event]
    kmem:mm_page_alloc_extfrag                         [Tracepoint event]
    kmem:mm_page_alloc_zone_locked                     [Tracepoint event]
    xen:xen_mmu_alloc_ptpage                           [Tracepoint event]
  #

And it works for all types of events:

  # perf list br

  List of pre-defined events (to be used in -e):

    branch-instructions OR branches                    [Hardware event]
    branch-misses                                      [Hardware event]

    branch-load-misses                                 [Hardware cache event]
    branch-loads                                       [Hardware cache event]

    branch-instructions OR cpu/branch-instructions/    [Kernel PMU event]
    branch-misses OR cpu/branch-misses/                [Kernel PMU event]

    filelock:break_lease_block                         [Tracepoint event]
    filelock:break_lease_noblock                       [Tracepoint event]
    filelock:break_lease_unblock                       [Tracepoint event]
    syscalls:sys_enter_brk                             [Tracepoint event]
    syscalls:sys_exit_brk                              [Tracepoint event]

  #

Suggested-by: Ingo Molnar <mingo@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-qieivl18jdemoaghgndj36e6@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Documentation/perf-list.txt |  2 ++
 tools/perf/builtin-list.c              | 18 ++++++++++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
index bada8933fdd4..ad60c6ea1997 100644
--- a/tools/perf/Documentation/perf-list.txt
+++ b/tools/perf/Documentation/perf-list.txt
@@ -125,6 +125,8 @@ To limit the list use:
 . If none of the above is matched, it will apply the supplied glob to all
   events, printing the ones that match.
 
+. As a last resort, it will do a substring search in all event names.
+
 One or more types can be used at the same time, listing the events for the
 types specified.
 
diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
index 602414040344..bf679e2c978b 100644
--- a/tools/perf/builtin-list.c
+++ b/tools/perf/builtin-list.c
@@ -45,6 +45,8 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 	}
 
 	for (i = 0; i < argc; ++i) {
+		char *sep, *s;
+
 		if (strcmp(argv[i], "tracepoint") == 0)
 			print_tracepoint_events(NULL, NULL, raw_dump);
 		else if (strcmp(argv[i], "hw") == 0 ||
@@ -60,8 +62,7 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			print_hwcache_events(NULL, raw_dump);
 		else if (strcmp(argv[i], "pmu") == 0)
 			print_pmu_events(NULL, raw_dump);
-		else {
-			char *sep = strchr(argv[i], ':'), *s;
+		else if ((sep = strchr(argv[i], ':')) != NULL) {
 			int sep_idx;
 
 			if (sep == NULL) {
@@ -76,6 +77,19 @@ int cmd_list(int argc, const char **argv, const char *prefix __maybe_unused)
 			s[sep_idx] = '\0';
 			print_tracepoint_events(s, s + sep_idx + 1, raw_dump);
 			free(s);
+		} else {
+			if (asprintf(&s, "*%s*", argv[i]) < 0) {
+				printf("Critical: Not enough memory! Trying to continue...\n");
+				continue;
+			}
+			print_symbol_events(s, PERF_TYPE_HARDWARE,
+					    event_symbols_hw, PERF_COUNT_HW_MAX, raw_dump);
+			print_symbol_events(s, PERF_TYPE_SOFTWARE,
+					    event_symbols_sw, PERF_COUNT_SW_MAX, raw_dump);
+			print_hwcache_events(s, raw_dump);
+			print_pmu_events(s, raw_dump);
+			print_tracepoint_events(NULL, s, raw_dump);
+			free(s);
 		}
 	}
 	return 0;
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238595 — [PATCH 08/10] perf probe: Allow probing on kmodules without dwarf

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-10-02 22:30 +0200
Subject[PATCH 08/10] perf probe: Allow probing on kmodules without dwarf
Message-ID<qff7R-5Cf-39@gated-at.bofh.it>
In reply to#1238584
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>

Allow probing on kernel modules when 'perf' is built without debuginfo
support.

Currently perf-probe --module requires linking with libdw, but this
doesn't make sense.

E.g.
  ----
  # make NO_DWARF=1
  # ./perf probe -m pcspkr pcspkr_event%return
    Error: unknown switch `m'
  ----

With this patch
  ----
  # ./perf probe -m pcspkr pcspkr_event%return
  Added new event:
    probe:pcspkr_event   (on pcspkr_event%return in pcspkr)

  You can now use it in all perf tools, such as:

          perf record -e probe:pcspkr_event -aR sleep 1
  ----

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/20151002125832.18617.78721.stgit@localhost.localdomain
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-probe.c    | 8 +++-----
 tools/perf/util/probe-event.c | 8 +++++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
index f7882ae9ebc6..530c3a28a58c 100644
--- a/tools/perf/builtin-probe.c
+++ b/tools/perf/builtin-probe.c
@@ -182,10 +182,8 @@ static int opt_set_target(const struct option *opt, const char *str,
 	if  (str) {
 		if (!strcmp(opt->long_name, "exec"))
 			params.uprobes = true;
-#ifdef HAVE_DWARF_SUPPORT
 		else if (!strcmp(opt->long_name, "module"))
 			params.uprobes = false;
-#endif
 		else
 			return ret;
 
@@ -490,9 +488,6 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
 		   "file", "vmlinux pathname"),
 	OPT_STRING('s', "source", &symbol_conf.source_prefix,
 		   "directory", "path to kernel source"),
-	OPT_CALLBACK('m', "module", NULL, "modname|path",
-		"target module name (for online) or path (for offline)",
-		opt_set_target),
 	OPT_BOOLEAN('\0', "no-inlines", &probe_conf.no_inlines,
 		"Don't search inlined functions"),
 #endif
@@ -509,6 +504,9 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
 		     opt_set_filter),
 	OPT_CALLBACK('x', "exec", NULL, "executable|path",
 			"target executable name or path", opt_set_target),
+	OPT_CALLBACK('m', "module", NULL, "modname|path",
+		"target module name (for online) or path (for offline)",
+		opt_set_target),
 	OPT_BOOLEAN(0, "demangle", &symbol_conf.demangle,
 		    "Enable symbol demangling"),
 	OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel,
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 3010abc071ff..b51a8bfb40f9 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2543,7 +2543,8 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 		goto out;
 	}
 
-	if (!pev->uprobes && !pp->retprobe) {
+	/* Note that the symbols in the kmodule are not relocated */
+	if (!pev->uprobes && !pp->retprobe && !pev->target) {
 		reloc_sym = kernel_get_ref_reloc_sym();
 		if (!reloc_sym) {
 			pr_warning("Relocated base symbol is not found!\n");
@@ -2580,8 +2581,9 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 		}
 		/* Add one probe point */
 		tp->address = map->unmap_ip(map, sym->start) + pp->offset;
-		/* If we found a wrong one, mark it by NULL symbol */
-		if (!pev->uprobes &&
+
+		/* Check the kprobe (not in module) is within .text  */
+		if (!pev->uprobes && !pev->target &&
 		    kprobe_warn_out_range(sym->name, tp->address)) {
 			tp->symbol = NULL;	/* Skip it */
 			skipped++;
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1238742

FromIngo Molnar <mingo@kernel.org>
Date2015-10-03 08:40 +0200
Message-ID<qfoEa-2jr-1@gated-at.bofh.it>
In reply to#1238584
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling,
> 
> - Arnaldo
> 
> The following changes since commit c2365b9388e8ec19305e3f449c1826e7493d156d:
> 
>   perf/x86/intel/uncore: Do not use macro DEFINE_PCI_DEVICE_TABLE() (2015-10-01 10:53:03 +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 19afd10410957b1c808c2c49a88e6dd8b23aa894:
> 
>   perf stat: Reduce min --interval-print to 10ms (2015-10-02 17:07:55 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Do event name substring search as last resort in 'perf list'.
>   (Arnaldo Carvalho de Melo)
> 
>   E.g.:
> 
>    # perf list clock
> 
>    List of pre-defined events (to be used in -e):
> 
>      cpu-clock                                          [Software event]
>      task-clock                                         [Software event]
> 
>      uncore_cbox_0/clockticks/                          [Kernel PMU event]
>      uncore_cbox_1/clockticks/                          [Kernel PMU event]
> 
>      kvm:kvm_pvclock_update                             [Tracepoint event]
>      kvm:kvm_update_master_clock                        [Tracepoint event]
>      power:clock_disable                                [Tracepoint event]
>      power:clock_enable                                 [Tracepoint event]
>      power:clock_set_rate                               [Tracepoint event]
>      syscalls:sys_enter_clock_adjtime                   [Tracepoint event]
>      syscalls:sys_enter_clock_getres                    [Tracepoint event]
>      syscalls:sys_enter_clock_gettime                   [Tracepoint event]
>      syscalls:sys_enter_clock_nanosleep                 [Tracepoint event]
>      syscalls:sys_enter_clock_settime                   [Tracepoint event]
>      syscalls:sys_exit_clock_adjtime                    [Tracepoint event]
>      syscalls:sys_exit_clock_getres                     [Tracepoint event]
>      syscalls:sys_exit_clock_gettime                    [Tracepoint event]
>      syscalls:sys_exit_clock_nanosleep                  [Tracepoint event]
>      syscalls:sys_exit_clock_settime                    [Tracepoint event]
> 
> - Reduce min 'perf stat --interval-print/-I' to 10ms (Kan Liang)
> 
>   perf stat --interval in action:
> 
>   # perf stat -e cycles -I 50 -a usleep $((200 * 1000))
>   print interval < 100ms. The overhead percentage could be high in some cases. Please proceed with caution.
>   #   time                    counts unit events
>       0.050233636         48,240,396      cycles
>       0.100557098         35,492,594      cycles
>       0.150804687         39,295,112      cycles
>       0.201032269         33,101,961      cycles
>       0.201980732            786,379      cycles
>   #
> 
> - Allow for max_stack greater than PERF_MAX_STACK_DEPTH, as when
>   synthesizing callchains from Intel PT data (Adrian Hunter)
> 
> - Allow probing on kmodules without DWARF (Masami Hiramatsu)
> 
> - Fix a segfault when processing a perf.data file with callchains using
>   "perf report --call-graph none" (Namhyung Kim)
> 
> - Fix unresolved COMMs in 'perf top' when -s comm is used (Namhyung Kim)
> 
> - Register idle thread in 'perf top' (Namhyung Kim)
> 
> - Change 'record.samples' type to unsigned long long, fixing output of
>   number of samples in 32-bit architectures (Yang Shi)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Adrian Hunter (1):
>       perf callchain: Allow for max_stack greater than PERF_MAX_STACK_DEPTH
> 
> Arnaldo Carvalho de Melo (2):
>       perf list: Do event name substring search as last resort when no events found
>       perf list: Honour 'event_glob' whem printing selectable PMUs
> 
> Kan Liang (1):
>       perf stat: Reduce min --interval-print to 10ms
> 
> Masami Hiramatsu (1):
>       perf probe: Allow probing on kmodules without dwarf
> 
> Namhyung Kim (4):
>       perf record: Allocate area for sample_id_hdr in a synthesized comm event
>       perf top: Fix unresolved comm when -s comm is used
>       perf top: Register idle thread
>       perf report: Fix a bug on "--call-graph none" option
> 
> Yang Shi (1):
>       perf record: Change 'record.samples' type to unsigned long long
> 
>  tools/perf/Documentation/perf-list.txt |  2 ++
>  tools/perf/Documentation/perf-stat.txt |  5 +++--
>  tools/perf/builtin-list.c              | 18 ++++++++++++++++--
>  tools/perf/builtin-probe.c             |  8 +++-----
>  tools/perf/builtin-record.c            | 16 ++++++++++++----
>  tools/perf/builtin-stat.c              | 13 +++++++++----
>  tools/perf/builtin-top.c               | 10 ++++++++--
>  tools/perf/util/hist.c                 |  2 +-
>  tools/perf/util/machine.c              |  2 +-
>  tools/perf/util/pmu.c                  |  3 ++-
>  tools/perf/util/probe-event.c          |  8 +++++---
>  tools/perf/util/session.c              |  2 +-
>  tools/perf/util/session.h              |  2 ++
>  13 files changed, 65 insertions(+), 26 deletions(-)

Pulled, thanks a lot Arnaldo!

Btw., incidentally I noticed an UI detail: in the 'perf report' and 'perf top' 
TUI, PageUp does not move the cursor to the topmost line, it stays at whatever 
partial page position it is.

I think it would be better to behave here like good editors do: PageUp in the 
first partial page moves to the first line (like 'Home') - and PageDown on the 
last page of output moves to the last line (like 'End').

Btw., even popular TUI editors get this wrong sometimes:

 - 'nano' (joe clone, popular mail editor) gets this right in both directions.

 - 'vim' behaves this way on PageDown, but not on PageUp. Nor does it recognize
   Home/End, only Ctrl-Home/End works.

 - 'emacs (e3 package) gets the PageUp/PageDown behavior right, but no Home/End 
   key combo works (and exiting the editor is painful as well ;-)

Thanks,

	Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web