qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.vnet.ibm.com>
To: pbonzini@redhat.com
Cc: frankja@linux.vnet.ibm.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v2 24/34] scripts/kvm/kvm_stat: Cleanup of Event class
Date: Mon, 11 Jan 2016 16:17:54 +0100	[thread overview]
Message-ID: <1452525484-32309-25-git-send-email-frankja@linux.vnet.ibm.com> (raw)
In-Reply-To: <1452525484-32309-1-git-send-email-frankja@linux.vnet.ibm.com>

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 <frankja@linux.vnet.ibm.com>
---
 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
-- 
2.3.0

  parent reply	other threads:[~2016-01-11 15:19 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-11 15:17 [Qemu-devel] [PATCH v2 00/34] kvm_stat: Cleanup and fixup Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 01/34] scripts/kvm/kvm_stat: Cleanup of multiple imports Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 02/34] scripts/kvm/kvm_stat: Replaced os.listdir with os.walk Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 03/34] scripts/kvm/kvm_stat: Make constants uppercase Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 04/34] scripts/kvm/kvm_stat: Removed unneeded PERF constants Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 05/34] scripts/kvm/kvm_stat: Mark globals in functions Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 06/34] scripts/kvm/kvm_stat: Invert dictionaries Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 07/34] scripts/kvm/kvm_stat: Cleanup of path variables Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 08/34] scripts/kvm/kvm_stat: Improve debugfs access checking Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 09/34] scripts/kvm/kvm_stat: Introduce main function Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 10/34] scripts/kvm/kvm_stat: Fix spaces around keyword assignments Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 11/34] scripts/kvm/kvm_stat: Rename variables that redefine globals Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 12/34] scripts/kvm/kvm_stat: Moved DebugfsProvider Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 13/34] scripts/kvm/kvm_stat: Fixup syscall error reporting Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 14/34] scripts/kvm/kvm_stat: Set sensible no. files rlimit Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 15/34] scripts/kvm/kvm_stat: Cleanup of platform detection Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 16/34] scripts/kvm/kvm_stat: Make cpu detection a function Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 17/34] scripts/kvm/kvm_stat: Rename _perf_event_open Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 18/34] scripts/kvm/kvm_stat: Introduce properties for providers Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 19/34] scripts/kvm/kvm_stat: Cleanup of TracepointProvider Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 20/34] scripts/kvm/kvm_stat: Cleanup cpu list retrieval Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 21/34] scripts/kvm/kvm_stat: Encapsulate filters variable Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 22/34] scripts/kvm/kvm_stat: Cleanup of Stats class Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 23/34] scripts/kvm/kvm_stat: Cleanup of Groups class Janosch Frank
2016-01-11 15:17 ` Janosch Frank [this message]
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 25/34] scripts/kvm/kvm_stat: Group arch specific data Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 26/34] scripts/kvm/kvm_stat: Remove unneeded X86_EXIT_REASONS Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 27/34] scripts/kvm/kvm_stat: Make tui function a class Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 28/34] scripts/kvm/kvm_stat: Fix output formatting Janosch Frank
2016-01-11 15:17 ` [Qemu-devel] [PATCH v2 29/34] scripts/kvm/kvm_stat: Cleanup and pre-init perf_event_attr Janosch Frank
2016-01-11 15:18 ` [Qemu-devel] [PATCH v2 30/34] scripts/kvm/kvm_stat: Read event values as u64 Janosch Frank
2016-01-11 15:18 ` [Qemu-devel] [PATCH v2 31/34] scripts/kvm/kvm_stat: Fix rlimit for unprivileged users Janosch Frank
2016-01-20 11:03   ` Paolo Bonzini
2016-01-11 15:18 ` [Qemu-devel] [PATCH v2 32/34] scripts/kvm/kvm_stat: Fixup filtering Janosch Frank
2016-01-11 15:18 ` [Qemu-devel] [PATCH v2 33/34] scripts/kvm/kvm_stat: Add interactive filtering Janosch Frank
2016-01-11 15:18 ` [Qemu-devel] [PATCH v2 34/34] scripts/kvm/kvm_stat: Add optparse description Janosch Frank
2016-01-20 11:08 ` [Qemu-devel] [PATCH v2 00/34] kvm_stat: Cleanup and fixup Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1452525484-32309-25-git-send-email-frankja@linux.vnet.ibm.com \
    --to=frankja@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).