As same reason with previous patch, use "cyles" instead of "cycles:P"
event by default to sample guest for "perf kvm top" command on Intel
platforms.
Reported-by: Kevin Tian <kevin.tian@intel.com>
Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event")
Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
---
tools/perf/builtin-kvm.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 7e48d2437710..d72b40f3df12 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -2075,6 +2075,34 @@ __cmd_buildid_list(const char *file_name, int argc, const char **argv)
return ret;
}
+static int __cmd_top(int argc, const char **argv)
+{
+ int i = 0, ret;
+ const char **rec_argv;
+
+ /*
+ * kvm_add_default_arch_event() may add 2 extra options, so
+ * allocate 2 more pointers in adavance.
+ */
+ rec_argv = calloc(argc + 2 + 1, sizeof(char *));
+ if (!rec_argv)
+ return -ENOMEM;
+
+ for (i = 0; i < argc; i++)
+ rec_argv[i] = argv[i];
+
+ BUG_ON(i != argc);
+
+ ret = kvm_add_default_arch_event(&i, rec_argv);
+ if (ret)
+ return -EINVAL;
+
+ ret = cmd_top(i, rec_argv);
+ free(rec_argv);
+
+ return ret;
+}
+
int cmd_kvm(int argc, const char **argv)
{
const char *file_name = NULL;
@@ -2135,7 +2163,7 @@ int cmd_kvm(int argc, const char **argv)
else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0]))
return cmd_diff(argc, argv);
else if (!strcmp(argv[0], "top"))
- return cmd_top(argc, argv);
+ return __cmd_top(argc, argv);
else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0]))
return __cmd_buildid_list(file_name, argc, argv);
#if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT)
--
2.34.1
On 8/5/2025 8:46 AM, Dapeng Mi wrote: > As same reason with previous patch, use "cyles" instead of "cycles:P" > event by default to sample guest for "perf kvm top" command on Intel > platforms. > > Reported-by: Kevin Tian <kevin.tian@intel.com> > Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event") > Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> > --- > tools/perf/builtin-kvm.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c > index 7e48d2437710..d72b40f3df12 100644 > --- a/tools/perf/builtin-kvm.c > +++ b/tools/perf/builtin-kvm.c > @@ -2075,6 +2075,34 @@ __cmd_buildid_list(const char *file_name, int argc, const char **argv) > return ret; > } > > +static int __cmd_top(int argc, const char **argv) > +{ > + int i = 0, ret; > + const char **rec_argv; > + > + /* > + * kvm_add_default_arch_event() may add 2 extra options, so > + * allocate 2 more pointers in adavance. > + */ > + rec_argv = calloc(argc + 2 + 1, sizeof(char *)); > + if (!rec_argv) > + return -ENOMEM; > + > + for (i = 0; i < argc; i++) > + rec_argv[i] = argv[i]; > + > + BUG_ON(i != argc); > + > + ret = kvm_add_default_arch_event(&i, rec_argv); > + if (ret) > + return -EINVAL; > + > + ret = cmd_top(i, rec_argv); > + free(rec_argv); > + > + return ret; > +} > + > int cmd_kvm(int argc, const char **argv) > { > const char *file_name = NULL; > @@ -2135,7 +2163,7 @@ int cmd_kvm(int argc, const char **argv) > else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) > return cmd_diff(argc, argv); > else if (!strcmp(argv[0], "top")) > - return cmd_top(argc, argv); > + return __cmd_top(argc, argv); > else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) > return __cmd_buildid_list(file_name, argc, argv); > #if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) This patch would impact powerpc platform as well. Base on the comments before kvm_add_default_arch_event() in tools/perf/arch/powerpc/util/kvm-stat.c, I suppose powerpc also needs this change, otherwise "perf kvm top" command can't sample guest records. But I have no any powerpc on my hand, so it's not tested on powerpc platform. Any test on powerpc is appreciated. Thanks.
On 05/08/25 6:27 am, Mi, Dapeng wrote: > On 8/5/2025 8:46 AM, Dapeng Mi wrote: >> As same reason with previous patch, use "cyles" instead of "cycles:P" >> event by default to sample guest for "perf kvm top" command on Intel >> platforms. >> >> Reported-by: Kevin Tian <kevin.tian@intel.com> >> Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event") >> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> >> --- >> tools/perf/builtin-kvm.c | 30 +++++++++++++++++++++++++++++- >> 1 file changed, 29 insertions(+), 1 deletion(-) >> >> diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c >> index 7e48d2437710..d72b40f3df12 100644 >> --- a/tools/perf/builtin-kvm.c >> +++ b/tools/perf/builtin-kvm.c >> @@ -2075,6 +2075,34 @@ __cmd_buildid_list(const char *file_name, int argc, const char **argv) >> return ret; >> } >> >> +static int __cmd_top(int argc, const char **argv) >> +{ >> + int i = 0, ret; >> + const char **rec_argv; >> + >> + /* >> + * kvm_add_default_arch_event() may add 2 extra options, so >> + * allocate 2 more pointers in adavance. >> + */ >> + rec_argv = calloc(argc + 2 + 1, sizeof(char *)); >> + if (!rec_argv) >> + return -ENOMEM; >> + >> + for (i = 0; i < argc; i++) >> + rec_argv[i] = argv[i]; >> + >> + BUG_ON(i != argc); >> + >> + ret = kvm_add_default_arch_event(&i, rec_argv); >> + if (ret) >> + return -EINVAL; >> + >> + ret = cmd_top(i, rec_argv); >> + free(rec_argv); >> + >> + return ret; >> +} >> + >> int cmd_kvm(int argc, const char **argv) >> { >> const char *file_name = NULL; >> @@ -2135,7 +2163,7 @@ int cmd_kvm(int argc, const char **argv) >> else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) >> return cmd_diff(argc, argv); >> else if (!strcmp(argv[0], "top")) >> - return cmd_top(argc, argv); >> + return __cmd_top(argc, argv); >> else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) >> return __cmd_buildid_list(file_name, argc, argv); >> #if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > This patch would impact powerpc platform as well. Base on the comments > before kvm_add_default_arch_event() in > tools/perf/arch/powerpc/util/kvm-stat.c, I suppose powerpc also needs this > change, otherwise "perf kvm top" command can't sample guest records. But I > have no any powerpc on my hand, so it's not tested on powerpc platform. Any > test on powerpc is appreciated. Thanks. I have powerpc systems . I will test can share the results . > >
On 8/5/2025 7:32 PM, Aditya Bodkhe wrote: > On 05/08/25 6:27 am, Mi, Dapeng wrote: >> On 8/5/2025 8:46 AM, Dapeng Mi wrote: >>> As same reason with previous patch, use "cyles" instead of "cycles:P" >>> event by default to sample guest for "perf kvm top" command on Intel >>> platforms. >>> >>> Reported-by: Kevin Tian <kevin.tian@intel.com> >>> Fixes: 634d36f82517 ("perf record: Just use "cycles:P" as the default event") >>> Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com> >>> --- >>> tools/perf/builtin-kvm.c | 30 +++++++++++++++++++++++++++++- >>> 1 file changed, 29 insertions(+), 1 deletion(-) >>> >>> diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c >>> index 7e48d2437710..d72b40f3df12 100644 >>> --- a/tools/perf/builtin-kvm.c >>> +++ b/tools/perf/builtin-kvm.c >>> @@ -2075,6 +2075,34 @@ __cmd_buildid_list(const char *file_name, int argc, const char **argv) >>> return ret; >>> } >>> >>> +static int __cmd_top(int argc, const char **argv) >>> +{ >>> + int i = 0, ret; >>> + const char **rec_argv; >>> + >>> + /* >>> + * kvm_add_default_arch_event() may add 2 extra options, so >>> + * allocate 2 more pointers in adavance. >>> + */ >>> + rec_argv = calloc(argc + 2 + 1, sizeof(char *)); >>> + if (!rec_argv) >>> + return -ENOMEM; >>> + >>> + for (i = 0; i < argc; i++) >>> + rec_argv[i] = argv[i]; >>> + >>> + BUG_ON(i != argc); >>> + >>> + ret = kvm_add_default_arch_event(&i, rec_argv); >>> + if (ret) >>> + return -EINVAL; >>> + >>> + ret = cmd_top(i, rec_argv); >>> + free(rec_argv); >>> + >>> + return ret; >>> +} >>> + >>> int cmd_kvm(int argc, const char **argv) >>> { >>> const char *file_name = NULL; >>> @@ -2135,7 +2163,7 @@ int cmd_kvm(int argc, const char **argv) >>> else if (strlen(argv[0]) > 2 && strstarts("diff", argv[0])) >>> return cmd_diff(argc, argv); >>> else if (!strcmp(argv[0], "top")) >>> - return cmd_top(argc, argv); >>> + return __cmd_top(argc, argv); >>> else if (strlen(argv[0]) > 2 && strstarts("buildid-list", argv[0])) >>> return __cmd_buildid_list(file_name, argc, argv); >>> #if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT) >> This patch would impact powerpc platform as well. Base on the comments >> before kvm_add_default_arch_event() in >> tools/perf/arch/powerpc/util/kvm-stat.c, I suppose powerpc also needs this >> change, otherwise "perf kvm top" command can't sample guest records. But I >> have no any powerpc on my hand, so it's not tested on powerpc platform. Any >> test on powerpc is appreciated. Thanks. > I have powerpc systems . I will test can share the results . Thanks. >>
© 2016 - 2025 Red Hat, Inc.