diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-06-08 12:13:46 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-06-08 12:16:23 +0100 |
commit | e0532d4eb0192f62d2fed29a67b830f122f356c2 (patch) | |
tree | 893912115e0a63d8a6d0339c171f22252e79b27c /scripts | |
parent | e235f932883316953a9b7a5bcc76ea3b775c3695 (diff) |
scripts: Add throttle.py
Parses a trace.dat and works out how long each throttle was and how many
batches retired within that period (and their average duration).
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
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) + |