X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=tools%2Fhist%2Ffio-histo-log-pctiles.py;h=b5d167de2295fa45354c920be63b3f3f92dfebcd;hb=HEAD;hp=7f08f6e32d15cb64946ec53bf42db816ad741669;hpb=9a0ac6c7b69355ea095f06c6b0a08115c946dd61;p=fio.git diff --git a/tools/hist/fio-histo-log-pctiles.py b/tools/hist/fio-histo-log-pctiles.py index 7f08f6e3..b5d167de 100755 --- a/tools/hist/fio-histo-log-pctiles.py +++ b/tools/hist/fio-histo-log-pctiles.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # module to parse fio histogram log files, not using pandas # runs in python v2 or v3 @@ -24,6 +24,7 @@ import sys, os, math, copy, time from copy import deepcopy import argparse +from functools import reduce unittest2_imported = True try: @@ -82,7 +83,7 @@ def parse_hist_file(logfn, buckets_per_interval, log_hist_msec): except ValueError as e: raise FioHistoLogExc('non-integer value %s' % exception_suffix(k+1, logfn)) - neg_ints = list(filter( lambda tk : tk < 0, int_tokens )) + neg_ints = list([tk for tk in int_tokens if tk < 0]) if len(neg_ints) > 0: raise FioHistoLogExc('negative integer value %s' % exception_suffix(k+1, logfn)) @@ -272,6 +273,13 @@ def add_to_histo_from( target, source ): for b in range(0, len(source)): target[b] += source[b] + +# calculate total samples in the histogram buckets + +def get_samples(buckets): + return reduce( lambda x,y: x + y, buckets) + + # compute percentiles # inputs: # buckets: histogram bucket array @@ -453,14 +461,24 @@ def compute_percentiles_from_logs(): # calculate percentiles across aggregate histogram for all threads # print CSV header just like fiologparser_hist does - header = 'msec-since-start, ' + header = 'msec-since-start, samples, ' for p in args.pctiles_wanted: - header += '%3.1f, ' % p + if p == 0.: + next_pctile_header = 'min' + elif p == 100.: + next_pctile_header = 'max' + elif p == 50.: + next_pctile_header = 'median' + else: + next_pctile_header = '%3.1f' % p + header += '%s, ' % next_pctile_header + print('time (millisec), percentiles in increasing order with values in ' + args.output_unit) print(header) for (t_msec, all_threads_histo_t) in all_threads_histograms: - record = '%8d, ' % t_msec + samples = get_samples(all_threads_histo_t) + record = '%8d, %8d, ' % (t_msec, samples) pct = get_pctiles(all_threads_histo_t, args.pctiles_wanted, bucket_times) if not pct: for w in args.pctiles_wanted: @@ -730,7 +748,7 @@ if unittest2_imported: def test_e2_get_pctiles_highest_pct(self): fio_v3_bucket_count = 29 * 64 with open(self.fn, 'w') as f: - # make a empty fio v3 histogram + # make an empty fio v3 histogram buckets = [ 0 for j in range(0, fio_v3_bucket_count) ] # add one I/O request to last bucket buckets[-1] = 1