From 6aa358fb5a40173299d8abe6c974b6ae8d9f7f05 Mon Sep 17 00:00:00 2001 From: Piotr Pelplinski Date: Wed, 23 Jan 2019 17:02:25 +0100 Subject: [PATCH] histograms: add script for parsing histogram data Signed-off-by: Piotr Pelplinski Change-Id: I2c4df9593fa7c6aa4fe3408f7851e253f59f26eb Reviewed-on: https://review.gerrithub.io/c/441583 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Pawel Wodkowski Reviewed-by: Karol Latecki Reviewed-by: Darek Stojaczyk --- scripts/histogram.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 scripts/histogram.py diff --git a/scripts/histogram.py b/scripts/histogram.py new file mode 100755 index 0000000000..9d0b10fc01 --- /dev/null +++ b/scripts/histogram.py @@ -0,0 +1,44 @@ +#!/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))