Skip to content

Commit a9616a0

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 a9616a0

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_uage 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)