numam-spdk/scripts/histogram.py

45 lines
1.3 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import sys
import json
import base64
import struct
buf = sys.stdin.readlines()
json = json.loads(" ".join(buf))
histogram = base64.b64decode(json["histogram"])
bucket_shift = json["bucket_shift"]
tsc_rate = json["tsc_rate"]
print("Latency histogram")
print("==============================================================================")
print(" Range in us Cumulative IO count")
so_far = 0
bucket = 0
total = 1
for i in range(0, 64 - bucket_shift):
for j in range(0, (1 << bucket_shift)):
index = (((i << bucket_shift) + j) * 8)
total += int.from_bytes(histogram[index:index + 8], 'little')
for i in range(0, 64 - bucket_shift):
for j in range(0, (1 << bucket_shift)):
index = (((i << bucket_shift) + j)*8)
count = int.from_bytes(histogram[index:index + 8], 'little')
so_far += count
last_bucket = bucket
if i > 0:
bucket = (1 << (i + bucket_shift - 1))
bucket += ((j+1) << (i - 1))
else:
bucket = j+1
start = last_bucket * 1000 * 1000 / tsc_rate
end = bucket * 1000 * 1000 / tsc_rate
so_far_pct = so_far * 100.0 / total
if count > 0:
print("%9.3f - %9.3f: %9.4f%% (%9u)" % (start, end, so_far_pct, count))