[PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel

Dapeng Mi posted 5 patches 2 months ago
There is a newer version of this series
[PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel
Posted by Dapeng Mi 2 months ago
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
Re: [PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel
Posted by Mi, Dapeng 2 months ago
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.
Re: [PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel
Posted by Aditya Bodkhe 2 months ago
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 .
>
>
Re: [PATCH 5/5] perf tools kvm: Use "cycles" to sample guest for "kvm top" on Intel
Posted by Mi, Dapeng 2 months ago
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.


>>