mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-11 00:45:13 +00:00
perf scripts python: Add command execution for gecko script
This will enable the execution of gecko.py script using record and
report commands in 'perf script'. And this will be also reflected at
"perf script -l" command.
For Example:
perf script record gecko
perf script report gecko
Committer notes:
As discussed on the perf tools office hours, I made -F 99 the default
for the record script and removed the double -- on the report script so
that the existing 'perf script' protocol for the combined operation:
# perf script gecko
Works, i.e. the record script pipes its stdout into the stdin of the
report script, basically:
/bin/sh /usr/libexec/perf-core/scripts/python/bin/gecko-record -F 99 -g -a -q -o - | \
/bin/sh /usr/libexec/perf-core/scripts/python/bin/gecko-report -i -
Testing it:
The resulting JSON file needs to be uploaded to
https://profiler.firefox.com, Anup already has code to start a local
http server on the trace_begin handler of the gecko python script, start
firefox and feed it the JSON.
The example below only collects sample for the specified workload, so
that we don't produce thousands of lines, to collect system wide
samples, use instead:
# perf script gecko -a sleep 0.5
# nohup perf script gecko sleep 0.5
{
"meta": {
"interval": 1,
"processType": 0,
"product": "x86_64 GNU/Linux",
"stackwalk": 1,
"debug": 0,
"gcpoison": 0,
"asyncstack": 1,
"startTime": 274601692.636,
"shutdownTime": null,
"version": 24,
"presymbolicated": true,
"categories": [
{
"name": "User",
"color": "yellow",
"subcategories": [
"Other"
]
},
{
"name": "Kernel",
"color": "orange",
"subcategories": [
"Other"
]
}
],
"markerSchema": []
},
"libs": [],
"threads": [
{
"tid": 3344498,
"pid": 3344498,
"name": "sleep",
"markers": {
"schema": {
"name": 0,
"startTime": 1,
"endTime": 2,
"phase": 3,
"category": 4,
"data": 5
},
"data": []
},
"samples": {
"schema": {
"stack": 0,
"time": 1,
"responsiveness": 2
},
"data": [
[
21,
274601692.636,
0
],
[
23,
274601692.641,
0
],
[
29,
274601692.643,
0
],
[
42,
274601692.648,
0
]
]
},
"frameTable": {
"schema": {
"location": 0,
"relevantForJS": 1,
"innerWindowID": 2,
"implementation": 3,
"optimizations": 4,
"line": 5,
"column": 6,
"category": 7,
"subcategory": 8
},
"data": [
[
0,
false,
0,
null,
null,
null,
null,
1,
null
],
[
1,
false,
0,
null,
null,
null,
null,
1,
null
],
[
2,
false,
0,
null,
null,
null,
null,
1,
null
],
[
3,
false,
0,
null,
null,
null,
null,
1,
null
],
[
4,
false,
0,
null,
null,
null,
null,
1,
null
],
[
5,
false,
0,
null,
null,
null,
null,
1,
null
],
[
6,
false,
0,
null,
null,
null,
null,
1,
null
],
[
7,
false,
0,
null,
null,
null,
null,
1,
null
],
[
8,
false,
0,
null,
null,
null,
null,
1,
null
],
[
9,
false,
0,
null,
null,
null,
null,
1,
null
],
[
10,
false,
0,
null,
null,
null,
null,
1,
null
],
[
11,
false,
0,
null,
null,
null,
null,
1,
null
],
[
12,
false,
0,
null,
null,
null,
null,
1,
null
],
[
13,
false,
0,
null,
null,
null,
null,
1,
null
],
[
14,
false,
0,
null,
null,
null,
null,
1,
null
],
[
15,
false,
0,
null,
null,
null,
null,
1,
null
],
[
16,
false,
0,
null,
null,
null,
null,
1,
null
],
[
17,
false,
0,
null,
null,
null,
null,
1,
null
],
[
18,
false,
0,
null,
null,
null,
null,
1,
null
],
[
19,
false,
0,
null,
null,
null,
null,
1,
null
],
[
20,
false,
0,
null,
null,
null,
null,
1,
null
],
[
21,
false,
0,
null,
null,
null,
null,
1,
null
],
[
22,
false,
0,
null,
null,
null,
null,
1,
null
],
[
23,
false,
0,
null,
null,
null,
null,
1,
null
],
[
24,
false,
0,
null,
null,
null,
null,
1,
null
],
[
25,
false,
0,
null,
null,
null,
null,
1,
null
],
[
26,
false,
0,
null,
null,
null,
null,
1,
null
],
[
27,
false,
0,
null,
null,
null,
null,
1,
null
],
[
28,
false,
0,
null,
null,
null,
null,
1,
null
],
[
29,
false,
0,
null,
null,
null,
null,
1,
null
],
[
30,
false,
0,
null,
null,
null,
null,
1,
null
],
[
31,
false,
0,
null,
null,
null,
null,
1,
null
],
[
32,
false,
0,
null,
null,
null,
null,
1,
null
],
[
33,
false,
0,
null,
null,
null,
null,
1,
null
],
[
34,
false,
0,
null,
null,
null,
null,
1,
null
],
[
35,
false,
0,
null,
null,
null,
null,
1,
null
],
[
36,
false,
0,
null,
null,
null,
null,
1,
null
],
[
37,
false,
0,
null,
null,
null,
null,
1,
null
],
[
38,
false,
0,
null,
null,
null,
null,
1,
null
]
]
},
"stackTable": {
"schema": {
"prefix": 0,
"frame": 1
},
"data": [
[
null,
0
],
[
0,
1
],
[
1,
2
],
[
2,
3
],
[
3,
4
],
[
4,
5
],
[
5,
6
],
[
6,
7
],
[
7,
8
],
[
8,
9
],
[
9,
10
],
[
10,
11
],
[
11,
12
],
[
12,
13
],
[
13,
14
],
[
14,
15
],
[
15,
16
],
[
16,
17
],
[
17,
18
],
[
18,
19
],
[
19,
20
],
[
20,
21
],
[
20,
22
],
[
22,
23
],
[
11,
24
],
[
24,
25
],
[
25,
26
],
[
26,
27
],
[
27,
28
],
[
28,
29
],
[
9,
11
],
[
30,
24
],
[
31,
25
],
[
32,
30
],
[
33,
31
],
[
34,
32
],
[
35,
29
],
[
36,
33
],
[
37,
34
],
[
38,
35
],
[
39,
36
],
[
40,
37
],
[
41,
38
]
]
},
"stringTable": [
"__func__.0 (in [kernel.kallsyms].rodata)",
"perf_trace_ext4_fc_track_inode (in [kernel.kallsyms])",
"perf_trace_ext4_es_insert_delayed_block (in [kernel.kallsyms])",
"ext4_es_show_pblock (in [kernel.kallsyms])",
"perf_trace_ext4_ext_rm_leaf (in [kernel.kallsyms])",
"devcgroup_access_write (in [kernel.kallsyms])",
"devcgroup_update_access (in [kernel.kallsyms])",
"propagate_exception (in [kernel.kallsyms])",
"revalidate_active_exceptions (in [kernel.kallsyms])",
"perf_trace_ext4_fc_commit_stop (in [kernel.kallsyms])",
"perf_fetch_caller_regs (in [kernel.kallsyms])",
"khugepaged (in [kernel.kallsyms])",
"khugepaged_wait_work (in [kernel.kallsyms])",
"freezable_schedule_timeout (in [kernel.kallsyms])",
"freezer_count (in [kernel.kallsyms])",
"try_to_freeze (in [kernel.kallsyms])",
"try_to_freeze_unsafe (in [kernel.kallsyms])",
"split_huge_pages_write (in [kernel.kallsyms])",
"migrate_pages (in [kernel.kallsyms])",
"unmap_and_move (in [kernel.kallsyms])",
"__unmap_and_move (in [kernel.kallsyms])",
"collect_events (in [kernel.kallsyms])",
"uncore_down_prepare (in [kernel.kallsyms])",
"perf_iommu_read (in [kernel.kallsyms])",
"khugepaged_do_scan (in [kernel.kallsyms])",
"khugepaged_scan_mm_slot (in [kernel.kallsyms])",
"khugepaged_scan_file (in [kernel.kallsyms])",
"need_resched (in [kernel.kallsyms])",
"get_current (in [kernel.kallsyms])",
"move_to_new_page (in [kernel.kallsyms])",
"khugepaged_scan_pmd (in [kernel.kallsyms])",
"trace_mm_khugepaged_scan_pmd (in [kernel.kallsyms])",
"migrate_huge_page_move_mapping (in [kernel.kallsyms])",
"do_huge_pmd_numa_page (in [kernel.kallsyms])",
"pmd_pfn (in [kernel.kallsyms])",
"protnone_mask (in [kernel.kallsyms])",
"__pte_needs_invert (in [kernel.kallsyms])",
"reclaim_high (in [kernel.kallsyms])",
"memcg_memory_event (in [kernel.kallsyms])"
],
"registerTime": 0,
"unregisterTime": null,
"processType": "default"
}
],
"processes": [],
"pausedRanges": []
}
#
Signed-off-by: Anup Sharma <anupnewsmail@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/cbf03cda175ea3dd2c6cd87bd3f12d803446cb95.1689961706.git.anupnewsmail@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
2d889c6af1
commit
f9f72b2ab7
2 changed files with 5 additions and 0 deletions
2
tools/perf/scripts/python/bin/gecko-record
Normal file
2
tools/perf/scripts/python/bin/gecko-record
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
perf record -F 99 -g "$@"
|
||||
3
tools/perf/scripts/python/bin/gecko-report
Normal file
3
tools/perf/scripts/python/bin/gecko-report
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
# description: create firefox gecko profile json format from perf.data
|
||||
perf script "$@" -s "$PERF_EXEC_PATH"/scripts/python/gecko.py
|
||||
Loading…
Add table
Reference in a new issue