|
|
9bac43 |
From 5f41d9716a2f46f18ee4bf02c9875f1ae0ba53ee Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Date: Tue, 17 Oct 2017 19:15:32 +0200
|
|
|
9bac43 |
Subject: [PATCH 27/69] tools/kvm_stat: full PEP8 compliance
|
|
|
9bac43 |
MIME-Version: 1.0
|
|
|
9bac43 |
Content-Type: text/plain; charset=UTF-8
|
|
|
9bac43 |
Content-Transfer-Encoding: 8bit
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Message-id: <20171017191605.2378-7-david@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 77312
|
|
|
9bac43 |
O-Subject: [RHEL-7.5 qemu-kvm-rhev PATCH 06/39] tools/kvm_stat: full PEP8 compliance
|
|
|
9bac43 |
Bugzilla: 1497137
|
|
|
9bac43 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Upstream-status: linux.git 692c7f6deb553dde2531102cd10ac17ab61438e4
|
|
|
9bac43 |
|
|
|
9bac43 |
commit 692c7f6deb553dde2531102cd10ac17ab61438e4
|
|
|
9bac43 |
Author: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
9bac43 |
Date: Fri Mar 10 13:40:05 2017 +0100
|
|
|
9bac43 |
|
|
|
9bac43 |
tools/kvm_stat: full PEP8 compliance
|
|
|
9bac43 |
|
|
|
9bac43 |
Provides all missing empty lines as required for full PEP compliance.
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
9bac43 |
Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
|
|
|
9bac43 |
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
scripts/kvm/kvm_stat | 22 ++++++++++++++++++++++
|
|
|
9bac43 |
1 file changed, 22 insertions(+)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
|
|
|
9bac43 |
index 6207843..5c4f248 100755
|
|
|
9bac43 |
--- a/scripts/kvm/kvm_stat
|
|
|
9bac43 |
+++ b/scripts/kvm/kvm_stat
|
|
|
9bac43 |
@@ -224,6 +224,7 @@ IOCTL_NUMBERS = {
|
|
|
9bac43 |
'RESET': 0x00002403,
|
|
|
9bac43 |
}
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class Arch(object):
|
|
|
9bac43 |
"""Encapsulates global architecture specific data.
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -254,12 +255,14 @@ class Arch(object):
|
|
|
9bac43 |
return ArchX86(SVM_EXIT_REASONS)
|
|
|
9bac43 |
return
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class ArchX86(Arch):
|
|
|
9bac43 |
def __init__(self, exit_reasons):
|
|
|
9bac43 |
self.sc_perf_evt_open = 298
|
|
|
9bac43 |
self.ioctl_numbers = IOCTL_NUMBERS
|
|
|
9bac43 |
self.exit_reasons = exit_reasons
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class ArchPPC(Arch):
|
|
|
9bac43 |
def __init__(self):
|
|
|
9bac43 |
self.sc_perf_evt_open = 319
|
|
|
9bac43 |
@@ -274,12 +277,14 @@ class ArchPPC(Arch):
|
|
|
9bac43 |
self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16
|
|
|
9bac43 |
self.exit_reasons = {}
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class ArchA64(Arch):
|
|
|
9bac43 |
def __init__(self):
|
|
|
9bac43 |
self.sc_perf_evt_open = 241
|
|
|
9bac43 |
self.ioctl_numbers = IOCTL_NUMBERS
|
|
|
9bac43 |
self.exit_reasons = AARCH64_EXIT_REASONS
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class ArchS390(Arch):
|
|
|
9bac43 |
def __init__(self):
|
|
|
9bac43 |
self.sc_perf_evt_open = 331
|
|
|
9bac43 |
@@ -341,6 +346,7 @@ def get_filters():
|
|
|
9bac43 |
libc = ctypes.CDLL('libc.so.6', use_errno=True)
|
|
|
9bac43 |
syscall = libc.syscall
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class perf_event_attr(ctypes.Structure):
|
|
|
9bac43 |
"""Struct that holds the necessary data to set up a trace event.
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -369,6 +375,7 @@ class perf_event_attr(ctypes.Structure):
|
|
|
9bac43 |
self.size = ctypes.sizeof(self)
|
|
|
9bac43 |
self.read_format = PERF_FORMAT_GROUP
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def perf_event_open(attr, pid, cpu, group_fd, flags):
|
|
|
9bac43 |
"""Wrapper for the sys_perf_evt_open() syscall.
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -394,6 +401,7 @@ PERF_FORMAT_GROUP = 1 << 3
|
|
|
9bac43 |
PATH_DEBUGFS_TRACING = '/sys/kernel/debug/tracing'
|
|
|
9bac43 |
PATH_DEBUGFS_KVM = '/sys/kernel/debug/kvm'
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class Group(object):
|
|
|
9bac43 |
"""Represents a perf event group."""
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -426,6 +434,7 @@ class Group(object):
|
|
|
9bac43 |
struct.unpack(read_format,
|
|
|
9bac43 |
os.read(self.events[0].fd, length))))
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class Event(object):
|
|
|
9bac43 |
"""Represents a performance event and manages its life cycle."""
|
|
|
9bac43 |
def __init__(self, name, group, trace_cpu, trace_pid, trace_point,
|
|
|
9bac43 |
@@ -509,6 +518,7 @@ class Event(object):
|
|
|
9bac43 |
"""Resets the count of the trace event in the kernel."""
|
|
|
9bac43 |
fcntl.ioctl(self.fd, ARCH.ioctl_numbers['RESET'], 0)
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class TracepointProvider(object):
|
|
|
9bac43 |
"""Data provider for the stats class.
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -650,6 +660,7 @@ class TracepointProvider(object):
|
|
|
9bac43 |
ret[name] += val
|
|
|
9bac43 |
return ret
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class DebugfsProvider(object):
|
|
|
9bac43 |
"""Provides data from the files that KVM creates in the kvm debugfs
|
|
|
9bac43 |
folder."""
|
|
|
9bac43 |
@@ -719,6 +730,7 @@ class DebugfsProvider(object):
|
|
|
9bac43 |
except IOError:
|
|
|
9bac43 |
return 0
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class Stats(object):
|
|
|
9bac43 |
"""Manages the data providers and the data they provide.
|
|
|
9bac43 |
|
|
|
9bac43 |
@@ -790,6 +802,7 @@ class Stats(object):
|
|
|
9bac43 |
LABEL_WIDTH = 40
|
|
|
9bac43 |
NUMBER_WIDTH = 10
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
class Tui(object):
|
|
|
9bac43 |
"""Instruments curses to draw a nice text ui."""
|
|
|
9bac43 |
def __init__(self, stats):
|
|
|
9bac43 |
@@ -859,6 +872,7 @@ class Tui(object):
|
|
|
9bac43 |
len('Current'), 'Current')
|
|
|
9bac43 |
row = 3
|
|
|
9bac43 |
stats = self.stats.get()
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def sortkey(x):
|
|
|
9bac43 |
if stats[x][1]:
|
|
|
9bac43 |
return (-stats[x][1], -stats[x][0])
|
|
|
9bac43 |
@@ -966,6 +980,7 @@ class Tui(object):
|
|
|
9bac43 |
except curses.error:
|
|
|
9bac43 |
continue
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def batch(stats):
|
|
|
9bac43 |
"""Prints statistics in a key, value format."""
|
|
|
9bac43 |
try:
|
|
|
9bac43 |
@@ -978,13 +993,16 @@ def batch(stats):
|
|
|
9bac43 |
except KeyboardInterrupt:
|
|
|
9bac43 |
pass
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def log(stats):
|
|
|
9bac43 |
"""Prints statistics as reiterating key block, multiple value blocks."""
|
|
|
9bac43 |
keys = sorted(stats.get().iterkeys())
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def banner():
|
|
|
9bac43 |
for k in keys:
|
|
|
9bac43 |
print '%s' % k,
|
|
|
9bac43 |
print
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def statline():
|
|
|
9bac43 |
s = stats.get()
|
|
|
9bac43 |
for k in keys:
|
|
|
9bac43 |
@@ -1002,6 +1020,7 @@ def log(stats):
|
|
|
9bac43 |
except KeyboardInterrupt:
|
|
|
9bac43 |
break
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def get_options():
|
|
|
9bac43 |
"""Returns processed program arguments."""
|
|
|
9bac43 |
description_text = """
|
|
|
9bac43 |
@@ -1072,6 +1091,7 @@ Requirements:
|
|
|
9bac43 |
(options, _) = optparser.parse_args(sys.argv)
|
|
|
9bac43 |
return options
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def get_providers(options):
|
|
|
9bac43 |
"""Returns a list of data providers depending on the passed options."""
|
|
|
9bac43 |
providers = []
|
|
|
9bac43 |
@@ -1085,6 +1105,7 @@ def get_providers(options):
|
|
|
9bac43 |
|
|
|
9bac43 |
return providers
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def check_access(options):
|
|
|
9bac43 |
"""Exits if the current user can't access all needed directories."""
|
|
|
9bac43 |
if not os.path.exists('/sys/kernel/debug'):
|
|
|
9bac43 |
@@ -1114,6 +1135,7 @@ def check_access(options):
|
|
|
9bac43 |
|
|
|
9bac43 |
return options
|
|
|
9bac43 |
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def main():
|
|
|
9bac43 |
options = get_options()
|
|
|
9bac43 |
options = check_access(options)
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|