Skip to content

Commit 045e6d3

Browse files
committed
gpu_usage: Initial import of script to read gpu usage debugfs info
Shows gpu usage as reported by the v3d driver Works on pi4 and pi5 (earlier models don't expose this info) This provides a little more detail than the GPU taskbar plugin (which just reports the maximum of the different fields).
1 parent 4f4a828 commit 045e6d3

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

scripts/gpu_usage.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env python3
2+
3+
import time
4+
import operator
5+
6+
def get_stats():
7+
try:
8+
with open('/sys/kernel/debug/dri/0/gpu_usage') as f:
9+
lines = f.readlines()
10+
except:
11+
print("gpu_usage is not supported on this device")
12+
exit(1)
13+
queue = {}
14+
for i in lines:
15+
s = i.replace("'", "").replace('"', "").strip().rstrip(';').split(';')
16+
queues = ["bin", "render", "tfu", "csd", "cache_clean"]
17+
if s[0] == 'timestamp':
18+
timestamp = int(s[1])
19+
elif s[0] == 'QUEUE':
20+
names = s[1:]
21+
elif s[0].replace("v3d_", "") in queues:
22+
queue[s[0]] = list(map(int, s[1:]))
23+
else:
24+
print(s)
25+
assert(False)
26+
return timestamp, names, queue
27+
28+
last_timestamp = None
29+
30+
while True:
31+
timestamp, names, queue = get_stats()
32+
if last_timestamp is not None:
33+
q = {}
34+
t = timestamp - last_timestamp
35+
for k,v in queue.items():
36+
q[k] = list(map(operator.sub, queue[k], last_queue[k]))
37+
s = []
38+
for k,v in q.items():
39+
s.append(f"{k}: jobs:{v[0]:3}{100.0*v[1]/t:6.1f}%")
40+
print(", ".join(s))
41+
last_timestamp = timestamp
42+
last_queue = queue
43+
time.sleep(1)

0 commit comments

Comments
 (0)