2015-05-08 01:08:53

by Hemant Kumar

[permalink] [raw]
Subject: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc

From: Srikar Dronamraju <[email protected]>

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 <[email protected]>
Signed-off-by: Hemant Kumar <[email protected]>
---
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 */
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;
+}
--
1.9.3


2015-05-08 01:09:07

by Hemant Kumar

[permalink] [raw]
Subject: [PATCH v3 2/2] perf/kvm: Support HCALL events

powerpc provides hcall events that also provide insights into guest
behaviour. Enhance perf kvm to record and analyze hcall events.

- To trace hcall events :
perf kvm stat record

- To show the results :
perf kvm stat report --event=hcall

The result shows the number of hypervisor calls from the guest grouped
by their respective reasons displayed with the frequency.

This patch makes use of two additional tracepoints "kvm_hv:kvm_hcall_enter"
and "kvm_hv:kvm_hcall_exit". It uses the pSeries hypervisor codes
exported through uapi to classify the hcalls into their respective reasons.

Note : This patch has a dependency on "kvm/powerpc: Export HCALL reason
codes" which exports HCALL reasons through uapi.

# pgrep qemu
A sample output :
19378
60515

2 VMs running.

# 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 --event=hcall
Analyze events for pid(s) 60515, all VCPUs:

HCALL-EVENT Samples Samples% Time% Min Time Max Time Avg time

H_VIO_SIGNAL 1034 38.44% 15.77% 0.36us 1.59us 0.44us ( +- 0.66% )
H_SEND_CRQ 652 24.24% 10.97% 0.39us 1.84us 0.49us ( +- 1.20% )
H_IPI 523 19.44% 62.05% 1.35us 19.70us 3.44us ( +- 2.88% )
H_PUT_TERM_CHAR 411 15.28% 8.03% 0.38us 3.77us 0.57us ( +- 1.61% )
H_GET_TERM_CHAR 50 1.86% 0.99% 0.40us 0.98us 0.57us ( +- 3.37% )
H_EOI 20 0.74% 2.19% 2.22us 4.72us 3.17us ( +- 5.96% )

Total Samples:2690, Total events handled time:2896.94us.

Signed-off-by: Hemant Kumar <[email protected]>
---
Patch has a dependency on https://patchwork.ozlabs.org/patch/469841/
which exports the HCALL reason codes to perf.

arch/powerpc/include/uapi/asm/kvm_perf.h | 4 +++
tools/perf/arch/powerpc/util/kvm-stat.c | 61 ++++++++++++++++++++++++++++++++
2 files changed, 65 insertions(+)

diff --git a/arch/powerpc/include/uapi/asm/kvm_perf.h b/arch/powerpc/include/uapi/asm/kvm_perf.h
index 30fa670..440902e 100644
--- a/arch/powerpc/include/uapi/asm/kvm_perf.h
+++ b/arch/powerpc/include/uapi/asm/kvm_perf.h
@@ -3,6 +3,7 @@

#include <asm/trace_book3s.h>
#include <asm/kvm.h>
+#include <asm/trace_hcall.h>

#define DECODE_STR_LEN 20

@@ -11,5 +12,8 @@
#define KVM_ENTRY_TRACE "kvm_hv:kvm_guest_enter"
#define KVM_EXIT_TRACE "kvm_hv:kvm_guest_exit"
#define KVM_EXIT_REASON "trap"
+#define KVM_HCALL_ENTRY_TRACE "kvm_hv:kvm_hcall_enter"
+#define KVM_HCALL_EXIT_TRACE "kvm_hv:kvm_hcall_exit"
+#define KVM_HCALL_REASON "req"

#endif /* _ASM_POWERPC_KVM_PERF_H */
diff --git a/tools/perf/arch/powerpc/util/kvm-stat.c b/tools/perf/arch/powerpc/util/kvm-stat.c
index 62cdcc1..685201c 100644
--- a/tools/perf/arch/powerpc/util/kvm-stat.c
+++ b/tools/perf/arch/powerpc/util/kvm-stat.c
@@ -1,7 +1,9 @@
#include "../../util/kvm-stat.h"
#include <asm/kvm_perf.h>
+#include "../../util/debug.h"

define_exit_reasons_table(hv_exit_reasons, kvm_trace_symbol_exit);
+define_exit_reasons_table(hcall_reasons, kvm_trace_symbol_hcall);

