trace-cmd: Updates for kvm plugin
cover trace-cmd: Updates for kvm plugin
Patch 1 is resent unchanged from a previous round, patches 2 and 3 improve the output of nested vmexit tracepoints.
Jan Kiszka (3):
trace-cmd: Report unknown VMX exit reasons with code
trace-cmd: Factor out print_exit_reason in kvm plugin
trace-cmd: Fix and cleanup kvm_nested_vmexit tracepoints
plugin_kvm.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-)
Signature · 1 line
1.8.1.1.298.ge7eed54
PATCH 1/3 trace-cmd: Report unknown VMX exit reasons with code
From: Jan Kiszka <[email protected]>
Allows to parse the result even if the KVM plugin does not yet understand a specific exit code.
--- plugin_kvm.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
plugin_kvm.c +8 -4
@@ -240,9 +240,8 @@ static const char *find_exit_reason(unsigned isa, int val)for (i =0 ; strings[i].val >=0 ; i++)if (strings[i].val == val)break ; -if (strings[i].str) -return strings[i].str; -return "UNKNOWN" ; + +return strings[i].str; } static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record,
@@ -251,6 +250,7 @@ static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record,unsigned long long isa;unsigned long long val;unsigned long long info1 =0 , info2 =0 ; +const char *reason;if (pevent_get_field_val (s, event,"exit_reason" , record, &val,1 ) <0 )return -1 ;
@@ -258,7 +258,11 @@ static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record,if (pevent_get_field_val (s, event,"isa" , record, &isa,0 ) <0 ) isa =1 ; -trace_seq_printf (s,"reason %s" ,find_exit_reason (isa, val)); + reason =find_exit_reason (isa, val); +if (reason) +trace_seq_printf (s,"reason %s" , reason); +else +trace_seq_printf (s,"reason UNKNOWN (%llu)" , val);pevent_print_num_field (s," rip 0x%lx" , event,"guest_rip" , record,1 );
Signature · 1 line
1.8.1.1.298.ge7eed54
PATCH 2/3 trace-cmd: Factor out print_exit_reason in kvm plugin
In reply to Jan KiszkaFrom: Jan Kiszka <[email protected]>
We will reuse it for nested vmexit tracepoints.
--- plugin_kvm.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
plugin_kvm.c +13 -4
@@ -244,15 +244,14 @@ static const char *find_exit_reason(unsigned isa, int val)return strings[i].str; } -static int kvm_exit_handler (struct trace_seq *s,struct pevent_record *record, -struct event_format *event,void *context) +static int print_exit_reason (struct trace_seq *s,struct pevent_record *record, +struct event_format *event,const char *field) {unsigned long long isa;unsigned long long val; -unsigned long long info1 =0 , info2 =0 ;const char *reason; -if (pevent_get_field_val (s, event,"exit_reason" , record, &val,1 ) <0 ) +if (pevent_get_field_val (s, event, field, record, &val,1 ) <0 )return -1 ;if (pevent_get_field_val (s, event,"isa" , record, &isa,0 ) <0 )
@@ -263,6 +262,16 @@ static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record,trace_seq_printf (s,"reason %s" , reason); else trace_seq_printf(s, "reason UNKNOWN (%llu)", val); +return 0 ; +} + +static int kvm_exit_handler (struct trace_seq *s,struct pevent_record *record, +struct event_format *event,void *context) +{ +unsigned long long info1 =0 , info2 =0 ; + +if (print_exit_reason (s, record, event,"exit_reason" ) <0 ) +return -1 ;pevent_print_num_field (s," rip 0x%lx" , event,"guest_rip" , record,1 );
Signature · 1 line
1.8.1.1.298.ge7eed54
tip-bot for Jan Kiszka
merge bot[tip:perf/core] tools lib traceevent: Factor out print_exit_reason in kvm plugin
tools lib traceevent: Factor out print_exit_reason in kvm plugin
Commit-ID: 6f21037b3295d4ba20ad2cc7cd4073ec64440f8f Gitweb: http://git.kernel.org/tip/6f21037b3295d4ba20ad2cc7cd4073ec64440f8f Author: Jan Kiszka <[email protected]> AuthorDate: Thu, 12 Jun 2014 22:10:04 -0400 Committer: Jiri Olsa <[email protected]> CommitDate: Thu, 19 Jun 2014 18:18:20 +0200
tools lib traceevent: Factor out print_exit_reason in kvm plugin
We will reuse it for nested vmexit tracepoints.
--- tools/lib/traceevent/plugin_kvm.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
tools/lib/traceevent/plugin_kvm.c +13 -4
@@ -244,15 +244,14 @@ static const char *find_exit_reason(unsigned isa, int val)return strings[i].str; } -static int kvm_exit_handler (struct trace_seq *s,struct pevent_record *record, -struct event_format *event,void *context) +static int print_exit_reason (struct trace_seq *s,struct pevent_record *record, +struct event_format *event,const char *field) {unsigned long long isa;unsigned long long val; -unsigned long long info1 =0 , info2 =0 ;const char *reason; -if (pevent_get_field_val (s, event,"exit_reason" , record, &val,1 ) <0 ) +if (pevent_get_field_val (s, event, field, record, &val,1 ) <0 )return -1 ;if (pevent_get_field_val (s, event,"isa" , record, &isa,0 ) <0 )
@@ -263,6 +262,16 @@ static int kvm_exit_handler(struct trace_seq *s, struct pevent_record *record,trace_seq_printf (s,"reason %s" , reason); else trace_seq_printf(s, "reason UNKNOWN (%llu)", val); +return 0 ; +} + +static int kvm_exit_handler (struct trace_seq *s,struct pevent_record *record, +struct event_format *event,void *context) +{ +unsigned long long info1 =0 , info2 =0 ; + +if (print_exit_reason (s, record, event,"exit_reason" ) <0 ) +return -1 ;pevent_print_num_field (s," rip 0x%lx" , event,"guest_rip" , record,1 );
PATCH 3/3 trace-cmd: Fix and cleanup kvm_nested_vmexit tracepoints
In reply to Jan KiszkaFrom: Jan Kiszka <[email protected]>
Fix several issues of kvm_nested_vmexit[_inject]: field width aren't supported with pevent_print, rip was printed twice/incorrectly, SVM ISA was hard-coded, we don't use ':' to separate field names.
--- plugin_kvm.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
plugin_kvm.c +6 -12
@@ -330,19 +330,13 @@ static int kvm_emulate_insn_handler(struct trace_seq *s, struct pevent_record *rstatic int kvm_nested_vmexit_inject_handler (struct trace_seq *s,struct pevent_record *record,struct event_format *event,void *context) { -unsigned long long val; - -pevent_print_num_field (s," rip %0x016llx" , event,"rip" , record,1 ); - -if (pevent_get_field_val (s, event,"exit_code" , record, &val,1 ) <0 ) +if (print_exit_reason (s, record, event,"exit_code" ) <0 )return -1 ; -trace_seq_printf (s,"reason %s" ,find_exit_reason (2 , val)); - -pevent_print_num_field (s," ext_inf1: %0x016llx" , event,"exit_info1" , record,1 ); -pevent_print_num_field (s," ext_inf2: %0x016llx" , event,"exit_info2" , record,1 ); -pevent_print_num_field (s," ext_int: %0x016llx" , event,"exit_int_info" , record,1 ); -pevent_print_num_field (s," ext_int_err: %0x016llx" , event,"exit_int_info_err" , record,1 ); +pevent_print_num_field (s," info1 %llx" , event,"exit_info1" , record,1 ); +pevent_print_num_field (s," info2 %llx" , event,"exit_info2" , record,1 ); +pevent_print_num_field (s," int_info %llx" , event,"exit_int_info" , record,1 ); +pevent_print_num_field (s," int_info_err %llx" , event,"exit_int_info_err" , record,1 );return 0 ; }
@@ -350,7 +344,7 @@ static int kvm_nested_vmexit_inject_handler(struct trace_seq *s, struct pevent_rstatic int kvm_nested_vmexit_handler (struct trace_seq *s,struct pevent_record *record,struct event_format *event,void *context) { -pevent_print_num_field (s," rip %0x016llx" , event,"rip" , record,1 ); +pevent_print_num_field (s,"rip %lx " , event,"rip" , record,1 );return kvm_nested_vmexit_inject_handler (s, record, event, context); }
Signature · 1 line
1.8.1.1.298.ge7eed54
tip-bot for Jan Kiszka
merge bot[tip:perf/core] tools lib traceevent: Fix and cleanup kvm_nested_vmexit tracepoints
tools lib traceevent: Fix and cleanup kvm_nested_vmexit tracepoints
Commit-ID: 7f6e3635db39fb2400dc515192125e7b73258000 Gitweb: http://git.kernel.org/tip/7f6e3635db39fb2400dc515192125e7b73258000 Author: Jan Kiszka <[email protected]> AuthorDate: Thu, 12 Jun 2014 22:10:06 -0400 Committer: Jiri Olsa <[email protected]> CommitDate: Thu, 19 Jun 2014 18:18:30 +0200
tools lib traceevent: Fix and cleanup kvm_nested_vmexit tracepoints
Fix several issues of kvm_nested_vmexit[_inject]: field width aren't supported with pevent_print, rip was printed twice/incorrectly, SVM ISA was hard-coded, we don't use ':' to separate field names.
--- tools/lib/traceevent/plugin_kvm.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
tools/lib/traceevent/plugin_kvm.c +6 -12
@@ -330,19 +330,13 @@ static int kvm_emulate_insn_handler(struct trace_seq *s,static int kvm_nested_vmexit_inject_handler (struct trace_seq *s,struct pevent_record *record,struct event_format *event,void *context) { -unsigned long long val; - -pevent_print_num_field (s," rip %0x016llx" , event,"rip" , record,1 ); - -if (pevent_get_field_val (s, event,"exit_code" , record, &val,1 ) <0 ) +if (print_exit_reason (s, record, event,"exit_code" ) <0 )return -1 ; -trace_seq_printf (s,"reason %s" ,find_exit_reason (2 , val)); - -pevent_print_num_field (s," ext_inf1: %0x016llx" , event,"exit_info1" , record,1 ); -pevent_print_num_field (s," ext_inf2: %0x016llx" , event,"exit_info2" , record,1 ); -pevent_print_num_field (s," ext_int: %0x016llx" , event,"exit_int_info" , record,1 ); -pevent_print_num_field (s," ext_int_err: %0x016llx" , event,"exit_int_info_err" , record,1 ); +pevent_print_num_field (s," info1 %llx" , event,"exit_info1" , record,1 ); +pevent_print_num_field (s," info2 %llx" , event,"exit_info2" , record,1 ); +pevent_print_num_field (s," int_info %llx" , event,"exit_int_info" , record,1 ); +pevent_print_num_field (s," int_info_err %llx" , event,"exit_int_info_err" , record,1 );return 0 ; }
@@ -350,7 +344,7 @@ static int kvm_nested_vmexit_inject_handler(struct trace_seq *s, struct pevent_rstatic int kvm_nested_vmexit_handler (struct trace_seq *s,struct pevent_record *record,struct event_format *event,void *context) { -pevent_print_num_field (s," rip %0x016llx" , event,"rip" , record,1 ); +pevent_print_num_field (s,"rip %lx " , event,"rip" , record,1 );return kvm_nested_vmexit_inject_handler (s, record, event, context); }