diff mbox

[v3,1/2] perf/kvm: Port perf kvm to powerpc

Message ID 1431047266-6206-1-git-send-email-hemant@linux.vnet.ibm.com
State New, archived
Headers show

Commit Message

Hemant Kumar May 8, 2015, 1:07 a.m. UTC
From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>

perf kvm can be used to analyze guest exit reasons. This support already
exists in x86. Hence, porting it to powerpc.

 - To trace KVM events :
  perf kvm stat record
  If many guests are running, we can track for a specific guest by using
  --pid as in : perf kvm stat record --pid <pid>

 - To see the results :
  perf kvm stat report

The result shows the number of exits (from the guest context to
host/hypervisor context) grouped by their respective exit reasons with
their frequency.

This patch makes use of the guest exit reasons available in
"trace_book3s.h". It records on two already available tracepoints :
"kvm_hv:kvm_guest_exit" and "kvm_hv:kvm_guest_enter".

Note : This patch has a dependency on the patch "kvm/powerpc: Export
kvm exit reasons" which exports the KVM exit reasons through the uapi.

Here is a sample o/p:
 # pgrep qemu
19378
60515

2 Guests are running on the host.

 # perf kvm stat record -a
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 4.153 MB perf.data.guest (39624 samples) ]

 # perf kvm stat report -p 60515
Analyze events for pid(s) 60515, all VCPUs:

       VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time

H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
       SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
      EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )

Total Samples:14182, Total events handled time:49264158.30us.

Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Hemant Kumar <hemant@linux.vnet.ibm.com>
---
Patch has a dependency on : https://patchwork.ozlabs.org/patch/469839/
which exports the exit reasons to perf through uapi.

Changes:
- Original series split into two patchsets now : perf and powerpc
  side changes.

 arch/powerpc/include/uapi/asm/kvm_perf.h | 15 +++++++++++++++
 tools/perf/arch/powerpc/Makefile         |  1 +
 tools/perf/arch/powerpc/util/Build       |  1 +
 tools/perf/arch/powerpc/util/kvm-stat.c  | 33 ++++++++++++++++++++++++++++++++
 4 files changed, 50 insertions(+)
 create mode 100644 arch/powerpc/include/uapi/asm/kvm_perf.h
 create mode 100644 tools/perf/arch/powerpc/util/kvm-stat.c

Comments

Ingo Molnar May 8, 2015, 4:28 a.m. UTC | #1
* Hemant Kumar <hemant@linux.vnet.ibm.com> wrote:

>  # perf kvm stat report -p 60515
> Analyze events for pid(s) 60515, all VCPUs:
> 
>        VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time
> 
> H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
> HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
>        SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
> RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
>       EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )

Where is the last line misaligned? Copy & paste error or does perf kvm 
produce it in such a way?

Thanks,

	Ingo
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Hemant Kumar May 8, 2015, 6:16 a.m. UTC | #2
On 05/08/2015 09:58 AM, Ingo Molnar wrote:
> * Hemant Kumar <hemant@linux.vnet.ibm.com> wrote:
>
>>   # perf kvm stat report -p 60515
>> Analyze events for pid(s) 60515, all VCPUs:
>>
>>         VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time
>>
>> H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
>> HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
>>         SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
>> RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
>>        EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )
> Where is the last line misaligned? Copy & paste error or does perf kvm
> produce it in such a way?

Its a copy-paste error. Thanks for pointing this out.

Shall I resend the patches with the correct alignment of the o/p?

> Thanks,
>
> 	Ingo
>
Ingo Molnar May 8, 2015, 6:18 a.m. UTC | #3
* Hemant Kumar <hemant@linux.vnet.ibm.com> wrote:

> 
> On 05/08/2015 09:58 AM, Ingo Molnar wrote:
> >* Hemant Kumar <hemant@linux.vnet.ibm.com> wrote:
> >
> >>  # perf kvm stat report -p 60515
> >>Analyze events for pid(s) 60515, all VCPUs:
> >>
> >>        VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time
> >>
> >>H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
> >>HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
> >>        SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
> >>RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
> >>       EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )
> >Where is the last line misaligned? Copy & paste error or does perf kvm
> >produce it in such a way?
> 
> Its a copy-paste error. Thanks for pointing this out.
> 
> Shall I resend the patches with the correct alignment of the o/p?

