interrupt count stcript

This commit is contained in:
Richard
2026-03-29 08:49:58 +00:00
commit a8cf4a4576

61
monitor-interrupt-counts.py Executable file
View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
"""Monitor per-second interrupt counts for a specific interrupt type."""
import sys
import time
def parse_interrupts(filter_str):
"""Parse /proc/interrupts and return counts for lines matching filter_str."""
results = {}
with open("/proc/interrupts") as f:
header = f.readline().split()
num_cpus = len(header)
for line in f:
if filter_str not in line:
continue
parts = line.split()
label = parts[0].rstrip(":")
counts = [int(parts[i + 1]) for i in range(num_cpus)]
results[label] = counts
return header, results
def main():
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <interrupt-type>", file=sys.stderr)
sys.exit(1)
filter_str = sys.argv[1]
cpu_names, prev = parse_interrupts(filter_str)
if not prev:
print(f"No interrupts matching '{filter_str}' found in /proc/interrupts", file=sys.stderr)
sys.exit(1)
num_cpus = len(cpu_names)
print(f"Monitoring interrupts matching '{filter_str}' every 1s (Ctrl-C to stop)\n")
# Print header
cpu_hdr = " ".join(f"{c:>8}" for c in cpu_names)
print(f"{'IRQ':<20} {cpu_hdr} {'TOTAL':>10}")
print("-" * (22 + num_cpus * 10 + 12))
try:
while True:
time.sleep(1)
_, curr = parse_interrupts(filter_str)
for label in sorted(curr):
if label not in prev:
prev[label] = [0] * num_cpus
deltas = [c - p for c, p in zip(curr[label], prev[label])]
total = sum(deltas)
cols = " ".join(f"{d:>8}" for d in deltas)
print(f"{label:<20} {cols} {total:>10}")
prev = curr
except KeyboardInterrupt:
print()
if __name__ == "__main__":
main()