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

#!/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)