I don't think that's necessary, as long as the code is fine.

Thanks,

	Ingo
--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Scott Wood May 11, 2015, 10:08 p.m. UTC | #4
On Fri, 2015-05-08 at 06:37 +0530, Hemant Kumar wrote:
> From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> 
> perf kvm can be used to analyze guest exit reasons. This support already
> exists in x86. Hence, porting it to powerpc.
> 
>  - To trace KVM events :
>   perf kvm stat record
>   If many guests are running, we can track for a specific guest by using
>   --pid as in : perf kvm stat record --pid <pid>
> 
>  - To see the results :
>   perf kvm stat report
> 
> The result shows the number of exits (from the guest context to
> host/hypervisor context) grouped by their respective exit reasons with
> their frequency.
> 
> This patch makes use of the guest exit reasons available in
> "trace_book3s.h". It records on two already available tracepoints :
> "kvm_hv:kvm_guest_exit" and "kvm_hv:kvm_guest_enter".
> 
> Note : This patch has a dependency on the patch "kvm/powerpc: Export
> kvm exit reasons" which exports the KVM exit reasons through the uapi.
> 
> Here is a sample o/p:
>  # pgrep qemu
> 19378
> 60515
> 
> 2 Guests are running on the host.
> 
>  # perf kvm stat record -a
> ^C[ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 4.153 MB perf.data.guest (39624 samples) ]
> 
>  # perf kvm stat report -p 60515
> Analyze events for pid(s) 60515, all VCPUs:
> 
>        VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time
> 
> H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
> HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
>        SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
> RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
>       EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )
> 
> Total Samples:14182, Total events handled time:49264158.30us.
> 
> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> Signed-off-by: Hemant Kumar <hemant@linux.vnet.ibm.com>
> ---
> Patch has a dependency on : https://patchwork.ozlabs.org/patch/469839/
> which exports the exit reasons to perf through uapi.
> 
> Changes:
> - Original series split into two patchsets now : perf and powerpc
>   side changes.
> 
>  arch/powerpc/include/uapi/asm/kvm_perf.h | 15 +++++++++++++++
>  tools/perf/arch/powerpc/Makefile         |  1 +
>  tools/perf/arch/powerpc/util/Build       |  1 +
>  tools/perf/arch/powerpc/util/kvm-stat.c  | 33 ++++++++++++++++++++++++++++++++
>  4 files changed, 50 insertions(+)
>  create mode 100644 arch/powerpc/include/uapi/asm/kvm_perf.h
>  create mode 100644 tools/perf/arch/powerpc/util/kvm-stat.c
> 
> diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
> new file mode 100644
> index 0000000..30fa670
> --- /dev/null
> +++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
> @@ -0,0 +1,15 @@
> +#ifndef _ASM_POWERPC_KVM_PERF_H
> +#define _ASM_POWERPC_KVM_PERF_H
> +
> +#include <asm/trace_book3s.h>
> +#include <asm/kvm.h>
> +
> +#define DECODE_STR_LEN 20
> +
> +#define VCPU_ID "vcpu_id"
> +
> +#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
> +#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
> +#define KVM_EXIT_REASON "trap"
> +
> +#endif /* _ASM_POWERPC_KVM_PERF_H */

Please make sure that anything book3s-specific is named that way.

And shouldn't this be part of the arch/powerpc-side patchset?

> diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/powerpc/Makefile
> index 7fbca17..21322e0 100644
> --- a/tools/perf/arch/powerpc/Makefile
> +++ b/tools/perf/arch/powerpc/Makefile
> @@ -1,3 +1,4 @@
>  ifndef NO_DWARF
>  PERF_HAVE_DWARF_REGS := 1
>  endif
> +HAVE_KVM_STAT_SUPPORT := 1

Does this stuff fail gracefully if used on a PPC target that doesn't
support this?

