diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.am | 3 | ||||
-rwxr-xr-x | scripts/throttle.py | 67 |
2 files changed, 70 insertions, 0 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am new file mode 100644 index 00000000..8a1daca7 --- /dev/null +++ b/scripts/Makefile.am @@ -0,0 +1,3 @@ +noinst_SCRIPTS = \ + throttle.py\ + $(NULL) diff --git a/scripts/throttle.py b/scripts/throttle.py new file mode 100755 index 00000000..126175ca --- /dev/null +++ b/scripts/throttle.py @@ -0,0 +1,67 @@ +#!/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) + |