1*d83cc019SAndroid Build Coastguard Worker#!/usr/bin/env python 2*d83cc019SAndroid Build Coastguard Worker# 3*d83cc019SAndroid Build Coastguard Worker# Usage: 4*d83cc019SAndroid Build Coastguard Worker# scripts/throttle.py trace-dat 5*d83cc019SAndroid Build Coastguard Worker# 6*d83cc019SAndroid Build Coastguard Worker# Shows how often the trace throttles and for how long. 7*d83cc019SAndroid Build Coastguard Worker 8*d83cc019SAndroid Build Coastguard Workerimport getopt 9*d83cc019SAndroid Build Coastguard Workerfrom tracecmd import * 10*d83cc019SAndroid Build Coastguard Workerimport sys 11*d83cc019SAndroid Build Coastguard Worker 12*d83cc019SAndroid Build Coastguard Workerrequests = {} 13*d83cc019SAndroid Build Coastguard Workerthrottle = {} 14*d83cc019SAndroid Build Coastguard Workerprev_throttle = 0; 15*d83cc019SAndroid Build Coastguard Worker 16*d83cc019SAndroid Build Coastguard Workerdef read_events(t): 17*d83cc019SAndroid Build Coastguard Worker for cpu in range(0, t.cpus): 18*d83cc019SAndroid Build Coastguard Worker e = t.read_event(cpu) 19*d83cc019SAndroid Build Coastguard Worker while e: 20*d83cc019SAndroid Build Coastguard Worker if e.name == 'i915_gem_request_complete': 21*d83cc019SAndroid Build Coastguard Worker seqno = e.num_field('seqno') 22*d83cc019SAndroid Build Coastguard Worker requests[seqno] = e.ts; 23*d83cc019SAndroid Build Coastguard Worker 24*d83cc019SAndroid Build Coastguard Worker if e.name == 'i915_gem_request_throttle_begin': 25*d83cc019SAndroid Build Coastguard Worker seqno = e.num_field('seqno') 26*d83cc019SAndroid Build Coastguard Worker throttle[seqno] = e.ts 27*d83cc019SAndroid Build Coastguard Worker 28*d83cc019SAndroid Build Coastguard Worker if e.name == 'i915_gem_request_throttle_end': 29*d83cc019SAndroid Build Coastguard Worker global prev_throttle 30*d83cc019SAndroid Build Coastguard Worker 31*d83cc019SAndroid Build Coastguard Worker ts = 0 32*d83cc019SAndroid Build Coastguard Worker sum_dispatch = 0 33*d83cc019SAndroid Build Coastguard Worker num_dispatch = 0 34*d83cc019SAndroid Build Coastguard Worker max_dispatch = 0 35*d83cc019SAndroid Build Coastguard Worker 36*d83cc019SAndroid Build Coastguard Worker seqno = e.num_field('seqno') 37*d83cc019SAndroid Build Coastguard Worker s = prev_throttle 38*d83cc019SAndroid Build Coastguard Worker if s == 0: 39*d83cc019SAndroid Build Coastguard Worker s = seqno 40*d83cc019SAndroid Build Coastguard Worker while s <= seqno: 41*d83cc019SAndroid Build Coastguard Worker if requests.has_key(s): 42*d83cc019SAndroid Build Coastguard Worker if ts: 43*d83cc019SAndroid Build Coastguard Worker delta = requests[s] - ts 44*d83cc019SAndroid Build Coastguard Worker num_dispatch += 1 45*d83cc019SAndroid Build Coastguard Worker sum_dispatch += delta 46*d83cc019SAndroid Build Coastguard Worker if delta > max_dispatch: max_dispatch = delta 47*d83cc019SAndroid Build Coastguard Worker ts = requests[s] 48*d83cc019SAndroid Build Coastguard Worker s += 1 49*d83cc019SAndroid Build Coastguard Worker 50*d83cc019SAndroid Build Coastguard Worker if throttle.has_key(seqno) and throttle.has_key(prev_throttle) and num_dispatch: 51*d83cc019SAndroid Build Coastguard Worker 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) 52*d83cc019SAndroid Build Coastguard Worker throttle[seqno] = e.ts 53*d83cc019SAndroid Build Coastguard Worker 54*d83cc019SAndroid Build Coastguard Worker prev_throttle = seqno 55*d83cc019SAndroid Build Coastguard Worker 56*d83cc019SAndroid Build Coastguard Worker e = t.read_event(cpu) 57*d83cc019SAndroid Build Coastguard Worker 58*d83cc019SAndroid Build Coastguard Workerif __name__ == "__main__": 59*d83cc019SAndroid Build Coastguard Worker if len(sys.argv) >=2: 60*d83cc019SAndroid Build Coastguard Worker filename = sys.argv[1] 61*d83cc019SAndroid Build Coastguard Worker else: 62*d83cc019SAndroid Build Coastguard Worker filename = "trace.dat" 63*d83cc019SAndroid Build Coastguard Worker 64*d83cc019SAndroid Build Coastguard Worker print "Initializing trace '%s'..." % (filename) 65*d83cc019SAndroid Build Coastguard Worker trace = Trace(filename) 66*d83cc019SAndroid Build Coastguard Worker read_events(trace) 67*d83cc019SAndroid Build Coastguard Worker 68