-Scott


--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Hemant Kumar May 12, 2015, 4:04 p.m. UTC | #5
Hi Scott,

On 05/12/2015 03:38 AM, Scott Wood wrote:
> On Fri, 2015-05-08 at 06:37 +0530, Hemant Kumar wrote:
>> From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
>>
>> perf kvm can be used to analyze guest exit reasons. This support already
>> exists in x86. Hence, porting it to powerpc.
>>
>>   - To trace KVM events :
>>    perf kvm stat record
>>    If many guests are running, we can track for a specific guest by using
>>    --pid as in : perf kvm stat record --pid <pid>
>>
>>   - To see the results :
>>    perf kvm stat report
>>
>> The result shows the number of exits (from the guest context to
>> host/hypervisor context) grouped by their respective exit reasons with
>> their frequency.
>>
>> This patch makes use of the guest exit reasons available in
>> "trace_book3s.h". It records on two already available tracepoints :
>> "kvm_hv:kvm_guest_exit" and "kvm_hv:kvm_guest_enter".
>>
>> Note : This patch has a dependency on the patch "kvm/powerpc: Export
>> kvm exit reasons" which exports the KVM exit reasons through the uapi.
>>
>> Here is a sample o/p:
>>   # pgrep qemu
>> 19378
>> 60515
>>
>> 2 Guests are running on the host.
>>
>>   # perf kvm stat record -a
>> ^C[ perf record: Woken up 1 times to write data ]
>> [ perf record: Captured and wrote 4.153 MB perf.data.guest (39624 samples) ]
>>
>>   # perf kvm stat report -p 60515
>> Analyze events for pid(s) 60515, all VCPUs:
>>
>>         VM-EXIT    Samples  Samples%     Time%    Min Time         Max        Time         Avg time
>>
>> H_DATA_STORAGE       5006    35.30%     0.13%      1.94us     49.46us     12.37us ( +-   0.52% )
>> HV_DECREMENTER       4457    31.43%     0.02%      0.72us     16.14us      1.91us ( +-   0.96% )
>>         SYSCALL       2690    18.97%     0.10%      2.84us    528.24us     18.29us ( +-   3.75% )
>> RETURN_TO_HOST       1789    12.61%    99.76%      1.58us 672791.91us  27470.23us ( +-   3.00% )
>>        EXTERNAL        240     1.69%     0.00%        0.69us     10.67us      1.33us ( +-   5.34% )
>>
>> Total Samples:14182, Total events handled time:49264158.30us.
>>
>> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
>> Signed-off-by: Hemant Kumar <hemant@linux.vnet.ibm.com>
>> ---
>> Patch has a dependency on : https://patchwork.ozlabs.org/patch/469839/
>> which exports the exit reasons to perf through uapi.
>>
>> Changes:
>> - Original series split into two patchsets now : perf and powerpc
>>    side changes.
>>
>>   arch/powerpc/include/uapi/asm/kvm_perf.h | 15 +++++++++++++++
>>   tools/perf/arch/powerpc/Makefile         |  1 +
>>   tools/perf/arch/powerpc/util/Build       |  1 +
>>   tools/perf/arch/powerpc/util/kvm-stat.c  | 33 ++++++++++++++++++++++++++++++++
>>   4 files changed, 50 insertions(+)
>>   create mode 100644 arch/powerpc/include/uapi/asm/kvm_perf.h
>>   create mode 100644 tools/perf/arch/powerpc/util/kvm-stat.c
>>
>> diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
>> new file mode 100644
>> index 0000000..30fa670
>> --- /dev/null
>> +++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
>> @@ -0,0 +1,15 @@
>> +#ifndef _ASM_POWERPC_KVM_PERF_H
>> +#define _ASM_POWERPC_KVM_PERF_H
>> +
>> +#include <asm/trace_book3s.h>
>> +#include <asm/kvm.h>
>> +
>> +#define DECODE_STR_LEN 20
>> +
>> +#define VCPU_ID "vcpu_id"
>> +
>> +#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
>> +#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
>> +#define KVM_EXIT_REASON "trap"
>> +
>> +#endif /* _ASM_POWERPC_KVM_PERF_H */
> Please make sure that anything book3s-specific is named that way.

