Greetings, i was referred to this mailing list by Mathleu Poirler.
I'm recording Coresight using my Dragonboard 410c board, after compiling
the perf-opencsd-master kernel.
Recording seems to work on a simple program i did which does nothing but
print a string to the screen.
Now, i use perf to hopefully decode the trace, but perf segfaults. I'll let
you know that decoding using the sample trace given here:
https://github.com/Linaro/OpenCSD/blob/master/HOWTO.md
Does work.
I dived into the cs-trace-disasm.py script to see why exactly it doesn't
work and i noticed this command causes the segfault:
$ ~/linux/tools/perf/perf script --show-mmap-events
/lib/aarch64-linux-gnu/ld-2.26.so with build id
6516ef8fa13fcb739834af9e87fb5fe9df612096 not found, con>
Segmentation fault (core dumped)
This command also segfaults:
$ ~/linux/tools/perf/perf report --stdio
/lib/aarch64-linux-gnu/ld-2.26.so with build id
6516ef8fa13fcb739834af9e87fb5fe9df612096 not found, con>
(END)Segmentation fault (core dumped)
But this command works:
$ ~/linux/tools/perf/perf report --stdio --dump
And i can see Coresight packets information when browsing the output.
My .debug directory looks like this:
~/.debug/
|-- [kernel.kallsyms]
| `-- 1dc43d23817467d7717b19af07463af0d9a9bd83
| `-- kallsyms
|-- [vdso]
| `-- 18863444e4f3e2600f53e406421b2a0edd940888
| `-- vdso
|-- bin
| `-- check
| `-- 31694f29996e06da12f63d6088ec6eb23b3079c4
| `-- elf
`-- lib
`-- aarch64-linux-gnu
|-- ld-2.26.so
| `-- 6516ef8fa13fcb739834af9e87fb5fe9df612096
| `-- elf
`-- libc.so.6
`-- 06e99d8d6acabab0643e0f525ac561cf73db6498
`-- elf
Now, another need i wanted to ask is where can i find the code that uses
OpenCSD to decode the trace and output instructions? eventually, i don't
want to use perf, but rather use OpenCSD directly in my code to decode
traces.
Not sure what to do here and how to proceed, i'll appreciate some help.
Thank you all!
Hi,
Would you be interested in Power Lunix users for your email marketing campaign? We provide the Database across North America, EMEA, APAC and Latin America.
We can provide you with titles of Decision Makers regarding the technology.
We also have other technology users like
SUSE
Red Hat
CELAD
Tanner EDA
Callabora
iXsystem
Linaro and many more…
List Contains: Name, Company's Name, Phone Number, Fax Number, Job Title, Email address, Complete Mailing Address, SIC code, Company revenue, size, Web address etc.
We offer:
Complete list with Email address in an Excel Sheet for unlimited usage.
Do an email blast endorsing your product/services and providing your contact information.
Email appending, multiple contacts appending, Data appending which will append or add the
missing information to your existing database.
Let me know your thoughts or pass on the message to the right person in your company.
Thanks & regards,
JaniceWhite
Information Specialist
If you don’t want to receive any message from us then please type “Leave Out” in the Subject Line.
Good day to all,
The CS specification defines replicators that are not showing on the
AMBA bus and can't be configured - they simply provide a hard wire
between components. Earlier this week someone wrote to me on the open
mailing list asking for guidance in dealing with a new type of funnel
their company has introduced in a design. Just like a replicator it
doesn't show up on the AMBA bus and can't be configured.
It makes sense to deal with this new component the same way we do with
the above-mentioned replicator, i.e use a platform driver that does
nothing and add it to the CS topology when specified in the device
tree. It also make sense to re-use the same code [1] for that.
But moving forward with this also means we need to re-brand the
current coresight-replicator.c file, along with adding new
"compatible" strings. Here is what I suggest:
1) Keep the "arm,coresight-replicator" compatible string for backward
compatibility (I'm seriously tempted not to [2]).
2) Add a new "arm,coresight-hw-replicator" compatible string for
replicators that don't show up on the AMBA bus.
3) Add a new "arm,coresight-hw-funnel" compatible string for funnels
that don't show up on the AMBA bus.
4) Use a match table to deal with the above two new compatible string
and the old one (if we keep it around).
5) Rename coresight-replicator.c to coresight-hw-link.c.
I'm reaching out to the list because once we have a naming convention
it is hard to modify it. Let me know what you think of the above.
Thanks,
Mathieu
[1]. https://elixir.bootlin.com/linux/latest/source/drivers/hwtracing/coresight/…
[2]. We could also delete the old "arm,coresight-replicator" and make
the changes in the DT for current users. People that haven't upstream
their in-house solution will have to adapt, but that's something that
happens with all the out-of-tree code.
Hi Zhi,
On 7 March 2018 at 08:57, Zhi Li <lznuaa(a)gmail.com> wrote:
> Mathieu:
>
> I am working one enable coresight in our SOC.
>
> But our SOC's cluster funnel have not export program interface.
> Our cluster included 4 A53.
>
> 4 ETM of A53 connect to funnel, which have NOT program
> interface. Funnel is default enabled.
>
> Do you have suggest how to bypass or use dummy funnel in dts file?
Is the funnel discoverable on the AMBA bus or is it like the original
version of replicators?
>
>
> best regards
> Frank Li
* Arnaldo Carvalho de Melo <acme(a)kernel.org> wrote:
> Hi Ingo,
>
> Please consider pulling, this is on top of tip/perf/urgent.
>
> - Arnaldo
>
> Test results at the end of this message, as usual.
>
> The following changes since commit 297f9233b53a08fd457815e19f1d6f2c3389857b:
>
> kprobes: Propagate error from disarm_kprobe_ftrace() (2018-02-16 09:12:58 +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-4.17-20180216
>
> for you to fetch changes up to 21316ac6803d4a1aadd74b896db8d60a92cd1140:
>
> perf tests shell lib: Use a wildcard to remove the vfs_getname probe (2018-02-16 15:31:12 -0300)
>
> ----------------------------------------------------------------
> perf/core improvements and fixes:
>
> - Fix wrong jump arrow in systems with branch records with cycles,
> i.e. Intel's >= Skylake (Jin Yao)
>
> - Fix 'perf record --per-thread' problem introduced when
> implementing 'perf stat --per-thread (Jin Yao)
>
> - Use arch__compare_symbol_names() to fix 'perf test vmlinux',
> that was using strcmp(symbol names) while the dso routines
> doing symbol lookups used the arch overridable one, making
> this test fail in architectures that overrided that function
> with something other than strcmp() (Jiri Olsa)
>
> - Add 'perf script --show-round-event' to display
> PERF_RECORD_FINISHED_ROUND entries (Jiri Olsa)
>
> - Fix dwarf unwind for stripped binaries in 'perf test' (Jiri Olsa)
>
> - Use ordered_events for 'perf report --tasks', otherwise we may get
> artifacts when PERF_RECORD_FORK gets processed before PERF_RECORD_COMM
> (when they got recorded in different CPUs) (Jiri Olsa)
>
> - Add support to display group output for non group events, i.e.
> now when one uses 'perf report --group' on a perf.data file
> recorded without explicitly grouping events with {} (e.g.
> "perf record -e '{cycles,instructions}'" get the same output
> that would produce, i.e. see all those non-grouped events in
> multiple columns, at the same time (Jiri Olsa)
>
> - Skip non-address kallsyms entries, e.g. '(null)' for !root (Jiri Olsa)
>
> - Kernel maps fixes wrt perf.data(report) versus live system (top)
> (Jiri Olsa)
>
> - Fix memory corruption when using 'perf record -j call -g -a <application>'
> followed by 'perf report --branch-history' (Jiri Olsa)
>
> - ARM CoreSight fixes (Mathieu Poirier)
>
> - Add inject capability for CoreSight Traces (Robert Waker)
>
> - Update documentation for use of 'perf' + ARM CoreSight (Robert Walker)
>
> - Man pages fixes (Sangwon Hong, Jaecheol Shin)
>
> - Fix some 'perf test' cases on s/390 and x86_64 (some backtraces
> changed with a glibc update) (Thomas Richter)
>
> - Add detailed CPUID info in the 'perf.data' headers for s/390 to
> then use it in 'perf annotate' (Thomas Richter)
>
> - Add '--interval-count N' to 'perf stat', to use with -I, i.e.
> 'perf stat -I 1000 --interval-count 2' will show stats every
> 1000ms, two times (yuzhoujian)
>
> - Add 'perf stat --timeout Nms', that will run for that many
> milliseconds and then stop, printing the counters (yuzhoujian)
>
> - Fix description for 'perf report --mem-modex (Andi Kleen)
>
> - Use a wildcard to remove the vfs_getname probe in the
> 'perf test' shell based test cases (Arnaldo Carvalho de Melo)
>
> Signed-off-by: Arnaldo Carvalho de Melo <acme(a)redhat.com>
>
> ----------------------------------------------------------------
> Andi Kleen (1):
> perf report: Fix description for --mem-mode
>
> Arnaldo Carvalho de Melo (1):
> perf tests shell lib: Use a wildcard to remove the vfs_getname probe
>
> Jaecheol Shin (1):
> perf annotate: Add missing arguments in Man page
>
> Jin Yao (2):
> perf tools: Use target->per_thread and target->system_wide flags
> perf report: Fix wrong jump arrow
>
> Jiri Olsa (18):
> perf record: Put new line after target override warning
> perf script: Add --show-round-event to display PERF_RECORD_FINISHED_ROUND
> tools lib api fs: Add filename__read_xll function
> tools lib api fs: Add sysfs__read_xll function
> perf tests: Fix dwarf unwind for stripped binaries
> perf tools: Fix comment for sort__* compare functions
> perf report: Ask for ordered events for --tasks option
> perf report: Add support to display group output for non group events
> tools lib symbol: Skip non-address kallsyms line
> perf symbols: Check if we read regular file in dso__load()
> perf machine: Free root_dir in machine__init() error path
> perf machine: Move kernel mmap name into struct machine
> perf machine: Generalize machine__set_kernel_mmap()
> perf machine: Don't search for active kernel start in __machine__create_kernel_maps
> perf machine: Remove machine__load_kallsyms()
> perf tools: Do not create kernel maps in sample__resolve()
> perf tests: Use arch__compare_symbol_names to compare symbols
> perf report: Fix memory corruption in --branch-history mode --branch-history
>
> Mathieu Poirier (3):
> perf cs-etm: Freeing allocated memory
> perf auxtrace arm: Fixing uninitialised variable
> perf cs-etm: Properly deal with cpu maps
>
> Ravi Bangoria (3):
> tools include powerpc: Grab a copy of arch/powerpc/include/uapi/asm/unistd.h
> perf powerpc: Generate system call table from asm/unistd.h
> perf trace powerpc: Use generated syscall table
>
> Robert Walker (3):
> perf cs-etm: Inject capabilitity for CoreSight traces
> perf inject: Emit instruction records on ETM trace discontinuity
> coresight: Update documentation for perf usage
>
> Sangwon Hong (2):
> perf kmem: Document a missing option & an argument
> perf mem: Document a missing option
>
> Thomas Richter (5):
> perf record: Provide detailed information on s390 CPU
> perf annotate: Scan cpuid for s390 and save machine type
> perf cpuid: Introduce a platform specific cpuid compare function
> perf test: Fix test case 23 for s390 z/VM or KVM guests
> perf test: Fix test case inet_pton to accept inlines.
>
> yuzhoujian (2):
> perf stat: Add support to print counts for fixed times
> perf stat: Add support to print counts after a period of time
>
> Documentation/trace/coresight.txt | 51 +++
> tools/arch/powerpc/include/uapi/asm/unistd.h | 402 +++++++++++++++++
> tools/lib/api/fs/fs.c | 44 +-
> tools/lib/api/fs/fs.h | 2 +
> tools/lib/symbol/kallsyms.c | 4 +
> tools/perf/Documentation/perf-annotate.txt | 6 +-
> tools/perf/Documentation/perf-kmem.txt | 6 +-
> tools/perf/Documentation/perf-mem.txt | 4 +
> tools/perf/Documentation/perf-report.txt | 5 +-
> tools/perf/Documentation/perf-script.txt | 3 +
> tools/perf/Documentation/perf-stat.txt | 10 +
> tools/perf/Makefile.config | 2 +
> tools/perf/arch/arm/util/auxtrace.c | 2 +-
> tools/perf/arch/arm/util/cs-etm.c | 51 ++-
> tools/perf/arch/powerpc/Makefile | 25 ++
> .../perf/arch/powerpc/entry/syscalls/mksyscalltbl | 37 ++
> tools/perf/arch/s390/annotate/instructions.c | 27 +-
> tools/perf/arch/s390/util/header.c | 148 ++++++-
> tools/perf/builtin-record.c | 2 +-
> tools/perf/builtin-report.c | 7 +-
> tools/perf/builtin-script.c | 17 +
> tools/perf/builtin-stat.c | 53 ++-
> tools/perf/check-headers.sh | 1 +
> tools/perf/tests/code-reading.c | 33 +-
> tools/perf/tests/dwarf-unwind.c | 46 +-
> tools/perf/tests/shell/lib/probe_vfs_getname.sh | 2 +-
> .../perf/tests/shell/trace+probe_libc_inet_pton.sh | 6 +-
> tools/perf/tests/vmlinux-kallsyms.c | 4 +-
> tools/perf/ui/browsers/annotate.c | 9 +-
> tools/perf/util/build-id.c | 10 +-
> tools/perf/util/cs-etm-decoder/cs-etm-decoder.c | 74 +++-
> tools/perf/util/cs-etm-decoder/cs-etm-decoder.h | 2 +
> tools/perf/util/cs-etm.c | 478 ++++++++++++++++++---
> tools/perf/util/event.c | 16 +-
> tools/perf/util/evlist.c | 21 +-
> tools/perf/util/header.h | 1 +
> tools/perf/util/hist.c | 4 +-
> tools/perf/util/hist.h | 1 -
> tools/perf/util/machine.c | 145 +++----
> tools/perf/util/machine.h | 6 +-
> tools/perf/util/pmu.c | 47 +-
> tools/perf/util/sort.c | 7 +-
> tools/perf/util/stat.h | 2 +
> tools/perf/util/symbol.c | 13 +-
> tools/perf/util/syscalltbl.c | 8 +
> tools/perf/util/thread_map.c | 4 +-
> tools/perf/util/thread_map.h | 2 +-
> 47 files changed, 1577 insertions(+), 273 deletions(-)
> create mode 100644 tools/arch/powerpc/include/uapi/asm/unistd.h
> create mode 100755 tools/perf/arch/powerpc/entry/syscalls/mksyscalltbl
Pulled, thanks a lot Arnaldo!
Ingo
From: Robert Walker <robert.walker(a)arm.com>
Add notes on using perf to collect and analyze CoreSight trace
Signed-off-by: Robert Walker <robert.walker(a)arm.com>
Cc: Mathieu Poirier <mathieu.poirier(a)linaro.org>
Cc: coresight(a)lists.linaro.org
Cc: linux-arm-kernel(a)lists.infradead.org
Link: http://lkml.kernel.org/r/1518607481-4059-4-git-send-email-robert.walker@arm…
Signed-off-by: Arnaldo Carvalho de Melo <acme(a)redhat.com>
---
Documentation/trace/coresight.txt | 51 +++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/Documentation/trace/coresight.txt b/Documentation/trace/coresight.txt
index a33c88cd5d1d..6f0120c3a4f1 100644
--- a/Documentation/trace/coresight.txt
+++ b/Documentation/trace/coresight.txt
@@ -330,3 +330,54 @@ Details on how to use the generic STM API can be found here [2].
[1]. Documentation/ABI/testing/sysfs-bus-coresight-devices-stm
[2]. Documentation/trace/stm.txt
+
+
+Using perf tools
+----------------
+
+perf can be used to record and analyze trace of programs.
+
+Execution can be recorded using 'perf record' with the cs_etm event,
+specifying the name of the sink to record to, e.g:
+
+ perf record -e cs_etm/(a)20070000.etr/u --per-thread
+
+The 'perf report' and 'perf script' commands can be used to analyze execution,
+synthesizing instruction and branch events from the instruction trace.
+'perf inject' can be used to replace the trace data with the synthesized events.
+The --itrace option controls the type and frequency of synthesized events
+(see perf documentation).
+
+Note that only 64-bit programs are currently supported - further work is
+required to support instruction decode of 32-bit Arm programs.
+
+
+Generating coverage files for Feedback Directed Optimization: AutoFDO
+---------------------------------------------------------------------
+
+'perf inject' accepts the --itrace option in which case tracing data is
+removed and replaced with the synthesized events. e.g.
+
+ perf inject --itrace --strip -i perf.data -o perf.data.new
+
+Below is an example of using ARM ETM for autoFDO. It requires autofdo
+(https://github.com/google/autofdo) and gcc version 5. The bubble
+sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tutorial).
+
+ $ gcc-5 -O3 sort.c -o sort
+ $ taskset -c 2 ./sort
+ Bubble sorting array of 30000 elements
+ 5910 ms
+
+ $ perf record -e cs_etm/(a)20070000.etr/u --per-thread taskset -c 2 ./sort
+ Bubble sorting array of 30000 elements
+ 12543 ms
+ [ perf record: Woken up 35 times to write data ]
+ [ perf record: Captured and wrote 69.640 MB perf.data ]
+
+ $ perf inject -i perf.data -o inj.data --itrace=il64 --strip
+ $ create_gcov --binary=./sort --profile=inj.data --gcov=sort.gcov -gcov_version=1
+ $ gcc-5 -O3 -fauto-profile=sort.gcov sort.c -o sort_autofdo
+ $ taskset -c 2 ./sort_autofdo
+ Bubble sorting array of 30000 elements
+ 5806 ms
--
2.14.3
Hi,
These patches add support for using perf inject to generate branch events,
instruction events and branch stacks from CoreSight ETM traces.
They apply to linus's tree with the memory cleanup fix from
https://lkml.org/lkml/2018/1/25/432
Regards
Rob Walker
Robert Walker (2):
perf tools: inject capabilitity for CoreSight traces
perf inject: Emit instruction records on ETM trace discontinuity
Documentation/trace/coresight.txt | 51 +++
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c | 74 +++-
tools/perf/util/cs-etm-decoder/cs-etm-decoder.h | 2 +
tools/perf/util/cs-etm.c | 471 +++++++++++++++++++++---
4 files changed, 532 insertions(+), 66 deletions(-)
--
2.7.4
Hi,
These patches add support for using perf inject to generate branch events,
instruction events and branch stacks from CoreSight ETM traces.
They apply to linus's tree with the memory cleanup fix from
https://lkml.org/lkml/2018/1/25/432
Changes since v1:
* Split documentation update into separate patch
* Added null pointer check
* Moved some changes from patch 2 to patch 1
Regards
Rob Walker
Robert Walker (3):
perf tools: inject capabilitity for CoreSight traces
perf inject: Emit instruction records on ETM trace discontinuity
coresight: Update documentation for perf usage
Documentation/trace/coresight.txt | 51 +++
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c | 74 +++-
tools/perf/util/cs-etm-decoder/cs-etm-decoder.h | 2 +
tools/perf/util/cs-etm.c | 472 +++++++++++++++++++++---
4 files changed, 533 insertions(+), 66 deletions(-)
--
2.7.4