summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac1
-rw-r--r--scripts/Makefile.am3
-rwxr-xr-xscripts/throttle.py67
4 files changed, 72 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index d098ed5d..78f63a42 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,4 +21,4 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-SUBDIRS = lib man tests tools benchmarks
+SUBDIRS = lib man tools scripts tests benchmarks
diff --git a/configure.ac b/configure.ac
index b2b63958..4eb1c486 100644
--- a/configure.ac
+++ b/configure.ac
@@ -95,6 +95,7 @@ AC_CONFIG_FILES([
benchmarks/Makefile
lib/Makefile
man/Makefile
+ scripts/Makefile
tests/Makefile
tools/Makefile
])
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)
+