Re: [PATCH V4 18/24] perf tools: Add Intel BTS support
From: Arnaldo Carvalho de Melo
Date: Wed May 06 2015 - 12:21:25 EST
Em Wed, May 06, 2015 at 10:14:36AM +0300, Adrian Hunter escreveu:
> On 06/05/15 00:09, Arnaldo Carvalho de Melo wrote:
> > Em Tue, May 05, 2015 at 04:51:41PM -0300, Arnaldo Carvalho de Melo escreveu:
> >> c3278f0231e8 perf auxtrace: Add a hashtable for caching
> >> 73f75fb1bdc5 perf auxtrace: Add processing for AUX area tracing events
> >> [acme@ssdandy linux]$
> >> Will try processing these BTS first, i.e. do the reorder here,
> > Not that easy...
> I am not sure what can be done.
> Any version of perf will accept a PMU event, so users can select
> intel_bts or intel_pt even though the tools have no support :-(
> For example, a v4.0 perf with no auxtrace/intel_bs/intel_pt support
> but with a kernel that does support intel_bts or intel_pt
> gives:
> $ tools/perf/perf record -e intel_bts//u ls
> arch COPYING crypto drivers fs init Kbuild kernel MAINTAINERS mm perf.data README samples security tools virt
> block CREDITS Documentation firmware include ipc Kconfig lib Makefile net perf.data.old REPORTING-BUGS scripts sound usr
> [ perf record: Woken up 1 times to write data ]
> 0x1f00 [0x20]: failed to process type: 12
> Warning:
> Found 1 unknown events!
>
> Is this an older tool processing a perf.data file generated by a more recent tool?
Well, it is the tip/perf/core tool, that at the time was my
acme/perf/core branch.
I.e. if I try to follow the example, it will "work" and will
run, but no samples will be produced:
[root@ssdandy ~]# perf record -a -e intel_bts//u sleep 2
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.184 MB perf.data ]
[root@ssdandy ~]# perf evlist -v
intel_bts//u: type: 7, size: 112, { sample_period, sample_freq }: 4000,
sample_type: IP|TID|TIME|CPU|PERIOD, disabled: 1, inherit: 1,
exclude_kernel: 1, exclude_hv: 1, mmap: 1, comm: 1, freq: 1, task: 1,
sample_id_all: 1, mmap2: 1, comm_exec: 1
[root@ssdandy ~]# perf script
[root@ssdandy ~]# perf report --stdio --header
Error:
The perf.data file has no samples!
# ========
# captured on: Wed May 6 10:30:06 2015
# hostname : ssdandy.ghostprotocols.net
# os release : 4.0.0-rc6+
# perf version : 4.0.rc6.g3698da
# arch : x86_64
# nrcpus online : 8
# nrcpus avail : 8
# cpudesc : Intel(R) Core(TM) i7-2920XM CPU @ 2.50GHz
# cpuid : GenuineIntel,6,42,7
# total memory : 16318708 kB
# cmdline : /home/acme/bin/perf record -a -e intel_bts//u sleep 2
# event : name = intel_bts//u, , type = 7, size = 112, { sample_period,
# sample_freq } = 4000, sample_type = IP|TID|TIME|CPU|PERIOD, disabled =
# 1, inherit = 1, exclude_kernel = 1, exclude_hv
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# pmu mappings: cpu = 4, intel_bts = 7, software = 1, power = 6,
# tracepoint = 2, breakpoint = 5
# ========
#
[root@ssdandy ~]#
But...:
[root@ssdandy ~]# grep bts /proc/cpuinfo | head -1
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe
syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology
nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx
smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt
tsc_deadline_timer aes xsave avx lahf_lm ida arat epb pln pts dtherm
tpr_shadow vnmi flexpriority ept vpid xsaveopt
[root@ssdandy ~]#
BTS is there and:
[root@ssdandy ~]# grep -i model /proc/cpuinfo | head -2
model : 42
model name : Intel(R) Core(TM) i7-2920XM CPU @ 2.50GHz
[root@ssdandy ~]#
[ 0.055674] smpboot: CPU0: Intel(R) Core(TM) i7-2920XM CPU @ 2.50GHz (fam: 06, model: 2a, stepping: 07)
[ 0.055697] Performance Events: PEBS fmt1+, 16-deep LBR, SandyBridge events, full-width counters, Intel PMU driver.
[ 0.055714] perf_event_intel: PEBS disabled due to CPU errata, please upgrade microcode
[ 0.055716] ... version: 3
[ 0.055717] ... bit width: 48
[ 0.055718] ... generic registers: 4
[ 0.055719] ... value mask: 0000ffffffffffff
[ 0.055720] ... max period: 0000ffffffffffff
[ 0.055720] ... fixed-purpose events: 3
[ 0.055721] ... event mask: 000000070000000f
[ 0.056454] x86: Booting SMP configuration:
[ 0.056456] .... node #0, CPUs: #1
[ 0.067656] Disabled fast string operations
[ 0.069850] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
<SNIP>
[ 0.169495] perf_event_intel: PMU erratum BJ122, BV98, HSD29 worked around, HT is on
Probably I need some firmware upgrade? Forgot where to pick those, will search
later :-\
> If that is not the case, consider reporting to linux-kernel@xxxxxxxxxxxxxxxx
>
> [ perf record: Captured and wrote 0.009 MB perf.data ]
> $ tools/perf/perf report --header --stdio
> Warning:
> Found 1 unknown events!
>
> Is this an older tool processing a perf.data file generated by a more recent tool?
>
> If that is not the case, consider reporting to linux-kernel@xxxxxxxxxxxxxxxx
>
> # ========
> # captured on: Wed May 6 09:55:00 2015
> # hostname : bdw03
> # os release : 4.0.0-rc6+
> # perf version : 4.0.g39a880
> # arch : x86_64
> # nrcpus online : 4
> # nrcpus avail : 4
> # cpudesc : Intel(R) Core(TM) i5-5###U CPU @ 2.20GHz
> # cpuid : GenuineIntel,6,61,4
> # total memory : 3960092 kB
> # cmdline : /home/ahunter/git/linux/tools/perf/perf record -e intel_bts//u ls
> # event : name = intel_bts//u, type = 7, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 1, excl_host = 0, excl_guest = 0, precise_ip = 0, attr_mmap2 = 1, attr_mmap = 1, attr_mm
> # HEADER_CPU_TOPOLOGY info available, use -I to display
> # HEADER_NUMA_TOPOLOGY info available, use -I to display
> # pmu mappings: cpu = 4, intel_bts = 7, software = 1, tracepoint = 2, breakpoint = 5, intel_pt = 6
> # ========
> #
>
>
> Perhaps we should disallow intel_bts and intel_pt PMU events
> explicitly and put that change back to v4.1 stable at least?
>
> I tried adding:
>
> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
> index 244c66f..5d3ab7c 100644
> --- a/tools/perf/util/pmu.c
> +++ b/tools/perf/util/pmu.c
> @@ -442,6 +442,10 @@ static struct perf_pmu *pmu_lookup(const char *name)
> LIST_HEAD(aliases);
> __u32 type;
>
> + /* No support for intel_bts or intel_pt so disallow them */
> + if (!strcmp(name, "intel_bts") || !strcmp(name, "intel_pt"))
> + return NULL;
> +
> /*
> * The pmu data we store & need consists of the pmu
> * type value and format definitions. Load both right
>
>
> And now I get:
>
> $ tools/perf/perf record -e intel_bts//u ls
> invalid or unsupported event: 'intel_bts//u'
> Run 'perf list' for a list of valid events
Unsure, when did we start accepting intel_bts in event names? In this patchkit?
- Arnaldo
> usage: perf record [<options>] [<command>]
> or: perf record [<options>] -- <command> [<options>]
>
> -e, --event <event> event selector. use 'perf list' to list available events
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/