You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
#!/usr/bin/env python
|
|
#
|
|
# Usage:
|
|
# scripts/throttle.py trace-dat
|
|
#
|
|
# Shows how often the trace throttles and for how long.
|
|
|
|
import getopt
|
|
from tracecmd import *
|
|
import sys
|
|
|
|
requests = {}
|
|
throttle = {}
|
|
prev_throttle = 0;
|
|
|
|
def read_events(t):
|
|
for cpu in range(0, t.cpus):
|
|
e = t.read_event(cpu)
|
|
while e:
|
|
if e.name == 'i915_gem_request_complete':
|
|
seqno = e.num_field('seqno')
|
|
requests[seqno] = e.ts;
|
|
|
|
if e.name == 'i915_gem_request_throttle_begin':
|
|
seqno = e.num_field('seqno')
|
|
throttle[seqno] = e.ts
|
|
|
|
if e.name == 'i915_gem_request_throttle_end':
|
|
global prev_throttle
|
|
|
|
ts = 0
|
|
sum_dispatch = 0
|
|
num_dispatch = 0
|
|
max_dispatch = 0
|
|
|
|
seqno = e.num_field('seqno')
|
|
s = prev_throttle
|
|
if s == 0:
|
|
s = seqno
|
|
while s <= seqno:
|
|
if requests.has_key(s):
|
|
if ts:
|
|
delta = requests[s] - ts
|
|
num_dispatch += 1
|
|
sum_dispatch += delta
|
|
if delta > max_dispatch: max_dispatch = delta
|
|
ts = requests[s]
|
|
s += 1
|
|
|
|
if throttle.has_key(seqno) and throttle.has_key(prev_throttle) and num_dispatch:
|
|
print "throttle +%d: %dms -- %d dispatch, avg %.3fms, max %dus" % ((throttle[seqno]-throttle[prev_throttle])/1000000, (e.ts - throttle[seqno]) / 1000000, num_dispatch, sum_dispatch / (1000000. * num_dispatch), max_dispatch / 1000)
|
|
throttle[seqno] = e.ts
|
|
|
|
prev_throttle = seqno
|
|
|
|
e = t.read_event(cpu)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) >=2:
|
|
filename = sys.argv[1]
|
|
else:
|
|
filename = "trace.dat"
|
|
|
|
print "Initializing trace '%s'..." % (filename)
|
|
trace = Trace(filename)
|
|
read_events(trace)
|
|
|