summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-06-08 12:13:46 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-06-08 12:16:23 +0100
commite0532d4eb0192f62d2fed29a67b830f122f356c2 (patch)
tree893912115e0a63d8a6d0339c171f22252e79b27c /scripts
parente235f932883316953a9b7a5bcc76ea3b775c3695 (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.am3
-rwxr-xr-xscripts/throttle.py67
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)
+