Are you suggesting to name it to something like _ASM_POWERPC_BOOK3S_PERF_H ?

> And shouldn't this be part of the arch/powerpc-side patchset?

It should. Thanks, will move this to arch/powerpc side patchset.

>> diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/powerpc/Makefile
>> index 7fbca17..21322e0 100644
>> --- a/tools/perf/arch/powerpc/Makefile
>> +++ b/tools/perf/arch/powerpc/Makefile
>> @@ -1,3 +1,4 @@
>>   ifndef NO_DWARF
>>   PERF_HAVE_DWARF_REGS := 1
>>   endif
>> +HAVE_KVM_STAT_SUPPORT := 1
> Does this stuff fail gracefully if used on a PPC target that doesn't
> support this?

Yes, it does.

> -Scott
>
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Scott Wood May 13, 2015, 3:22 a.m. UTC | #6
On Tue, 2015-05-12 at 21:34 +0530, Hemant Kumar wrote:
> Hi Scott,
> 
> On 05/12/2015 03:38 AM, Scott Wood wrote:
> > On Fri, 2015-05-08 at 06:37 +0530, Hemant Kumar wrote:
> >> diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
> >> new file mode 100644
> >> index 0000000..30fa670
> >> --- /dev/null
> >> +++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
> >> @@ -0,0 +1,15 @@
> >> +#ifndef _ASM_POWERPC_KVM_PERF_H
> >> +#define _ASM_POWERPC_KVM_PERF_H
> >> +
> >> +#include <asm/trace_book3s.h>
> >> +#include <asm/kvm.h>
> >> +
> >> +#define DECODE_STR_LEN 20
> >> +
> >> +#define VCPU_ID "vcpu_id"
> >> +
> >> +#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
> >> +#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
> >> +#define KVM_EXIT_REASON "trap"
> >> +
> >> +#endif /* _ASM_POWERPC_KVM_PERF_H */
> > Please make sure that anything book3s-specific is named that way.
> 
> Are you suggesting to name it to something like _ASM_POWERPC_BOOK3S_PERF_H ?

My concern is seeing a generically named "kvm_perf.h" include a file
called "trace_book3s.h" which defines "kvm_trace_symbol_hcall" with
presumably book3s-specific content, as well as wondering how much of the
rest of the file would be applicable if booke PPC were to implement perf
kvm.

I don't know enough about perf kvm to answer that question, but I've
seen enough cases of book3s or pseries specific code that was apparently
written with the belief that no other ppc64 implementations exist, or
that no other ppc implementations would want to implement a certain
feature, to be suspicous.  Usually such cases can be dealt with after
the fact (albeit not as easily as if things were organized/namespaced
properly from the beginning), but this is uapi...

-Scott



--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Hemant Kumar May 21, 2015, 4:03 a.m. UTC | #7
Hi Scott,

On 05/13/2015 08:52 AM, Scott Wood wrote:
> On Tue, 2015-05-12 at 21:34 +0530, Hemant Kumar wrote:
>> Hi Scott,
>>
>> On 05/12/2015 03:38 AM, Scott Wood wrote:
>>> On Fri, 2015-05-08 at 06:37 +0530, Hemant Kumar wrote:
>>>> diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
>>>> new file mode 100644
>>>> index 0000000..30fa670
>>>> --- /dev/null
>>>> +++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
>>>> @@ -0,0 +1,15 @@
>>>> +#ifndef _ASM_POWERPC_KVM_PERF_H
>>>> +#define _ASM_POWERPC_KVM_PERF_H
>>>> +
>>>> +#include <asm/trace_book3s.h>
>>>> +#include <asm/kvm.h>
>>>> +
>>>> +#define DECODE_STR_LEN 20
>>>> +
>>>> +#define VCPU_ID "vcpu_id"
>>>> +
>>>> +#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
>>>> +#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
>>>> +#define KVM_EXIT_REASON "trap"
>>>> +
>>>> +#endif /* _ASM_POWERPC_KVM_PERF_H */
>>> Please make sure that anything book3s-specific is named that way.
>> Are you suggesting to name it to something like _ASM_POWERPC_BOOK3S_PERF_H ?
> My concern is seeing a generically named "kvm_perf.h" include a file
> called "trace_book3s.h" which defines "kvm_trace_symbol_hcall" with
> presumably book3s-specific content, as well as wondering how much of the
> rest of the file would be applicable if booke PPC were to implement perf
> kvm.
>
> I don't know enough about perf kvm to answer that question, but I've
> seen enough cases of book3s or pseries specific code that was apparently
> written with the belief that no other ppc64 implementations exist, or
> that no other ppc implementations would want to implement a certain
> feature, to be suspicous.  Usually such cases can be dealt with after
> the fact (albeit not as easily as if things were organized/namespaced
> properly from the beginning), but this is uapi...
>
> -Scott
>
>
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev

