[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 30/49] scripts/kvm/kvm_stat: Cleanup of Event class
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 30/49] scripts/kvm/kvm_stat: Cleanup of Event class |
Date: |
Tue, 26 Jan 2016 14:47:02 +0100 |
From: Janosch Frank <address@hidden>
Added additional newlines for readability.
Factored out attribute and event setup code into own methods.
Exchanged file() with preferred open().
Signed-off-by: Janosch Frank <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
scripts/kvm/kvm_stat | 67 +++++++++++++++++++++++++++++++++-------------------
1 file changed, 43 insertions(+), 24 deletions(-)
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
index 91054e5..bf948b9 100755
--- a/scripts/kvm/kvm_stat
+++ b/scripts/kvm/kvm_stat
@@ -339,15 +339,11 @@ PATH_DEBUGFS_TRACING = '/sys/kernel/debug/tracing'
PATH_DEBUGFS_KVM = '/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):
+ self.events.append(event)
def read(self):
length = 8 * (1 + len(self.events))
@@ -357,32 +353,52 @@ class Group(object):
os.read(self.events[0].fd, length))))
class Event(object):
- def __init__(self, group, name, event_set, tracepoint, tracefilter=None):
+ def __init__(self, name, group, trace_cpu, trace_point, trace_filter,
+ trace_set='kvm'):
self.name = name
- attr = perf_event_attr()
- attr.type = PERF_TYPE_TRACEPOINT
- attr.size = ctypes.sizeof(attr)
- id_path = os.path.join(PATH_DEBUGFS_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
+ self.fd = None
+ self.setup_event(group, trace_cpu, trace_point, trace_filter,
+ trace_set)
+
+ def setup_event_attribute(self, trace_set, trace_point):
+ id_path = os.path.join(PATH_DEBUGFS_TRACING, 'events', trace_set,
+ trace_point, 'id')
+
+ 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, group, trace_cpu, trace_point, trace_filter,
+ trace_set):
+ event_attr = self.setup_event_attribute(trace_set, trace_point)
+
group_leader = -1
if group.events:
group_leader = group.events[0].fd
- fd = perf_event_open(attr, -1, group.cpu, group_leader, 0)
+
+ fd = perf_event_open(event_attr, -1, trace_cpu,
+ group_leader, 0)
if fd == -1:
err = ctypes.get_errno()
raise OSError(err, os.strerror(err),
'while calling sys_perf_event_open().')
- if tracefilter:
- fcntl.ioctl(fd, IOCTL_NUMBERS['SET_FILTER'], tracefilter)
+
+ if trace_filter:
+ fcntl.ioctl(fd, IOCTL_NUMBERS['SET_FILTER'],
+ trace_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)
@@ -418,7 +434,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
@@ -428,9 +444,12 @@ 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)
+
+ group.add_event(Event(name=name,
+ group=group,
+ trace_cpu=cpu,
+ trace_point=tracepoint,
+ trace_filter=tracefilter))
self.group_leaders.append(group)
@property
--
1.8.3.1
- [Qemu-devel] [PULL 16/49] scripts/kvm/kvm_stat: Fix spaces around keyword assignments, (continued)
- [Qemu-devel] [PULL 16/49] scripts/kvm/kvm_stat: Fix spaces around keyword assignments, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 20/49] scripts/kvm/kvm_stat: Set sensible no. files rlimit, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 19/49] scripts/kvm/kvm_stat: Fixup syscall error reporting, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 23/49] scripts/kvm/kvm_stat: Rename _perf_event_open, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 22/49] scripts/kvm/kvm_stat: Make cpu detection a function, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 21/49] scripts/kvm/kvm_stat: Cleanup of platform detection, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 26/49] scripts/kvm/kvm_stat: Cleanup cpu list retrieval, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 27/49] scripts/kvm/kvm_stat: Encapsulate filters variable, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 25/49] scripts/kvm/kvm_stat: Cleanup of TracepointProvider, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 24/49] scripts/kvm/kvm_stat: Introduce properties for providers, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 30/49] scripts/kvm/kvm_stat: Cleanup of Event class,
Paolo Bonzini <=
- [Qemu-devel] [PULL 29/49] scripts/kvm/kvm_stat: Cleanup of Groups class, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 28/49] scripts/kvm/kvm_stat: Cleanup of Stats class, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 36/49] scripts/kvm/kvm_stat: Read event values as u64, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 31/49] scripts/kvm/kvm_stat: Group arch specific data, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 34/49] scripts/kvm/kvm_stat: Fix output formatting, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 33/49] scripts/kvm/kvm_stat: Make tui function a class, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 37/49] scripts/kvm/kvm_stat: Fix rlimit for unprivileged users, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 38/49] scripts/kvm/kvm_stat: Fixup filtering, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 32/49] scripts/kvm/kvm_stat: Remove unneeded X86_EXIT_REASONS, Paolo Bonzini, 2016/01/26
- [Qemu-devel] [PULL 35/49] scripts/kvm/kvm_stat: Cleanup and pre-init perf_event_attr, Paolo Bonzini, 2016/01/26