qemu-devel
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]