summaryrefslogtreecommitdiffstats
path: root/bin/schedlat
diff options
context:
space:
mode:
Diffstat (limited to 'bin/schedlat')
-rwxr-xr-xbin/schedlat45
1 files changed, 45 insertions, 0 deletions
diff --git a/bin/schedlat b/bin/schedlat
new file mode 100755
index 0000000..9f4f1aa
--- /dev/null
+++ b/bin/schedlat
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+# Copyright 2020 Tanel Poder
+# Licensed under the Apache License, Version 2.0 (the "License")
+#
+# Name: schedlat.py (v0.2)
+# Purpose: display % of time a process spent in CPU runqueue
+# (scheduling latency)
+# Usage: ./schedlat.py PID
+#
+# %CPU shows % of time the task spent on CPU
+# %LAT shows % of time the task spent trying to get onto CPU (in runqueue)
+# %SLP shows the delta (not on CPU, not in runqueue, thus sleeping/waiting)
+#
+# Other: More info at https://0x.tools
+
+from __future__ import print_function
+from datetime import datetime
+import time, sys
+
+if len(sys.argv) != 2 or sys.argv[1] == '-h':
+ print("usage: " + sys.argv[0] + " PID")
+ exit(1)
+
+pid=sys.argv[1]
+
+with open('/proc/' + pid + '/comm', 'r') as f:
+ print("SchedLat by Tanel Poder [https://0x.tools]\n\nPID=" + pid + " COMM=" + f.read())
+
+print("%-20s %6s %6s %6s" % ("TIMESTAMP", "%CPU", "%LAT", "%SLP"))
+
+while True:
+ with open('/proc/' + pid + '/schedstat' , 'r') as f:
+ t1=time.time()
+ (cpu_ns1, lat_ns1, dontcare) = f.read().split()
+ time.sleep(1)
+ f.seek(0)
+ t2=time.time()
+ (cpu_ns2, lat_ns2, dontcare) = f.read().split()
+
+ cpu=(int(cpu_ns2)-int(cpu_ns1))/(t2-t1)/10000000
+ lat=(int(lat_ns2)-int(lat_ns1))/(t2-t1)/10000000
+
+ print("%-20s %6.1f %6.1f %6.1f" % (datetime.fromtimestamp(t2).strftime("%Y-%m-%d %H:%M:%S"), cpu, lat, 100-(cpu+lat)))
+