[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 24/34] scripts/kvm/kvm_stat: Cleanup of Event class
From: |
Janosch Frank |
Subject: |
[Qemu-devel] [PATCH 24/34] scripts/kvm/kvm_stat: Cleanup of Event class |
Date: |
Thu, 10 Dec 2015 13:12:54 +0100 |
Added additional newlines for readability.
Factored out attribute and event setup code into own methods. All
data necessary for setting up the events was consolidated into one
dictionary. That way we get rid of the large argument list of the
functions that handle the data.
Exchanged file() with preferred open().
---
scripts/kvm/kvm_stat | 73 +++++++++++++++++++++++++++++++++-------------------
1 file changed, 47 insertions(+), 26 deletions(-)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 5d45604..70a27da 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -333,15 +333,11 @@ PATH_TRACING = '/sys/kernel/debug/tracing'
PATH_DEBUGFS = '/sys/kernel/debug/kvm'
class Group(object):
- def __init__(self, cpu):
+ def __init__(self):
self.events = []
- self.cpu = cpu
- def add_event(self, name, event_set, tracepoint, tracefilter=None):
- self.events.append(Event(group=self,
- name=name, event_set=event_set,
- tracepoint=tracepoint,
- tracefilter=tracefilter))
+ def add_event(self, event_data):
+ self.events.append(Event(event_data))
def read(self):
length = 8 * (1 + len(self.events))
@@ -351,32 +347,50 @@ class Group(object):
os.read(self.events[0].fd, length))))
class Event(object):
- def __init__(self, group, name, event_set, tracepoint, tracefilter=None):
- self.name = name
- attr = perf_event_attr()
- attr.type = PERF_TYPE_TRACEPOINT
- attr.size = ctypes.sizeof(attr)
+ def __init__(self, event_data):
+ self.name = event_data['name']
+ self.fd = None
+ self.setup_event(event_data)
+
+ def setup_event_attribute(self, event_set, tracepoint):
id_path = os.path.join(PATH_TRACING, 'events', event_set,
tracepoint, 'id')
- id = int(file(id_path).read())
- attr.config = id
- attr.sample_period = 1
- attr.read_format = PERF_FORMAT_GROUP
+
+ event_attr = perf_event_attr()
+ event_attr.type = PERF_TYPE_TRACEPOINT
+ event_attr.size = ctypes.sizeof(event_attr)
+ event_attr.config = int(open(id_path).read())
+ event_attr.sample_period = 1
+ event_attr.read_format = PERF_FORMAT_GROUP
+ return event_attr
+
+ def setup_event(self, event_data):
+ event_attr = self.setup_event_attribute(event_data['set'],
+ event_data['tracepoint'])
+
group_leader = -1
- if group.events:
- group_leader = group.events[0].fd
- fd = perf_event_open(attr, -1, group.cpu, group_leader, 0)
+ if event_data['group'].events:
+ group_leader = event_data['group'].events[0].fd
+
+ fd = perf_event_open(event_attr, -1, event_data['cpu'],
+ group_leader, 0)
if fd == -1:
err = ctypes.get_errno()
- raise OSError(err, os.os.strerror(err),
+ raise OSError(err, os.strerror(err),
'while calling sys_perf_event_open().')
- if tracefilter:
- fcntl.ioctl(fd, IOCTL_NUMBERS['SET_FILTER'], tracefilter)
+
+ if event_data['filter']:
+ fcntl.ioctl(fd, IOCTL_NUMBERS['SET_FILTER'],
+ event_data['filter'])
+
self.fd = fd
+
def enable(self):
fcntl.ioctl(self.fd, IOCTL_NUMBERS['ENABLE'], 0)
+
def disable(self):
fcntl.ioctl(self.fd, IOCTL_NUMBERS['DISABLE'], 0)
+
def reset(self):
fcntl.ioctl(self.fd, IOCTL_NUMBERS['RESET'], 0)
@@ -412,7 +426,7 @@ class TracepointProvider(object):
sys.exit("NOFILE rlimit could not be raised to {0}".format(rlimit))
for cpu in cpus:
- group = Group(cpu)
+ group = Group()
for name in self._fields:
tracepoint = name
tracefilter = None
@@ -422,9 +436,16 @@ class TracepointProvider(object):
tracefilter = ('%s==%d\0' %
(self.filters[tracepoint][0],
self.filters[tracepoint][1][sub]))
- group.add_event(name, event_set='kvm',
- tracepoint=tracepoint,
- tracefilter=tracefilter)
+
+ event_data = {
+ 'cpu': cpu,
+ 'name': name,
+ 'group': group,
+ 'set': 'kvm',
+ 'tracepoint': tracepoint,
+ 'filter': tracefilter or None,
+ }
+ group.add_event(event_data)
self.group_leaders.append(group)
@property
--
2.3.0
- [Qemu-devel] [PATCH 17/34] scripts/kvm/kvm_stat: Rename _perf_event_open, (continued)
- [Qemu-devel] [PATCH 17/34] scripts/kvm/kvm_stat: Rename _perf_event_open, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 18/34] scripts/kvm/kvm_stat: Introduce properties for providers, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 21/34] scripts/kvm/kvm_stat: Encapsulate filters variable, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 23/34] scripts/kvm/kvm_stat: Cleanup of Groups class, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 16/34] scripts/kvm/kvm_stat: Make cpu detection a function, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 22/34] scripts/kvm/kvm_stat: Cleanup of Stats class, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 26/34] scripts/kvm/kvm_stat: Remove unneeded X86_EXIT_REASONS, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 10/34] scripts/kvm/kvm_stat: Fix spaces around keyword assignments, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 29/34] scripts/kvm/kvm_stat: Move to argparse and add description, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 27/34] scripts/kvm/kvm_stat: Make tui function a class, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 24/34] scripts/kvm/kvm_stat: Cleanup of Event class,
Janosch Frank <=
- [Qemu-devel] [PATCH 33/34] scripts/kvm/kvm_stat: Fixup filtering, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 11/34] scripts/kvm/kvm_stat: Rename variables that redefine globals, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 06/34] scripts/kvm/kvm_stat: Invert dictionaries, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 15/34] scripts/kvm/kvm_stat: Cleanup of platform detection, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 19/34] scripts/kvm/kvm_stat: Cleanup of TracepointProvider, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 31/34] scripts/kvm/kvm_stat: Read event values as u64, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 30/34] scripts/kvm/kvm_stat: Cleanup and pre-init perf_event_attr, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 28/34] scripts/kvm/kvm_stat: Fix output formatting, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 08/34] scripts/kvm/kvm_stat: Improve debugfs access checking, Janosch Frank, 2015/12/10
- [Qemu-devel] [PATCH 20/34] scripts/kvm/kvm_stat: Cleanup cpu list retrieval, Janosch Frank, 2015/12/10