xref: /aosp_15_r20/external/igt-gpu-tools/scripts/throttle.py (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
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