Tried to address your comments in v4 :
http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg89490.html
and
http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg89485.html
diff mbox

Patch

diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
new file mode 100644
index 0000000..30fa670
--- /dev/null
+++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
@@ -0,0 +1,15 @@ 
+#ifndef _ASM_POWERPC_KVM_PERF_H
+#define _ASM_POWERPC_KVM_PERF_H
+
+#include <asm/trace_book3s.h>
+#include <asm/kvm.h>
+
+#define DECODE_STR_LEN 20
+
+#define VCPU_ID "vcpu_id"
+
+#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
+#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
+#define KVM_EXIT_REASON "trap"
+
+#endif /* _ASM_POWERPC_KVM_PERF_H */
diff --git a/tools/perf/arch/powerpc/Makefile b/tools/perf/arch/powerpc/Makefile
index 7fbca17..21322e0 100644
--- a/tools/perf/arch/powerpc/Makefile
+++ b/tools/perf/arch/powerpc/Makefile
@@ -1,3 +1,4 @@ 
 ifndef NO_DWARF
 PERF_HAVE_DWARF_REGS := 1
 endif
+HAVE_KVM_STAT_SUPPORT := 1
diff --git a/tools/perf/arch/powerpc/util/Build b/tools/perf/arch/powerpc/util/Build
index 0af6e9b..dd47b5e 100644
--- a/tools/perf/arch/powerpc/util/Build
+++ b/tools/perf/arch/powerpc/util/Build
@@ -1,4 +1,5 @@ 
 libperf-y += header.o
+libperf-y += kvm-stat.o
 
 libperf-$(CONFIG_DWARF) += dwarf-regs.o
 libperf-$(CONFIG_DWARF) += skip-callchain-idx.o
diff --git a/tools/perf/arch/powerpc/util/kvm-stat.c b/tools/perf/arch/powerpc/util/kvm-stat.c
new file mode 100644
index 0000000..62cdcc1
--- /dev/null
+++ b/tools/perf/arch/powerpc/util/kvm-stat.c
@@ -0,0 +1,33 @@ 
+#include "../../util/kvm-stat.h"
+#include <asm/kvm_perf.h>
+
+define_exit_reasons_table(hv_exit_reasons, kvm_trace_symbol_exit);
+
+static struct kvm_events_ops exit_events = {
+	.is_begin_event = exit_event_begin,
+	.is_end_event = exit_event_end,
+	.decode_key = exit_event_decode_key,
+	.name = "VM-EXIT"
+};
+
+const char *const kvm_events_tp[] = {
+	"kvm_hv:kvm_guest_exit",
+	"kvm_hv:kvm_guest_enter",
+	NULL,
+};
+
+struct kvm_reg_events_ops kvm_reg_events_ops[] = {
+	{ .name = "vmexit", .ops = &exit_events },
+	{ NULL, NULL },
+};
+
+const char * const kvm_skip_events[] = {
+	NULL,
+};
+
+int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid __maybe_unused)
+{
+	kvm->exit_reasons = hv_exit_reasons;
+	kvm->exit_reasons_isa = "HV";
+	return 0;
+}