static struct kvm_events_ops exit_events = {
.is_begin_event = exit_event_begin,
@@ -10,14 +12,73 @@ static struct kvm_events_ops exit_events = {
.name = "VM-EXIT"
};

+static void hcall_event_get_key(struct perf_evsel *evsel,
+ struct perf_sample *sample,
+ struct event_key *key)
+{
+ key->info = 0;
+ key->key = perf_evsel__intval(evsel, sample, KVM_HCALL_REASON);
+}
+
+static const char *get_exit_reason(u64 exit_code)
+{
+ struct exit_reasons_table *tbl = hcall_reasons;
+
+ while (tbl->reason != NULL) {
+ if (tbl->exit_code == exit_code)
+ return tbl->reason;
+ tbl++;
+ }
+
+ pr_err("Unknown kvm hcall exit code: %lld\n",
+ (unsigned long long)exit_code);
+ return "UNKNOWN";
+}
+
+static bool hcall_event_end(struct perf_evsel *evsel,
+ struct perf_sample *sample __maybe_unused,
+ struct event_key *key __maybe_unused)
+{
+ return (!strcmp(evsel->name, KVM_HCALL_EXIT_TRACE));
+}
+
+static bool hcall_event_begin(struct perf_evsel *evsel,
+ struct perf_sample *sample, struct event_key *key)
+{
+ if (!strcmp(evsel->name, KVM_HCALL_ENTRY_TRACE)) {
+ hcall_event_get_key(evsel, sample, key);
+ return true;
+ }
+
+ return false;
+}
+static void hcall_event_decode_key(struct perf_kvm_stat *kvm __maybe_unused,
+ struct event_key *key,
+ char *decode)
+{
+ const char *hcall_reason = get_exit_reason(key->key);
+
+ scnprintf(decode, DECODE_STR_LEN, "%s", hcall_reason);
+}
+
+static struct kvm_events_ops hcall_events = {
+ .is_begin_event = hcall_event_begin,
+ .is_end_event = hcall_event_end,
+ .decode_key = hcall_event_decode_key,
+ .name = "HCALL-EVENT",
+};
+
const char *const kvm_events_tp[] = {
"kvm_hv:kvm_guest_exit",
"kvm_hv:kvm_guest_enter",
+ "kvm_hv:kvm_hcall_enter",
+ "kvm_hv:kvm_hcall_exit",
NULL,
};

struct kvm_reg_events_ops kvm_reg_events_ops[] = {
{ .name = "vmexit", .ops = &exit_events },
+ { .name = "hcall", .ops = &hcall_events },
{ NULL, NULL },
};

--
1.9.3

2015-05-08 04:29:01

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc


* Hemant Kumar <[email protected]> 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

2015-05-08 06:17:15

by Hemant Kumar

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc


On 05/08/2015 09:58 AM, Ingo Molnar wrote:
> * Hemant Kumar <[email protected]> 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
>

--
Thanks,
Hemant Kumar

2015-05-08 06:18:37

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc


* Hemant Kumar <[email protected]> wrote:

>
> On 05/08/2015 09:58 AM, Ingo Molnar wrote:
> >* Hemant Kumar <[email protected]> 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

2015-05-11 22:08:55

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc

On Fri, 2015-05-08 at 06:37 +0530, Hemant Kumar wrote:
> From: Srikar Dronamraju <[email protected]>
>
> 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 <[email protected]>
> Signed-off-by: Hemant Kumar <[email protected]>
> ---
> 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

2015-05-12 16:07:04

by Hemant Kumar

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc

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 <[email protected]>
>>
>> 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 <[email protected]>
>> Signed-off-by: Hemant Kumar <[email protected]>
>> ---
>> 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
> [email protected]
> https://lists.ozlabs.org/listinfo/linuxppc-dev

--
Thanks,
Hemant Kumar

2015-05-13 03:22:37

by Scott Wood

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc

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


2015-05-21 04:04:47

by Hemant Kumar

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc

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
> [email protected]
> https://lists.ozlabs.org/listinfo/linuxppc-dev

Tried to address your comments in v4 :
http://www.mail-archive.com/[email protected]/msg89490.html
and
http://www.mail-archive.com/[email protected]/msg89485.html

--
Thanks,
Hemant Kumar