* [Qemu-devel] [PATCH V2 0/4] kvm_stat update
@ 2015-01-23 20:44 Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 1/4] kvm_stat: Update exit reasons to the latest defintion Wei Huang
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:44 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
This is the second version of kvm_stat patches. Please review.
NOTE: I have tested these patches on ARM64 and x86_64 machines. For PPC,
the only area been affected is ioctl RESET number (patch 4). Unfortunately
I don't have PPC hardware to test them.
Thanks,
-Wei
V2:
- fix a typo in VMX exit reason (pointed out by Paolo)
- add ioctl RESET function to initialize counters
- re-arrange the order of patches
V1:
- support for ARM aarch64
- update to the latest exit reasons (vmx, svm and userspace)
- print errno when syscall fails
Wei Huang (4):
kvm_stat: Update exit reasons to the latest defintion
kvm_stat: Print errno when syscall to perf_event_open() fails
kvm_stat: Add aarch64 support
kvm_stat: Add RESET support for perf event ioctl
scripts/kvm/kvm_stat | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH V2 1/4] kvm_stat: Update exit reasons to the latest defintion
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
@ 2015-01-23 20:44 ` Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 2/4] kvm_stat: Print errno when syscall to perf_event_open() fails Wei Huang
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:44 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
This patch updates the exit reasons for x86_vmx, x86_svm, and userspace
to the latest definition.
Signed-off-by: Wei Huang <wei@redhat.com>
---
scripts/kvm/kvm_stat | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 7b1437c..7ec84c0 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -65,6 +65,8 @@ vmx_exit_reasons = {
49: 'EPT_MISCONFIG',
54: 'WBINVD',
55: 'XSETBV',
+ 56: 'APIC_WRITE',
+ 58: 'INVPCID',
}
svm_exit_reasons = {
@@ -138,6 +140,7 @@ svm_exit_reasons = {
0x08a: 'MONITOR',
0x08b: 'MWAIT',
0x08c: 'MWAIT_COND',
+ 0x08d: 'XSETBV',
0x400: 'NPF',
}
@@ -167,6 +170,7 @@ userspace_exit_reasons = {
21: 'WATCHDOG',
22: 'S390_TSCH',
23: 'EPR',
+ 24: 'SYSTEM_EVENT',
}
x86_exit_reasons = {
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH V2 2/4] kvm_stat: Print errno when syscall to perf_event_open() fails
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 1/4] kvm_stat: Update exit reasons to the latest defintion Wei Huang
@ 2015-01-23 20:44 ` Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 3/4] kvm_stat: Add aarch64 support Wei Huang
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:44 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
kvm_stat uses syscall() to call perf_event_open(). If this function
call fails, the returned value is -1, which doesn't tell the details
of the failure (i.e. ENOSYS or EINVAL). This patch retrieves errno
and prints it when syscall() fails. The error message will look like
"Exception: perf_event_open failed, errno = 38".
Signed-off-by: Wei Huang <wei@redhat.com>
---
scripts/kvm/kvm_stat | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 7ec84c0..cb23877 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -13,6 +13,7 @@
import curses
import sys, os, time, optparse, ctypes
+from ctypes import *
class DebugfsProvider(object):
def __init__(self):
@@ -239,6 +240,9 @@ import struct, array
libc = ctypes.CDLL('libc.so.6')
syscall = libc.syscall
+get_errno = libc.__errno_location
+get_errno.restype = POINTER(c_int)
+
class perf_event_attr(ctypes.Structure):
_fields_ = [('type', ctypes.c_uint32),
('size', ctypes.c_uint32),
@@ -322,7 +326,8 @@ class Event(object):
group_leader = group.events[0].fd
fd = _perf_event_open(attr, -1, group.cpu, group_leader, 0)
if fd == -1:
- raise Exception('perf_event_open failed')
+ err = get_errno()[0]
+ raise Exception('perf_event_open failed, errno = ' + err.__str__())
if filter:
import fcntl
fcntl.ioctl(fd, ioctl_numbers['SET_FILTER'], filter)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH V2 3/4] kvm_stat: Add aarch64 support
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 1/4] kvm_stat: Update exit reasons to the latest defintion Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 2/4] kvm_stat: Print errno when syscall to perf_event_open() fails Wei Huang
@ 2015-01-23 20:44 ` Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 4/4] kvm_stat: Add RESET support for perf event ioctl Wei Huang
2015-01-23 20:59 ` [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
4 siblings, 0 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:44 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
This patch enables aarch64 support for kvm_stat. The platform detection
is based on OS uname.
Signed-off-by: Wei Huang <wei@redhat.com>
---
scripts/kvm/kvm_stat | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index cb23877..8f6f007 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -209,10 +209,18 @@ def ppc_init():
}
})
+def aarch64_init():
+ globals().update({
+ 'sc_perf_evt_open' : 241
+ })
+
def detect_platform():
if os.uname()[4].startswith('ppc'):
ppc_init()
return
+ elif os.uname()[4].startswith('aarch64'):
+ aarch64_init()
+ return
for line in file('/proc/cpuinfo').readlines():
if line.startswith('flags'):
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH V2 4/4] kvm_stat: Add RESET support for perf event ioctl
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
` (2 preceding siblings ...)
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 3/4] kvm_stat: Add aarch64 support Wei Huang
@ 2015-01-23 20:44 ` Wei Huang
2015-01-23 20:59 ` [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
4 siblings, 0 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:44 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
While running kvm_stat using tracepoint on ARM64 hardware (e.g. "kvm_stat
-1 -t"), the initial values of some kvm_userspace_exit counters were found
to be very suspecious. For instance the tracing tool showed that S390_TSCH
was called many times on ARM64 machine, which apparently was wrong.
This patch adds RESET ioctl support for perf monitoring. Before calling
ioctl to enable a perf event, this patch resets the counter first. With
this patch, the init counter values become correct on ARM64 hardware.
Example:
==== before patch ====
kvm_userspace_exit(S390_SIEIC) 1426 0
kvm_userspace_exit(S390_TSCH) 339 0
==== after patch ====
kvm_userspace_exit(S390_SIEIC) 0 0
kvm_userspace_exit(S390_TSCH) 0 0
Signed-off-by: Wei Huang <wei@redhat.com>
---
scripts/kvm/kvm_stat | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 8f6f007..f927e97 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -186,6 +186,7 @@ ioctl_numbers = {
'SET_FILTER' : 0x40082406,
'ENABLE' : 0x00002400,
'DISABLE' : 0x00002401,
+ 'RESET' : 0x00002403,
}
def x86_init(flag):
@@ -346,6 +347,9 @@ class Event(object):
def disable(self):
import fcntl
fcntl.ioctl(self.fd, ioctl_numbers['DISABLE'], 0)
+ def reset(self):
+ import fcntl
+ fcntl.ioctl(self.fd, ioctl_numbers['RESET'], 0)
class TracepointProvider(object):
def __init__(self):
@@ -405,6 +409,7 @@ class TracepointProvider(object):
for group in self.group_leaders:
for event in group.events:
if event.name in fields:
+# event.reset()
event.enable()
else:
event.disable()
--
1.8.3.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH V2 0/4] kvm_stat update
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
` (3 preceding siblings ...)
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 4/4] kvm_stat: Add RESET support for perf event ioctl Wei Huang
@ 2015-01-23 20:59 ` Wei Huang
4 siblings, 0 replies; 6+ messages in thread
From: Wei Huang @ 2015-01-23 20:59 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, peter.maydell
Sorry, please ignore this version.
-Wei
On 01/23/2015 02:44 PM, Wei Huang wrote:
> This is the second version of kvm_stat patches. Please review.
>
> NOTE: I have tested these patches on ARM64 and x86_64 machines. For PPC,
> the only area been affected is ioctl RESET number (patch 4). Unfortunately
> I don't have PPC hardware to test them.
>
> Thanks,
> -Wei
>
> V2:
> - fix a typo in VMX exit reason (pointed out by Paolo)
> - add ioctl RESET function to initialize counters
> - re-arrange the order of patches
>
> V1:
> - support for ARM aarch64
> - update to the latest exit reasons (vmx, svm and userspace)
> - print errno when syscall fails
>
> Wei Huang (4):
> kvm_stat: Update exit reasons to the latest defintion
> kvm_stat: Print errno when syscall to perf_event_open() fails
> kvm_stat: Add aarch64 support
> kvm_stat: Add RESET support for perf event ioctl
>
> scripts/kvm/kvm_stat | 24 +++++++++++++++++++++++-
> 1 file changed, 23 insertions(+), 1 deletion(-)
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-01-23 20:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-23 20:44 [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 1/4] kvm_stat: Update exit reasons to the latest defintion Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 2/4] kvm_stat: Print errno when syscall to perf_event_open() fails Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 3/4] kvm_stat: Add aarch64 support Wei Huang
2015-01-23 20:44 ` [Qemu-devel] [PATCH V2 4/4] kvm_stat: Add RESET support for perf event ioctl Wei Huang
2015-01-23 20:59 ` [Qemu-devel] [PATCH V2 0/4] kvm_stat update Wei Huang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.