Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1238584 > unrolled thread
| Started by | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| First post | 2015-10-02 22:30 +0200 |
| Last post | 2015-10-03 08:40 +0200 |
| Articles | 9 — 2 participants |
Back to article view | Back to linux.kernel
[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
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2015-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]
| From | Ingo Molnar <mingo@kernel.org> |
|---|---|
| Date | 2015-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