Commit 692c7f6d authored by Stefan Raspl's avatar Stefan Raspl Committed by Paolo Bonzini

tools/kvm_stat: full PEP8 compliance

Provides all missing empty lines as required for full PEP compliance.
Signed-off-by: default avatarStefan Raspl <raspl@linux.vnet.ibm.com>
Reviewed-by: default avatarMarc Hartmayer <mhartmay@linux.vnet.ibm.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
parent a1836069
...@@ -224,6 +224,7 @@ IOCTL_NUMBERS = { ...@@ -224,6 +224,7 @@ IOCTL_NUMBERS = {
'RESET': 0x00002403, 'RESET': 0x00002403,
} }
class Arch(object): class Arch(object):
"""Encapsulates global architecture specific data. """Encapsulates global architecture specific data.
...@@ -254,12 +255,14 @@ class Arch(object): ...@@ -254,12 +255,14 @@ class Arch(object):
return ArchX86(SVM_EXIT_REASONS) return ArchX86(SVM_EXIT_REASONS)
return return
class ArchX86(Arch): class ArchX86(Arch):
def __init__(self, exit_reasons): def __init__(self, exit_reasons):
self.sc_perf_evt_open = 298 self.sc_perf_evt_open = 298
self.ioctl_numbers = IOCTL_NUMBERS self.ioctl_numbers = IOCTL_NUMBERS
self.exit_reasons = exit_reasons self.exit_reasons = exit_reasons
class ArchPPC(Arch): class ArchPPC(Arch):
def __init__(self): def __init__(self):
self.sc_perf_evt_open = 319 self.sc_perf_evt_open = 319
...@@ -274,12 +277,14 @@ class ArchPPC(Arch): ...@@ -274,12 +277,14 @@ class ArchPPC(Arch):
self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16 self.ioctl_numbers['SET_FILTER'] = 0x80002406 | char_ptr_size << 16
self.exit_reasons = {} self.exit_reasons = {}
class ArchA64(Arch): class ArchA64(Arch):
def __init__(self): def __init__(self):
self.sc_perf_evt_open = 241 self.sc_perf_evt_open = 241
self.ioctl_numbers = IOCTL_NUMBERS self.ioctl_numbers = IOCTL_NUMBERS
self.exit_reasons = AARCH64_EXIT_REASONS self.exit_reasons = AARCH64_EXIT_REASONS
class ArchS390(Arch): class ArchS390(Arch):
def __init__(self): def __init__(self):
self.sc_perf_evt_open = 331 self.sc_perf_evt_open = 331
...@@ -341,6 +346,7 @@ def get_filters(): ...@@ -341,6 +346,7 @@ def get_filters():
libc = ctypes.CDLL('libc.so.6', use_errno=True) libc = ctypes.CDLL('libc.so.6', use_errno=True)
syscall = libc.syscall syscall = libc.syscall
class perf_event_attr(ctypes.Structure): class perf_event_attr(ctypes.Structure):
"""Struct that holds the necessary data to set up a trace event. """Struct that holds the necessary data to set up a trace event.
...@@ -369,6 +375,7 @@ class perf_event_attr(ctypes.Structure): ...@@ -369,6 +375,7 @@ class perf_event_attr(ctypes.Structure):
self.size = ctypes.sizeof(self) self.size = ctypes.sizeof(self)
self.read_format = PERF_FORMAT_GROUP self.read_format = PERF_FORMAT_GROUP
def perf_event_open(attr, pid, cpu, group_fd, flags): def perf_event_open(attr, pid, cpu, group_fd, flags):
"""Wrapper for the sys_perf_evt_open() syscall. """Wrapper for the sys_perf_evt_open() syscall.
...@@ -394,6 +401,7 @@ PERF_FORMAT_GROUP = 1 << 3 ...@@ -394,6 +401,7 @@ PERF_FORMAT_GROUP = 1 << 3
PATH_DEBUGFS_TRACING = '/sys/kernel/debug/tracing' PATH_DEBUGFS_TRACING = '/sys/kernel/debug/tracing'
PATH_DEBUGFS_KVM = '/sys/kernel/debug/kvm' PATH_DEBUGFS_KVM = '/sys/kernel/debug/kvm'
class Group(object): class Group(object):
"""Represents a perf event group.""" """Represents a perf event group."""
...@@ -426,6 +434,7 @@ class Group(object): ...@@ -426,6 +434,7 @@ class Group(object):
struct.unpack(read_format, struct.unpack(read_format,
os.read(self.events[0].fd, length)))) os.read(self.events[0].fd, length))))
class Event(object): class Event(object):
"""Represents a performance event and manages its life cycle.""" """Represents a performance event and manages its life cycle."""
def __init__(self, name, group, trace_cpu, trace_pid, trace_point, def __init__(self, name, group, trace_cpu, trace_pid, trace_point,
...@@ -509,6 +518,7 @@ class Event(object): ...@@ -509,6 +518,7 @@ class Event(object):
"""Resets the count of the trace event in the kernel.""" """Resets the count of the trace event in the kernel."""
fcntl.ioctl(self.fd, ARCH.ioctl_numbers['RESET'], 0) fcntl.ioctl(self.fd, ARCH.ioctl_numbers['RESET'], 0)
class TracepointProvider(object): class TracepointProvider(object):
"""Data provider for the stats class. """Data provider for the stats class.
...@@ -650,6 +660,7 @@ class TracepointProvider(object): ...@@ -650,6 +660,7 @@ class TracepointProvider(object):
ret[name] += val ret[name] += val
return ret return ret
class DebugfsProvider(object): class DebugfsProvider(object):
"""Provides data from the files that KVM creates in the kvm debugfs """Provides data from the files that KVM creates in the kvm debugfs
folder.""" folder."""
...@@ -719,6 +730,7 @@ class DebugfsProvider(object): ...@@ -719,6 +730,7 @@ class DebugfsProvider(object):
except IOError: except IOError:
return 0 return 0
class Stats(object): class Stats(object):
"""Manages the data providers and the data they provide. """Manages the data providers and the data they provide.
...@@ -790,6 +802,7 @@ class Stats(object): ...@@ -790,6 +802,7 @@ class Stats(object):
LABEL_WIDTH = 40 LABEL_WIDTH = 40
NUMBER_WIDTH = 10 NUMBER_WIDTH = 10
class Tui(object): class Tui(object):
"""Instruments curses to draw a nice text ui.""" """Instruments curses to draw a nice text ui."""
def __init__(self, stats): def __init__(self, stats):
...@@ -859,6 +872,7 @@ class Tui(object): ...@@ -859,6 +872,7 @@ class Tui(object):
len('Current'), 'Current') len('Current'), 'Current')
row = 3 row = 3
stats = self.stats.get() stats = self.stats.get()
def sortkey(x): def sortkey(x):
if stats[x][1]: if stats[x][1]:
return (-stats[x][1], -stats[x][0]) return (-stats[x][1], -stats[x][0])
...@@ -966,6 +980,7 @@ class Tui(object): ...@@ -966,6 +980,7 @@ class Tui(object):
except curses.error: except curses.error:
continue continue
def batch(stats): def batch(stats):
"""Prints statistics in a key, value format.""" """Prints statistics in a key, value format."""
try: try:
...@@ -978,13 +993,16 @@ def batch(stats): ...@@ -978,13 +993,16 @@ def batch(stats):
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
def log(stats): def log(stats):
"""Prints statistics as reiterating key block, multiple value blocks.""" """Prints statistics as reiterating key block, multiple value blocks."""
keys = sorted(stats.get().iterkeys()) keys = sorted(stats.get().iterkeys())
def banner(): def banner():
for k in keys: for k in keys:
print '%s' % k, print '%s' % k,
print print
def statline(): def statline():
s = stats.get() s = stats.get()
for k in keys: for k in keys:
...@@ -1002,6 +1020,7 @@ def log(stats): ...@@ -1002,6 +1020,7 @@ def log(stats):
except KeyboardInterrupt: except KeyboardInterrupt:
break break
def get_options(): def get_options():
"""Returns processed program arguments.""" """Returns processed program arguments."""
description_text = """ description_text = """
...@@ -1072,6 +1091,7 @@ Requirements: ...@@ -1072,6 +1091,7 @@ Requirements:
(options, _) = optparser.parse_args(sys.argv) (options, _) = optparser.parse_args(sys.argv)
return options return options
def get_providers(options): def get_providers(options):
"""Returns a list of data providers depending on the passed options.""" """Returns a list of data providers depending on the passed options."""
providers = [] providers = []
...@@ -1085,6 +1105,7 @@ def get_providers(options): ...@@ -1085,6 +1105,7 @@ def get_providers(options):
return providers return providers
def check_access(options): def check_access(options):
"""Exits if the current user can't access all needed directories.""" """Exits if the current user can't access all needed directories."""
if not os.path.exists('/sys/kernel/debug'): if not os.path.exists('/sys/kernel/debug'):
...@@ -1114,6 +1135,7 @@ def check_access(options): ...@@ -1114,6 +1135,7 @@ def check_access(options):
return options return options
def main(): def main():
options = get_options() options = get_options()
options = check_access(options) options = check_access(options)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment