mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
scripts/kvm/kvm_stat: Cleanup of Event class
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> Message-Id: <1452525484-32309-25-git-send-email-frankja@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
fc9fdeebd5
commit
d895493b7c
1 changed files with 43 additions and 24 deletions
|
@ -339,15 +339,11 @@ 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):
|
||||||
def __init__(self, cpu):
|
def __init__(self):
|
||||||
self.events = []
|
self.events = []
|
||||||
self.cpu = cpu
|
|
||||||
|
|
||||||
def add_event(self, name, event_set, tracepoint, tracefilter=None):
|
def add_event(self, event):
|
||||||
self.events.append(Event(group=self,
|
self.events.append(event)
|
||||||
name=name, event_set=event_set,
|
|
||||||
tracepoint=tracepoint,
|
|
||||||
tracefilter=tracefilter))
|
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
length = 8 * (1 + len(self.events))
|
length = 8 * (1 + len(self.events))
|
||||||
|
@ -357,32 +353,52 @@ class Group(object):
|
||||||
os.read(self.events[0].fd, length))))
|
os.read(self.events[0].fd, length))))
|
||||||
|
|
||||||
class Event(object):
|
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
|
self.name = name
|
||||||
attr = perf_event_attr()
|
self.fd = None
|
||||||
attr.type = PERF_TYPE_TRACEPOINT
|
self.setup_event(group, trace_cpu, trace_point, trace_filter,
|
||||||
attr.size = ctypes.sizeof(attr)
|
trace_set)
|
||||||
id_path = os.path.join(PATH_DEBUGFS_TRACING, 'events', event_set,
|
|
||||||
tracepoint, 'id')
|
def setup_event_attribute(self, trace_set, trace_point):
|
||||||
id = int(file(id_path).read())
|
id_path = os.path.join(PATH_DEBUGFS_TRACING, 'events', trace_set,
|
||||||
attr.config = id
|
trace_point, '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, group, trace_cpu, trace_point, trace_filter,
|
||||||
|
trace_set):
|
||||||
|
event_attr = self.setup_event_attribute(trace_set, trace_point)
|
||||||
|
|
||||||
group_leader = -1
|
group_leader = -1
|
||||||
if group.events:
|
if group.events:
|
||||||
group_leader = group.events[0].fd
|
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:
|
if fd == -1:
|
||||||
err = ctypes.get_errno()
|
err = ctypes.get_errno()
|
||||||
raise OSError(err, os.strerror(err),
|
raise OSError(err, os.strerror(err),
|
||||||
'while calling sys_perf_event_open().')
|
'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
|
self.fd = fd
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
fcntl.ioctl(self.fd, IOCTL_NUMBERS['ENABLE'], 0)
|
fcntl.ioctl(self.fd, IOCTL_NUMBERS['ENABLE'], 0)
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
fcntl.ioctl(self.fd, IOCTL_NUMBERS['DISABLE'], 0)
|
fcntl.ioctl(self.fd, IOCTL_NUMBERS['DISABLE'], 0)
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
fcntl.ioctl(self.fd, IOCTL_NUMBERS['RESET'], 0)
|
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))
|
sys.exit("NOFILE rlimit could not be raised to {0}".format(rlimit))
|
||||||
|
|
||||||
for cpu in cpus:
|
for cpu in cpus:
|
||||||
group = Group(cpu)
|
group = Group()
|
||||||
for name in self._fields:
|
for name in self._fields:
|
||||||
tracepoint = name
|
tracepoint = name
|
||||||
tracefilter = None
|
tracefilter = None
|
||||||
|
@ -428,9 +444,12 @@ class TracepointProvider(object):
|
||||||
tracefilter = ('%s==%d\0' %
|
tracefilter = ('%s==%d\0' %
|
||||||
(self.filters[tracepoint][0],
|
(self.filters[tracepoint][0],
|
||||||
self.filters[tracepoint][1][sub]))
|
self.filters[tracepoint][1][sub]))
|
||||||
group.add_event(name, event_set='kvm',
|
|
||||||
tracepoint=tracepoint,
|
group.add_event(Event(name=name,
|
||||||
tracefilter=tracefilter)
|
group=group,
|
||||||
|
trace_cpu=cpu,
|
||||||
|
trace_point=tracepoint,
|
||||||
|
trace_filter=tracefilter))
|
||||||
self.group_leaders.append(group)
|
self.group_leaders.append(group)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue