linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
@ 2015-05-08  1:07 Hemant Kumar
  2015-05-08  1:07 ` [PATCH v3 2/2] perf/kvm: Support HCALL events Hemant Kumar
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Hemant Kumar @ 2015-05-08  1:07 UTC (permalink / raw)
  To: linux-kernel
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, Hemant Kumar, mingo,
	paulus, acme, warrier, linuxppc-dev

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 */
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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/2] perf/kvm: Support HCALL events
  2015-05-08  1:07 [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Hemant Kumar
@ 2015-05-08  1:07 ` Hemant Kumar
  2015-05-08  4:28 ` [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Ingo Molnar
  2015-05-11 22:08 ` Scott Wood
  2 siblings, 0 replies; 9+ messages in thread
From: Hemant Kumar @ 2015-05-08  1:07 UTC (permalink / raw)
  To: linux-kernel
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, Hemant Kumar, mingo,
	paulus, acme, warrier, linuxppc-dev

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 <hemant@linux.vnet.ibm.com>
---
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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-08  1:07 [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Hemant Kumar
  2015-05-08  1:07 ` [PATCH v3 2/2] perf/kvm: Support HCALL events Hemant Kumar
@ 2015-05-08  4:28 ` Ingo Molnar
  2015-05-08  6:16   ` Hemant Kumar
  2015-05-11 22:08 ` Scott Wood
  2 siblings, 1 reply; 9+ messages in thread
From: Ingo Molnar @ 2015-05-08  4:28 UTC (permalink / raw)
  To: Hemant Kumar
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, linux-kernel, mingo,
	paulus, acme, warrier, linuxppc-dev


* 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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-08  4:28 ` [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Ingo Molnar
@ 2015-05-08  6:16   ` Hemant Kumar
  2015-05-08  6:18     ` Ingo Molnar
  0 siblings, 1 reply; 9+ messages in thread
From: Hemant Kumar @ 2015-05-08  6:16 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, linux-kernel, mingo,
	paulus, acme, warrier, linuxppc-dev


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
>

-- 
Thanks,
Hemant Kumar

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-08  6:16   ` Hemant Kumar
@ 2015-05-08  6:18     ` Ingo Molnar
  0 siblings, 0 replies; 9+ messages in thread
From: Ingo Molnar @ 2015-05-08  6:18 UTC (permalink / raw)
  To: Hemant Kumar
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, linux-kernel, mingo,
	paulus, acme, warrier, linuxppc-dev


* 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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-08  1:07 [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Hemant Kumar
  2015-05-08  1:07 ` [PATCH v3 2/2] perf/kvm: Support HCALL events Hemant Kumar
  2015-05-08  4:28 ` [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Ingo Molnar
@ 2015-05-11 22:08 ` Scott Wood
  2015-05-12 16:04   ` Hemant Kumar
  2 siblings, 1 reply; 9+ messages in thread
From: Scott Wood @ 2015-05-11 22:08 UTC (permalink / raw)
  To: Hemant Kumar
  Cc: maddy, srikar, peterz, agraf, kvm-ppc, linux-kernel, mingo,
	paulus, acme, warrier, linuxppc-dev

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-11 22:08 ` Scott Wood
@ 2015-05-12 16:04   ` Hemant Kumar
  2015-05-13  3:22     ` Scott Wood
  0 siblings, 1 reply; 9+ messages in thread
From: Hemant Kumar @ 2015-05-12 16:04 UTC (permalink / raw)
  To: Scott Wood
  Cc: maddy, srikar, peterz, linux-kernel, kvm-ppc, agraf, mingo,
	paulus, acme, warrier, linuxppc-dev

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

-- 
Thanks,
Hemant Kumar

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-12 16:04   ` Hemant Kumar
@ 2015-05-13  3:22     ` Scott Wood
  2015-05-21  4:03       ` Hemant Kumar
  0 siblings, 1 reply; 9+ messages in thread
From: Scott Wood @ 2015-05-13  3:22 UTC (permalink / raw)
  To: Hemant Kumar
  Cc: maddy, srikar, peterz, linux-kernel, kvm-ppc, agraf, mingo,
	paulus, acme, warrier, linuxppc-dev

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc
  2015-05-13  3:22     ` Scott Wood
@ 2015-05-21  4:03       ` Hemant Kumar
  0 siblings, 0 replies; 9+ messages in thread
From: Hemant Kumar @ 2015-05-21  4:03 UTC (permalink / raw)
  To: Scott Wood
  Cc: maddy, srikar, peterz, linux-kernel, kvm-ppc, agraf, mingo,
	paulus, acme, warrier, linuxppc-dev

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

-- 
Thanks,
Hemant Kumar

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-05-21  4:03 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-08  1:07 [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Hemant Kumar
2015-05-08  1:07 ` [PATCH v3 2/2] perf/kvm: Support HCALL events Hemant Kumar
2015-05-08  4:28 ` [PATCH v3 1/2] perf/kvm: Port perf kvm to powerpc Ingo Molnar
2015-05-08  6:16   ` Hemant Kumar
2015-05-08  6:18     ` Ingo Molnar
2015-05-11 22:08 ` Scott Wood
2015-05-12 16:04   ` Hemant Kumar
2015-05-13  3:22     ` Scott Wood
2015-05-21  4:03       ` Hemant Kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).