perf/core improvements and fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit e1abf2cc8d5d80b41c4419368ec743ccadbb131e:
bpf: Fix the build on BPF_SYSCALL=y && !CONFIG_TRACING kernels, make it more configurable (2015-04-02 16:28:06 +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 bd05954bfa17f03a7bd4454178ba09786b35e383:
perf data: Support using -f to override perf.data file ownership for 'convert' (2015-04-02 13:18:52 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
User visible:
- Support unnamed union/structure members data collection in 'perf probe' (Masami Hiramatsu)
- Support missing -f to override perf.data file ownership (Yunlong Song)
Infrastructure:
- No need to lookup thread twice when processing samples in 'perf script' (Arnaldo Carvalho de Melo)
- No need to pass thread twice to the scripting callbacks (Arnaldo Carvalho de Melo)
- No need to pass thread twice to the db-export facility (Arnaldo Carvalho de Melo)
----------------------------------------------------------------
Arnaldo Carvalho de Melo (4):
perf script: No need to lookup thread twice
perf scripting: No need to pass thread twice to the scripting callbacks perf db-export: No need to pass thread twice to db_export__sample perf db-export: No need to have ->thread twice in struct export_sample
Masami Hiramatsu (1):
perf probe: Fix to track down unnamed union/structure members
Yunlong Song (10):
perf evlist: Support using -f to override perf.data file ownership perf inject: Support using -f to override perf.data file ownership perf kmem: Support using -f to override perf.data file ownership perf kvm: Support using -f to override perf.data.guest file ownership perf lock: Support using -f to override perf.data file ownership perf mem: Support using -f to override perf.data file ownership perf script: Support using -f to override perf.data file ownership perf timechart: Support using -f to override perf.data file ownership perf trace: Support using -f to override perf.data file ownership perf data: Support using -f to override perf.data file ownership for 'convert'
tools/perf/builtin-data.c | 4 +++- tools/perf/builtin-evlist.c | 2 ++ tools/perf/builtin-inject.c | 1 + tools/perf/builtin-kmem.c | 9 +++++---- tools/perf/builtin-kvm.c | 2 ++ tools/perf/builtin-lock.c | 5 +++++ tools/perf/builtin-mem.c | 3 +++ tools/perf/builtin-script.c | 23 ++++++++-------------- tools/perf/builtin-timechart.c | 3 +++ tools/perf/builtin-trace.c | 3 +++ tools/perf/util/data-convert-bt.c | 3 ++- tools/perf/util/data-convert-bt.h | 2 +- tools/perf/util/db-export.c | 4 ++-- tools/perf/util/db-export.h | 3 +-- tools/perf/util/dwarf-aux.c | 14 +++++++++---- tools/perf/util/evsel.h | 1 + tools/perf/util/kvm-stat.h | 1 + tools/perf/util/probe-finder.c | 8 +++++++- .../perf/util/scripting-engines/trace-event-perl.c | 5 ++--- .../util/scripting-engines/trace-event-python.c | 16 ++++++--------- tools/perf/util/trace-event-scripting.c | 1 - tools/perf/util/trace-event.h | 3 +-- 22 files changed, 69 insertions(+), 47 deletions(-)
Arnaldo Carvalho de Melo
maintainerPATCH 1/15 perf script: No need to lookup thread twice
From: Arnaldo Carvalho de Melo <[email protected]>
We get the thread when we call perf_event__preprocess_sample(), no need to do it before that.
--- tools/perf/builtin-script.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
tools/perf/builtin-script.c +1 -9
@@ -549,14 +549,6 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused, struct machine *machine) {struct addr_location al; -struct thread *thread =machine__findnew_thread (machine, sample->pid, - sample->tid); - -if (thread ==NULL ) { -pr_debug ("problem processing %d event, skipping it.\n" , - event->header.type); -return -1 ; - }if (debug_mode) {if (sample->time < last_timestamp) {
@@ -581,7 +573,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,if (cpu_list && !test_bit (sample->cpu, cpu_bitmap))return 0 ; - scripting_ops->process_event (event, sample, evsel, thread, &al); + scripting_ops->process_event (event, sample, evsel, al.thread, &al);return 0 ; }
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 2/15 perf scripting: No need to pass thread twice to the scripting callbacks
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
It is already in the addr_location, so remove the redundant 'thread' parameter from the callback signatures.
--- tools/perf/builtin-script.c | 6 +++--- tools/perf/util/scripting-engines/trace-event-perl.c | 5 ++--- tools/perf/util/scripting-engines/trace-event-python.c | 13 +++++-------- tools/perf/util/trace-event-scripting.c | 1 - tools/perf/util/trace-event.h | 3 +-- 5 files changed, 11 insertions(+), 17 deletions(-)
tools/perf/builtin-script.c +3 -3
@@ -446,9 +446,9 @@ static void print_sample_bts(union perf_event *event, }static void process_event (union perf_event *event,struct perf_sample *sample, -struct perf_evsel *evsel,struct thread *thread, -struct addr_location *al) +struct perf_evsel *evsel,struct addr_location *al) { +struct thread *thread = al->thread;struct perf_event_attr *attr = &evsel->attr;if (output[attr->type].fields ==0 )
@@ -573,7 +573,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,if (cpu_list && !test_bit (sample->cpu, cpu_bitmap))return 0 ; - scripting_ops->process_event (event, sample, evsel, al.thread, &al); + scripting_ops->process_event (event, sample, evsel, &al);return 0 ; }
tools/perf/util/scripting-engines/trace-event-perl.c +2 -3
@@ -360,10 +360,9 @@ static void perl_process_event_generic(union perf_event *event,static void perl_process_event (union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread, -struct addr_location *al__maybe_unused ) +struct addr_location *al) { -perl_process_tracepoint (sample, evsel, thread); +perl_process_tracepoint (sample, evsel, al->thread);perl_process_event_generic (event, sample, evsel); }
tools/perf/util/scripting-engines/trace-event-python.c +5 -8
@@ -381,7 +381,6 @@ exit:static void python_process_tracepoint (struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread,struct addr_location *al) {struct event_format *event = evsel->tp_format;
@@ -395,7 +394,7 @@ static void python_process_tracepoint(struct perf_sample *sample,int cpu = sample->cpu;void *data = sample->raw_data;unsigned long long nsecs = sample->time; -const char *comm =thread__comm_str (thread); +const char *comm =thread__comm_str (al->thread); t =PyTuple_New (MAX_FIELDS );if (!t)
@@ -766,7 +765,6 @@ static int python_process_call_return(struct call_return *cr, void *data)static void python_process_general_event (struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread,struct addr_location *al) {PyObject *handler, *t, *dict, *callchain, *dict_sample;
@@ -816,7 +814,7 @@ static void python_process_general_event(struct perf_sample *sample,pydict_set_item_string_decref (dict,"raw_buf" ,PyString_FromStringAndSize ( (const char *)sample->raw_data, sample->raw_size));pydict_set_item_string_decref (dict,"comm" , -PyString_FromString (thread__comm_str (thread))); +PyString_FromString (thread__comm_str (al->thread)));if (al->map) {pydict_set_item_string_decref (dict,"dso" ,PyString_FromString (al->map->dso->name));
@@ -843,22 +841,21 @@ exit:static void python_process_event (union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread,struct addr_location *al) {struct tables *tables = &tables_global;switch (evsel->attr.type) {case PERF_TYPE_TRACEPOINT : -python_process_tracepoint (sample, evsel, thread, al); +python_process_tracepoint (sample, evsel, al);break ;/* Reserve for future process_hw/sw/raw APIs */ default :if (tables->db_export_mode)db_export__sample (&tables->dbe, event, sample, evsel, - thread, al); + al->thread, al);else -python_process_general_event (sample, evsel, thread, al); +python_process_general_event (sample, evsel, al); } }
tools/perf/util/trace-event-scripting.c +0 -1
@@ -43,7 +43,6 @@ static int stop_script_unsupported(void)static void process_event_unsupported (union perf_event *event__maybe_unused ,struct perf_sample *sample__maybe_unused ,struct perf_evsel *evsel__maybe_unused , -struct thread *thread__maybe_unused ,struct addr_location *al__maybe_unused ) { }
tools/perf/util/trace-event.h +1 -2
@@ -72,8 +72,7 @@ struct scripting_ops {void (*process_event) (union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread, -struct addr_location *al); +struct addr_location *al);int (*generate_script) (struct pevent *pevent,const char *outfile); };
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 3/15 perf db-export: No need to pass thread twice to db_export__sample
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
As it is available via another parameter, address_location->thread.
--- tools/perf/util/db-export.c | 3 ++- tools/perf/util/db-export.h | 2 +- tools/perf/util/scripting-engines/trace-event-python.c | 3 +-- 3 files changed, 4 insertions(+), 4 deletions(-)
tools/perf/util/db-export.c +2 -1
@@ -282,8 +282,9 @@ int db_export__branch_type(struct db_export *dbe, u32 branch_type,int db_export__sample (struct db_export *dbe,union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread,struct addr_location *al) +struct addr_location *al) { +struct thread * thread = al->thread;struct export_sample es = { .event = event, .sample = sample,
tools/perf/util/db-export.h +1 -1
@@ -97,7 +97,7 @@ int db_export__branch_type(struct db_export *dbe, u32 branch_type, const char *name);int db_export__sample (struct db_export *dbe,union perf_event *event,struct perf_sample *sample,struct perf_evsel *evsel, -struct thread *thread,struct addr_location *al); +struct addr_location *al);int db_export__branch_types (struct db_export *dbe);
tools/perf/util/scripting-engines/trace-event-python.c +1 -2
@@ -852,8 +852,7 @@ static void python_process_event(union perf_event *event,/* Reserve for future process_hw/sw/raw APIs */ default :if (tables->db_export_mode) -db_export__sample (&tables->dbe, event, sample, evsel, - al->thread, al); +db_export__sample (&tables->dbe, event, sample, evsel, al);else python_process_general_event (sample, evsel, al); }
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 4/15 perf db-export: No need to have ->thread twice in struct export_sample
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
As it comes from address_location->thread, that is already stored as export_sample->al, where the thread can be obtained.
--- tools/perf/util/db-export.c | 1 - tools/perf/util/db-export.h | 1 - tools/perf/util/scripting-engines/trace-event-python.c | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-)
tools/perf/util/db-export.c +0 -1
@@ -289,7 +289,6 @@ int db_export__sample(struct db_export *dbe, union perf_event *event, .event = event, .sample = sample, .evsel = evsel, - .thread = thread, .al = al, };struct thread *main_thread;
tools/perf/util/db-export.h +0 -1
@@ -34,7 +34,6 @@ struct export_sample {union perf_event *event;struct perf_sample *sample;struct perf_evsel *evsel; -struct thread *thread;struct addr_location *al;u64 db_id;u64 comm_db_id;
tools/perf/util/scripting-engines/trace-event-python.c +1 -1
@@ -679,7 +679,7 @@ static int python_export_sample(struct db_export *dbe,tuple_set_u64 (t,0 , es->db_id);tuple_set_u64 (t,1 , es->evsel->db_id);tuple_set_u64 (t,2 , es->al->machine->db_id); -tuple_set_u64 (t,3 , es->thread->db_id); +tuple_set_u64 (t,3 , es->al->thread->db_id);tuple_set_u64 (t,4 , es->comm_db_id);tuple_set_u64 (t,5 , es->dso_db_id);tuple_set_u64 (t,6 , es->sym_db_id);
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 5/15 perf probe: Fix to track down unnamed union/structure members
In reply to Arnaldo Carvalho de MeloFrom: Masami Hiramatsu <[email protected]>
Fix 'perf probe' to track down unnamed union/structure members.
perf probe did not track down the tree of unnamed union/structure members, since it just failed to find given "name" in a parent structure/union. To solve this issue, I've introduced 2 changes.
- Fix die_find_member() to track down the type-DIE if it is unnamed, and if it contains the specified member, returns the unnamed member.
(note that we don't return found member, since unnamed member
has the offset in the parent structure)
- Fix convert_variable_fields() to track down the unnamed union/ structure (one-by-one).
With this patch, perf probe can access unnamed fields:
-----
#./perf probe -nfx ./perf lock__delete ops 'locked_ops=ops->locked.ops' Added new event:
probe_perf:lock__delete (on lock__delete in /home/mhiramat/ksrc/linux-3/tools/perf/perf with ops locked_ops=ops->locked.ops)
You can now use it in all perf tools, such as:
perf record -e probe_perf:lock__delete -aR sleep 1
-----
Report-Link: https://lkml.org/lkml/2015/3/5/431
--- tools/perf/util/dwarf-aux.c | 14 ++++++++++---- tools/perf/util/probe-finder.c | 8 +++++++- 2 files changed, 17 insertions(+), 5 deletions(-)
tools/perf/util/dwarf-aux.c +10 -4
@@ -801,10 +801,16 @@ static int __die_find_member_cb(Dwarf_Die *die_mem, void *data) {const char *name = data; -if ((dwarf_tag (die_mem) == DW_TAG_member) && -die_compare_name (die_mem, name)) -return DIE_FIND_CB_END ; - +if (dwarf_tag (die_mem) == DW_TAG_member) { +if (die_compare_name (die_mem, name)) +return DIE_FIND_CB_END ; +else if (!dwarf_diename (die_mem)) {/* Unnamed structure */ +Dwarf_Die type_die, tmp_die; +if (die_get_type (die_mem, &type_die) && +die_find_member (&type_die, name, &tmp_die)) +return DIE_FIND_CB_END ; + } + }return DIE_FIND_CB_SIBLING ; }
tools/perf/util/probe-finder.c +7 -1
@@ -460,7 +460,8 @@ static int convert_variable_fields(Dwarf_Die *vr_die, const char *varname, " nor array.\n", varname);return -EINVAL ; } -if (field->ref) { +/* While prcessing unnamed field, we don't care about this */ +if (field->ref &&dwarf_diename (vr_die)) {pr_err ("Semantic error: %s must be referred by '.'\n" , field->name);return -EINVAL ;
@@ -491,6 +492,11 @@ static int convert_variable_fields(Dwarf_Die *vr_die, const char *varname, } ref->offset += (long )offs; +/* If this member is unnamed, we need to reuse this field */ +if (!dwarf_diename (die_mem)) +return convert_variable_fields (die_mem, varname, field, + &ref, die_mem); + next:/* Converting next field */ if (field->next)
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 6/15 perf evlist: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf evlist to use perf.data when it is not owned by current user or root.
Example:
# perf record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr 2 10:18 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf evlist File perf.data not owned by current user or root (use -f to override) # perf evlist -f Error: unknown switch `f'
usage: perf evlist [<options>]
-i, --input <file> Input file name
-F, --freq Show the sample frequency
-v, --verbose Show all event attr details
-g, --group Show event group informationAs shown above, the -f option does not work at all.
After this patch:
# perf evlist File perf.data not owned by current user or root (use -f to override) # perf evlist -f cycles
As shown above, the -f option really works now.
--- tools/perf/builtin-evlist.c | 2 ++ tools/perf/util/evsel.h | 1 + 2 files changed, 3 insertions(+)
tools/perf/builtin-evlist.c +2 -0
@@ -24,6 +24,7 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *detailsstruct perf_data_file file = { .path = file_name, .mode =PERF_DATA_MODE_READ , + .force = details->force, }; session =perf_session__new (&file,0 ,NULL );
@@ -47,6 +48,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused) "Show all event attr details"),OPT_BOOLEAN ('g' ,"group" , &details.event_group,"Show event group information" ), +OPT_BOOLEAN ('f' ,"force" , &details.force,"don't complain, do it" ),OPT_END () }; const char * const evlist_usage[] = {
tools/perf/util/evsel.h +1 -0
@@ -335,6 +335,7 @@ struct perf_attr_details {bool freq;bool verbose;bool event_group; +bool force; }; int perf_evsel__fprintf(struct perf_evsel *evsel,
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 7/15 perf inject: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf inject to use perf.data when it is not owned by current user or root.
Example:
# perf record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr 2 10:37 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf inject -v -b -i perf.data -o perf.data.new File perf.data not owned by current user or root (use -f to override) # perf inject -v -b -i perf.data -o perf.data.new -f Error: unknown switch `f'
usage: perf inject [<options>]
-b, --build-ids Inject build-ids into the output stream
-i, --input <file> input file name
-o, --output <file> output file name
-s, --sched-stat Merge sched-stat and sched-switch for getting events where and how long tasks slept
-v, --verbose be more verbose (show build ids, etc)
--kallsyms <file>
kallsyms pathname
As shown above, the -f option does not work at all.
After this patch:
# perf inject -v -b -i perf.data -o perf.data.new File perf.data not owned by current user or root (use -f to override) # perf inject -v -b -i perf.data -o perf.data.new -f build id event received for [kernel.kallsyms]: f6dcb66d8b98f1c0d9eb87bf043444b69f91d30c symsrc__init: cannot get elf header. Looking at the vmlinux_path (7 entries long) Using /proc/kcore for kernel object code Using /proc/kallsyms for symbols
As shown above, the -f option really works now.
--- tools/perf/builtin-inject.c | 1 + 1 file changed, 1 insertion(+)
tools/perf/builtin-inject.c +1 -0
@@ -443,6 +443,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused) "be more verbose (show build ids, etc)"),OPT_STRING (0 ,"kallsyms" , &symbol_conf.kallsyms_name,"file" ,"kallsyms pathname" ), +OPT_BOOLEAN ('f' ,"force" , &file.force,"don't complain, do it" ),OPT_END () }; const char * const inject_usage[] = {
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 8/15 perf kmem: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf kmem to use perf.data when it is not owned by current user or root.
Example:
# perf kmem record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 5315665 Apr 2 10:54 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf kmem stat File perf.data not owned by current user or root (use -f to override) # perf kmem stat -f Error: unknown switch `f'
usage: perf kmem [<options>] {record|stat}
-i, --input <file> input file name
-v, --verbose be more verbose (show symbol address, etc)
--caller show per-callsite statistics
--alloc show per-allocation statistics -s, --sort <key[,key2...]>
sort by keys: ptr, call_site, bytes, hit, pingpong, frag
-l, --line <num> show n lines
--raw-ip show raw ip instead of symbol
As shown above, the -f option does not work at all.
After this patch:
# perf kmem stat File perf.data not owned by current user or root (use -f to override) # perf kmem stat -f SUMMARY ======= Total bytes requested: 437599 Total bytes allocated: 615472 Total bytes wasted on internal fragmentation: 177873 Internal fragmentation: 28.900259% Cross CPU allocations: 6/1192
As shown above, the -f option really works now.
--- tools/perf/builtin-kmem.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
tools/perf/builtin-kmem.c +5 -4
@@ -662,6 +662,10 @@ static int __cmd_record(int argc, const char **argv) int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused) { const char * const default_sort_order = "frag,hit,bytes"; + struct perf_data_file file = { + .path = input_name, + .mode = PERF_DATA_MODE_READ, + }; const struct option kmem_options[] = { OPT_STRING('i', "input", &input_name, "file", "input file name"), OPT_INCR('v', "verbose", &verbose,
@@ -675,6 +679,7 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused) parse_sort_opt),OPT_CALLBACK ('l' ,"line" ,NULL ,"num" ,"show n lines" , parse_line_opt),OPT_BOOLEAN (0 ,"raw-ip" , &raw_ip,"show raw ip instead of symbol" ), +OPT_BOOLEAN ('f' ,"force" , &file.force,"don't complain, do it" ), OPT_END() };const char *const kmem_subcommands[] = {"record" ,"stat" ,NULL };
@@ -683,10 +688,6 @@ int cmd_kmem(int argc, const char **argv, const char *prefix __maybe_unused)NULL };struct perf_session *session; -struct perf_data_file file = { - .path = input_name, - .mode =PERF_DATA_MODE_READ , - };int ret =-1 ; argc = parse_options_subcommand(argc, argv, kmem_options,
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 9/15 perf kvm: Support using -f to override perf.data.guest file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf kvm to use perf.data.guest when it is not owned by current user or root.
Example:
# perf kvm stat record ls # chown Yunlong.Song:Yunlong.Song perf.data.guest # ls -al perf.data.guest -rw------- 1 Yunlong.Song Yunlong.Song 4128937 Apr 2 11:05 perf.data.guest # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf kvm stat report File perf.data.guest not owned by current user or root (use -f to override) Initializing perf session failed # perf kvm stat report -f Error: unknown switch `f'
usage: perf kvm stat report [<options>]
--event <report event>
event for reporting: vmexit, mmio (x86 only), ioport (x86 only)
--vcpu <n> vcpu id to report
-k, --key <sort-key> key for sorting: sample(sort by samples
number) time (sort by avg time)
-p, --pid <pid> analyze events only for given process id(s)
As shown above, the -f option does not work at all.
After this patch:
# perf kvm stat report File perf.data.guest not owned by current user or root (use -f to override) Initializing perf session failed # perf kvm stat report -f Analyze events for all VMs, all VCPUs:
VM-EXIT Samples Samples% Time% Min Time Max Time Avg time
Total Samples:0, Total events handled time:0.00us.
As shown above, the -f option really works now. Since we have not launched any KVM related process, the result shows 0 sample here.
--- tools/perf/builtin-kvm.c | 2 ++ tools/perf/util/kvm-stat.h | 1 + 2 files changed, 3 insertions(+)
tools/perf/builtin-kvm.c +2 -0
@@ -1047,6 +1047,7 @@ static int read_events(struct perf_kvm_stat *kvm)struct perf_data_file file = { .path = kvm->file_name, .mode =PERF_DATA_MODE_READ , + .force = kvm->force, }; kvm->tool = eops;
@@ -1204,6 +1205,7 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv) " time (sort by avg time)"),OPT_STRING ('p' ,"pid" , &kvm->opts.target.pid,"pid" ,"analyze events only for given process id(s)" ), +OPT_BOOLEAN ('f' ,"force" , &kvm->force,"don't complain, do it" ), OPT_END() };
tools/perf/util/kvm-stat.h +1 -0
@@ -99,6 +99,7 @@ struct perf_kvm_stat {int timerfd;unsigned int display_time;bool live; +bool force; };struct kvm_reg_events_ops {
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 10/15 perf lock: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf lock to use perf.data when it is not owned by current user or root.
Example:
# perf lock record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 4880686 Apr 2 14:14 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf lock report File perf.data not owned by current user or root (use -f to override) Initializing perf session failed # perf lock report -f Error: unknown switch `f'
usage: perf lock report [<options>]
-k, --key <acquired> key for sorting (acquired / contended / avg_wait / wait_total / wait_max / wait_min)
As shown above, the -f option does not work at all.
After this patch:
# perf lock report
File perf.data not owned by current user or root (use -f to override)
Initializing perf session failed
# perf lock report -f
Name acquired contended avg wait (ns) total wait (ns) ... &ldata->output_l... 128 0 0 0 ...
&ctx->lock 114 0 0 0 ...
&p->pi_lock 112 0 0 0 ...
&(&pool->lock)->... 112 0 0 0 ...
&(&dentry->d_loc... 70 0 0 0 ...
&(&newf->file_lo... 62 0 0 0 ...
&(&fs->lock)->rl... 43 0 0 0 ......
As shown above, the -f option really works now.
--- tools/perf/builtin-lock.c | 5 +++++ 1 file changed, 5 insertions(+)
tools/perf/builtin-lock.c +5 -0
@@ -846,6 +846,8 @@ static const struct perf_evsel_str_handler lock_tracepoints[] = { { "lock:lock_release", perf_evsel__process_lock_release, }, /* CONFIG_LOCKDEP */ }; +static bool force; +static int __cmd_report (bool display_info) {int err = -EINVAL ;
@@ -857,6 +859,7 @@ static int __cmd_report(bool display_info)struct perf_data_file file = { .path = input_name, .mode =PERF_DATA_MODE_READ , + .force = force, }; session =perf_session__new (&file, false, &eops);
@@ -945,6 +948,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused) "dump thread list in perf.data"),OPT_BOOLEAN ('m' ,"map" , &info_map,"map of lock instances (address:name table)" ), +OPT_BOOLEAN ('f' ,"force" , &force,"don't complain, do it" ),OPT_END () }; const struct option lock_options[] = {
@@ -956,6 +960,7 @@ int cmd_lock(int argc, const char **argv, const char *prefix __maybe_unused)const struct option report_options[] = {OPT_STRING ('k' ,"key" , &sort_key,"acquired" ,"key for sorting (acquired / contended / avg_wait / wait_total / wait_max / wait_min)" ), +OPT_BOOLEAN ('f' ,"force" , &force,"don't complain, do it" ),/* TODO: type */ OPT_END () };
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 11/15 perf mem: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf mem to use perf.data when it is not owned by current user or root.
Example:
# perf mem -t load record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 16392 Apr 2 14:34 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf mem -D report File perf.data not owned by current user or root (use -f to override) # perf mem -D -f report Error: unknown switch `f'
usage: perf mem [<options>] {record|report}
-t, --type <type> memory operations(load,store) Default load,store
-D, --dump-raw-samples
dump raw samples in ASCII
-U, --hide-unresolved
Only display entries resolved to a symbol
-i, --input <file> input file name
-C, --cpu <cpu> list of cpus to profile
-x, --field-separator <separator>
separator for columns, no spaces will be added between columns '.' is reserved.
As shown above, the -f option does not work at all.
After this patch:
# perf mem -D report File perf.data not owned by current user or root (use -f to override) # perf mem -D -f report # PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL 39095 39095 0xffffffff81127e40 0x016ffff887f45148338 8 0x68100142 /proc/kcore:perf_event_aux 39095 39095 0xffffffff8100a3fe 0xffff89007f8cb7d0 6 0x68100142 /proc/kcore:native_sched_clock 39095 39095 0xffffffff81309139 0xffff88bf44c9ded8 6 0x68100142 /proc/kcore:acpi_map_lookup 39095 39095 0xffffffff810f8c4c 0xffff89007f8ccd88 6 0x68100142 /proc/kcore:rcu_nmi_exit 39095 39095 0xffffffff81136346 0xffff88fea995dd50 6 0x68100142 /proc/kcore:unlock_page 39095 39095 0xffffffff812a64a2 0xffff88fea995dcc8 6 0x68100142 /proc/kcore:half_md4_transform 39095 39095 0x7f0cf877c7e9 0x25dfb94 6 0x68100142 /lib64/libc-2.19.so:__readdir64 39095 39095 0x7f0cf87575a3 0x7f0cf9163731 6 0x68100142 /lib64/libc-2.19.so:__strcoll_l 39095 39095 0xffffffff8116910e 0xffffea01c1bfbd50 23 0x68100242 /proc/kcore:page_remove_rmap
As shown above, the -f option really works now.
--- tools/perf/builtin-mem.c | 3 +++ 1 file changed, 3 insertions(+)
tools/perf/builtin-mem.c +3 -0
@@ -15,6 +15,7 @@ struct perf_mem {char const *input_name;bool hide_unresolved;bool dump_raw; +bool force;int operation;const char *cpu_list;DECLARE_BITMAP (cpu_bitmap,MAX_NR_CPUS );
@@ -120,6 +121,7 @@ static int report_raw_events(struct perf_mem *mem)struct perf_data_file file = { .path = input_name, .mode =PERF_DATA_MODE_READ , + .force = mem->force, };int err = -EINVAL ;int ret;
@@ -290,6 +292,7 @@ int cmd_mem(int argc, const char **argv, const char *prefix __maybe_unused) "separator", "separator for columns, no spaces will be added" " between columns '.' is reserved."), + OPT_BOOLEAN('f', "force", &mem.force, "don't complain, do it"), OPT_END() };const char *const mem_subcommands[] = {"record" ,"report" ,NULL };
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 12/15 perf script: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf script to use perf.data when it is not owned by current user or root. Change the short option name of --fields to -F to avoid confusion with --force.
Example:
# perf record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 28360 Apr 2 14:53 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf script File perf.data not owned by current user or root (use -f to override) # perf script -f Error: switch `f' requires a value
usage: perf script [<options>]
or: perf script [<options>] record <script> [<record-options>] <command>
or: perf script [<options>] report <script> [script-args]
or: perf script [<options>] <script> [<record-options>] <command>
or: perf script [<options>] <top-script> [script-args]
-f, --fields <str> comma separated output fields prepend with
'type:'. Valid types: hw,sw,trace,raw. Fields:
comm,tid,pid,time,cpu,event,trace,ip,sym,dso,addr,symoff,period
As shown above, the -f option does not work at all. And -f is already taken up by --fields, which makes --force confused, so change the short option name of --fields to -F like what other perf commands do (e.g. perf report -F) and use -f as the short option name of --force.
After this patch:
# perf script
File perf.data not owned by current user or root (use -f to override)
# perf script -f
:41298 41298 2590086.564226: 1 cycles: ffffffff8103efc6
native_write_msr_safe ([kernel.kallsyms])
:41298 41298 2590086.564244: 1 cycles: ffffffff8103efc6
native_write_msr_safe ([kernel.kallsyms])
:41298 41298 2590086.564249: 7 cycles: ffffffff8103efc6
native_write_msr_safe ([kernel.kallsyms])
:41298 41298 2590086.564255: 176 cycles: ffffffff8103efc6
native_write_msr_safe ([kernel.kallsyms])
ls 41298 2590086.567346: 4059 cycles: ffffffff8105a592
raise_softirq ([kernel.kallsyms])
ls 41298 2590086.567353: 3717 cycles: ffffffff8105a592
raise_softirq ([kernel.kallsyms])
ls 41298 2590086.567358: 63058 cycles: ffffffff8105a592
raise_softirq ([kernel.kallsyms])
ls 41298 2590086.567448: 1706255 cycles: 406ae0
[unknown] (/usr/bin/ls)As shown above, the -f option really works now.
--- tools/perf/builtin-script.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
tools/perf/builtin-script.c +5 -4
@@ -1515,6 +1515,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) .ordering_requires_timestamps = true, }, }; +struct perf_data_file file = { + .mode =PERF_DATA_MODE_READ , + };const struct option options[] = {OPT_BOOLEAN ('D' ,"dump-raw-trace" , &dump_trace, "dump raw trace in ASCII"),
@@ -1542,7 +1545,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) "When printing symbols do not display call chain"),OPT_STRING (0 ,"symfs" , &symbol_conf.symfs,"directory" ,"Look for files with symbols relative to this directory" ), -OPT_CALLBACK ('f' ,"fields" ,NULL ,"str" , +OPT_CALLBACK ('F' ,"fields" ,NULL ,"str" ,"comma separated output fields prepend with 'type:'. " "Valid types: hw,sw,trace,raw. " "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,"
@@ -1566,6 +1569,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) "Show the fork/comm/exit events"),OPT_BOOLEAN ('\0' ,"show-mmap-events" , &script.show_mmap_events,"Show the mmap events" ), +OPT_BOOLEAN ('f' ,"force" , &file.force,"don't complain, do it" ), OPT_END() };const char *const script_subcommands[] = {"record" ,"report" ,NULL };
@@ -1577,9 +1581,6 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)"perf script [<options>] <top-script> [script-args]" , NULL }; -struct perf_data_file file = { - .mode =PERF_DATA_MODE_READ , - };setup_scripting ();
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 13/15 perf timechart: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf timechart to use perf.data when it is not owned by current user or root.
Example:
# perf timechart record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 5471744 Apr 2 15:15 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf timechart File perf.data not owned by current user or root (use -f to override) # perf timechart -f Error: unknown switch `f'
usage: perf timechart [<options>] {record}
-i, --input <file> input file name
-o, --output <file> output file name
-w, --width <n> page width --highlight <duration or task name>
highlight tasks. Pass duration in ns or process name.
-P, --power-only output power data only
-T, --tasks-only output processes data only
-p, --process <process>
process selector. Pass a pid or process name.
--symfs <directory>
Look for files with symbols relative to this directory
-n, --proc-num <n> min. number of tasks to print
-t, --topology sort CPUs according to topology
--io-skip-eagain skip EAGAIN errors
--io-min-time <time>
all IO faster than min-time will visually appear longer
--io-merge-dist <time>
merge events that are merge-dist us apart
As shown above, the -f option does not work at all.
After this patch:
# perf timechart File perf.data not owned by current user or root (use -f to override) # perf timechart -f Written 0.0 seconds of trace to output.svg. # cat output.svg <?xml version="1.0" standalone="no"?> <!DOCTYPE svg SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg width="1000" height="10110" version="1.1" xmlns="http://www.w3.org/2000/svg"> <defs> <style type="text/css"> <![CDATA[ rect { stroke-width: 1; } ... ...
As shown above, the -f option really works now.
--- tools/perf/builtin-timechart.c | 3 +++ 1 file changed, 3 insertions(+)
tools/perf/builtin-timechart.c +3 -0
@@ -67,6 +67,7 @@ struct timechart { skip_eagain;u64 min_time, merge_dist; +bool force; };struct per_pidcomm ;
@@ -1598,6 +1599,7 @@ static int __cmd_timechart(struct timechart *tchart, const char *output_name)struct perf_data_file file = { .path = input_name, .mode =PERF_DATA_MODE_READ , + .force = tchart->force, }; struct perf_session *session = perf_session__new(&file, false,
@@ -1956,6 +1958,7 @@ int cmd_timechart(int argc, const char **argv,OPT_CALLBACK (0 ,"io-merge-dist" , &tchart.merge_dist,"time" ,"merge events that are merge-dist us apart" , parse_time), +OPT_BOOLEAN ('f' ,"force" , &tchart.force,"don't complain, do it" ), OPT_END() };const char *const timechart_subcommands[] = {"record" ,NULL };
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 14/15 perf trace: Support using -f to override perf.data file ownership
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf trace to use perf.data when it is not owned by current user or root.
Example:
# perf trace record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 4153101 Apr 2 15:28 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf trace -i perf.data File perf.data not owned by current user or root (use -f to override) # perf trace -i perf.data -f Error: unknown switch `f'
usage: perf trace [<options>] [<command>]
or: perf trace [<options>] -- <command> [<options>]
or: perf trace record [<options>] [<command>]
or: perf trace record [<options>] -- <command> [<options>]
--event <event> event selector. use 'perf list' to list
available events
--comm show the thread COMM next to its id
--tool_stats show tool stats
-e, --expr <expr> list of events to trace
-o, --output <file> output file name
-i, --input <file> Analyze events in file
-p, --pid <pid> trace events on existing process id
-t, --tid <tid> trace events on existing thread id --filter-pids <float>
...
As shown above, the -f option does not work at all.
After this patch:
# perf trace -i perf.data File perf.data not owned by current user or root (use -f to override) # perf trace -i perf.data -f 0.056 ( 0.002 ms): ls/47325 brk( ... 0.108 ( 0.018 ms): ls/47325 mmap(len: 4096, prot: READ|WRITE, ... 0.145 ( 0.013 ms): ls/47325 access(filename: 0x7f31259a0eb0, ... 0.172 ( 0.008 ms): ls/47325 open(filename: 0x7fffeb9a0d00, ... 0.180 ( 0.004 ms): ls/47325 stat(filename: 0x7fffeb9a0d00, ... 0.185 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00, ... 0.189 ( 0.003 ms): ls/47325 stat(filename: 0x7fffeb9a0d00, ... 0.195 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00, ... 0.199 ( 0.002 ms): ls/47325 stat(filename: 0x7fffeb9a0d00, ... 0.205 ( 0.004 ms): ls/47325 open(filename: 0x7fffeb9a0d00, ... 0.211 ( 0.004 ms): ls/47325 stat(filename: 0x7fffeb9a0d00, ... 0.220 ( 0.007 ms): ls/47325 open(filename: 0x7f312599e8ff, ... ... ...
As shown above, the -f option really works now.
--- tools/perf/builtin-trace.c | 3 +++ 1 file changed, 3 insertions(+)
tools/perf/builtin-trace.c +3 -0
@@ -1254,6 +1254,7 @@ struct trace {bool show_comm;bool show_tool_stats;bool trace_syscalls; +bool force;int trace_pgfaults; };
@@ -2345,6 +2346,7 @@ static int trace__replay(struct trace *trace)struct perf_data_file file = { .path = input_name, .mode =PERF_DATA_MODE_READ , + .force = trace->force, };struct perf_session *session;struct perf_evsel *evsel;
@@ -2693,6 +2695,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __maybe_unused)OPT_CALLBACK_DEFAULT ('F' ,"pf" , &trace.trace_pgfaults,"all|maj|min" ,"Trace pagefaults" , parse_pagefaults,"maj" ),OPT_BOOLEAN (0 ,"syscalls" , &trace.trace_syscalls,"Trace syscalls" ), +OPT_BOOLEAN ('f' ,"force" , &trace.force,"don't complain, do it" ), OPT_END() };const char *const trace_subcommands[] = {"record" ,NULL };
Signature · 1 line
1.9.3
Arnaldo Carvalho de Melo
maintainerPATCH 15/15 perf data: Support using -f to override perf.data file ownership for 'convert'
In reply to Arnaldo Carvalho de MeloFrom: Yunlong Song <[email protected]>
Enable perf data convert to use perf.data when it is not owned by current user or root.
Example:
# perf record ls # chown Yunlong.Song:Yunlong.Song perf.data # ls -al perf.data -rw------- 1 Yunlong.Song Yunlong.Song 28260 Apr 2 17:35 perf.data # id uid=0(root) gid=0(root) groups=0(root),64(pkcs11)
Before this patch:
# perf data convert --to-ctf=./ctf-data/ File perf.data not owned by current user or root (use -f to override) # perf data convert --to-ctf=./ctf-data/ -f Error: unknown switch `f'
usage: perf data convert [<options>]
-v, --verbose be more verbose
-i, --input <file> input file name
--to-ctf ... Convert to CTF formatAfter this patch:
# perf data convert --to-ctf=./ctf-data/ File perf.data not owned by current user or root (use -f to override) # perf data convert --to-ctf=./ctf-data/ -f # ls ctf-data/ metadata perf_stream_0
As shown above, the -f option really works now.
--- tools/perf/builtin-data.c | 4 +++- tools/perf/util/data-convert-bt.c | 3 ++- tools/perf/util/data-convert-bt.h | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-)
tools/perf/builtin-data.c +3 -1
@@ -53,12 +53,14 @@ static int cmd_data_convert(int argc, const char **argv, const char *prefix __maybe_unused) {const char *to_ctf =NULL ; +bool force = false;const struct option options[] = {OPT_INCR ('v' ,"verbose" , &verbose,"be more verbose" ),OPT_STRING ('i' ,"input" , &input_name,"file" ,"input file name" ), #ifdef HAVE_LIBBABELTRACE_SUPPORTOPT_STRING (0 ,"to-ctf" , &to_ctf,NULL ,"Convert to CTF format" ), #endif +OPT_BOOLEAN ('f' ,"force" , &force,"don't complain, do it" ),OPT_END () };
@@ -76,7 +78,7 @@ static int cmd_data_convert(int argc, const char **argv,if (to_ctf) {#ifdef HAVE_LIBBABELTRACE_SUPPORT -return bt_convert__perf2ctf (input_name, to_ctf); +return bt_convert__perf2ctf (input_name, to_ctf, force);#else pr_err ("The libbabeltrace support is not compiled in.\n" );return -1 ;
tools/perf/util/data-convert-bt.c +2 -1
@@ -791,12 +791,13 @@ err:return -1 ; } -int bt_convert__perf2ctf (const char *input,const char *path) +int bt_convert__perf2ctf (const char *input,const char *path,bool force) {struct perf_session *session;struct perf_data_file file = { .path = input, .mode =PERF_DATA_MODE_READ , + .force = force, };struct convert c = { .tool = {
tools/perf/util/data-convert-bt.h +1 -1
@@ -2,7 +2,7 @@#define __DATA_CONVERT_BT_H#ifdef HAVE_LIBBABELTRACE_SUPPORT -int bt_convert__perf2ctf (const char *input_name,const char *to_ctf); +int bt_convert__perf2ctf (const char *input_name,const char *to_ctf,bool force);#endif /* HAVE_LIBBABELTRACE_SUPPORT */ #endif /* __DATA_CONVERT_BT_H */
Signature · 1 line
1.9.3
Quoted 74 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling,
- Arnaldo
The following changes since commit
e1abf2cc8d5d80b41c4419368ec743ccadbb131e:bpf: Fix the build on BPF_SYSCALL=y && !CONFIG_TRACING kernels, make it more configurable (2015-04-02 16:28:06 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingofor you to fetch changes up to
bd05954bfa17f03a7bd4454178ba09786b35e383:perf data: Support using -f to override perf.data file ownership for 'convert' (2015-04-02 13:18:52 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:User visible:
- Support unnamed union/structure members data collection in 'perf probe' (Masami Hiramatsu)
- Support missing -f to override perf.data file ownership (Yunlong Song)
Infrastructure:
- No need to lookup thread twice when processing samples in 'perf script' (Arnaldo Carvalho de Melo)
- No need to pass thread twice to the scripting callbacks (Arnaldo Carvalho de Melo)
- No need to pass thread twice to the db-export facility (Arnaldo Carvalho de Melo)
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Arnaldo Carvalho de Melo (4):
perf script: No need to lookup thread twice
perf scripting: No need to pass thread twice to the scripting callbacks perf db-export: No need to pass thread twice todb_export__sampleperf db-export: No need to have ->thread twice in structexport_sampleMasami Hiramatsu (1):
perf probe: Fix to track down unnamed union/structure membersYunlong Song (10):
perf evlist: Support using -f to override perf.data file ownership perf inject: Support using -f to override perf.data file ownership perf kmem: Support using -f to override perf.data file ownership perf kvm: Support using -f to override perf.data.guest file ownership perf lock: Support using -f to override perf.data file ownership perf mem: Support using -f to override perf.data file ownership perf script: Support using -f to override perf.data file ownership perf timechart: Support using -f to override perf.data file ownership perf trace: Support using -f to override perf.data file ownership perf data: Support using -f to override perf.data file ownership for 'convert'tools/perf/builtin-data.c | 4 +++- tools/perf/builtin-evlist.c | 2 ++ tools/perf/builtin-inject.c | 1 + tools/perf/builtin-kmem.c | 9 +++++---- tools/perf/builtin-kvm.c | 2 ++ tools/perf/builtin-lock.c | 5 +++++ tools/perf/builtin-mem.c | 3 +++ tools/perf/builtin-script.c | 23 ++++++++-------------- tools/perf/builtin-timechart.c | 3 +++ tools/perf/builtin-trace.c | 3 +++ tools/perf/util/data-convert-bt.c | 3 ++- tools/perf/util/data-convert-bt.h | 2 +- tools/perf/util/db-export.c | 4 ++-- tools/perf/util/db-export.h | 3 +-- tools/perf/util/dwarf-aux.c | 14 +++++++++----
Quoted 8 lines
tools/perf/util/evsel.h | 1 + tools/perf/util/kvm-stat.h | 1 + tools/perf/util/probe-finder.c | 8 +++++++- .../perf/util/scripting-engines/trace-event-perl.c | 5 ++--- .../util/scripting-engines/trace-event-python.c | 16 ++++++--------- tools/perf/util/trace-event-scripting.c | 1 - tools/perf/util/trace-event.h | 3 +-- 22 files changed, 69 insertions(+), 47 deletions(-)
Pulled, thanks a lot Arnaldo!
Ingo