diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2016-09-29 17:28:03 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-30 17:14:11 +0100 |
commit | 24a12e40caeb05dac13c417f35733761af219f03 (patch) | |
tree | 2f8d11e9eca73b89333444c539bc3e914b2c33d5 /scripts | |
parent | 0782825138731b3f1e6a8e05d723c1d5cd60c90c (diff) | |
download | openembedded-core-24a12e40caeb05dac13c417f35733761af219f03.tar.gz openembedded-core-24a12e40caeb05dac13c417f35733761af219f03.tar.bz2 openembedded-core-24a12e40caeb05dac13c417f35733761af219f03.zip |
scripts/buildstats-diff: add read_bytes and write_bytes to --diff-attr
These are I/O counter values from /proc/<pid>/io and represent the
number of bytes read from / written to the storage layer. Default values
for --min-val and --min-absdiff limits are set to 512kB and 128kB,
respectively.
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/buildstats-diff | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/scripts/buildstats-diff b/scripts/buildstats-diff index 05bf74c64d..3c894cbbe1 100755 --- a/scripts/buildstats-diff +++ b/scripts/buildstats-diff @@ -17,6 +17,7 @@ import argparse import glob import json import logging +import math import os import re import sys @@ -77,6 +78,15 @@ class BSTask(dict): return self['rusage']['ru_stime'] + self['rusage']['ru_utime'] + \ self['child_rusage']['ru_stime'] + self['child_rusage']['ru_utime'] + @property + def read_bytes(self): + """Bytes read from the block layer""" + return self['iostat']['read_bytes'] + + @property + def write_bytes(self): + """Bytes written to the block layer""" + return self['iostat']['write_bytes'] def read_buildstats_file(buildstat_file): """Convert buildstat text file into dict/json""" @@ -290,8 +300,13 @@ def print_task_diff(bs1, bs2, val_type, min_val=0, min_absdiff=0, sort_by=('absd return hms_time(val) else: return "{:.1f}s".format(val) - else: - return str(val) + elif 'bytes' in val_type and human_readable: + prefix = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi'] + dec = int(math.log(val, 2) / 10) + prec = 1 if dec > 0 else 0 + return "{:.{prec}f}{}B".format(val / (2 ** (10 * dec)), + prefix[dec], prec=prec) + return str(int(val)) def sum_vals(buildstats): """Get cumulative sum of all tasks""" @@ -323,16 +338,22 @@ def print_task_diff(bs1, bs2, val_type, min_val=0, min_absdiff=0, sort_by=('absd pkg_op = ' ' for task in set(tasks1.keys()).union(set(tasks2.keys())): - val1 = getattr(bs1[pkg]['tasks'][task], val_type) if task in tasks1 else 0 - val2 = getattr(bs2[pkg]['tasks'][task], val_type) if task in tasks2 else 0 task_op = ' ' + if task in tasks1: + val1 = getattr(bs1[pkg]['tasks'][task], val_type) + else: + task_op = '+ ' + val1 = 0 + if task in tasks2: + val2 = getattr(bs2[pkg]['tasks'][task], val_type) + else: + val2 = 0 + task_op = '- ' + if val1 == 0: reldiff = float('inf') - task_op = '+ ' else: reldiff = 100 * (val2 - val1) / val1 - if val2 == 0: - task_op = '- ' if max(val1, val2) < min_val: log.debug("Filtering out %s:%s (%s)", pkg, task, @@ -395,14 +416,19 @@ Script for comparing buildstats of two separate builds.""" formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=description) - min_val_defaults = {'cputime': 3.0} - min_absdiff_defaults = {'cputime': 1.0} + min_val_defaults = {'cputime': 3.0, + 'read_bytes': 524288, + 'write_bytes': 524288} + min_absdiff_defaults = {'cputime': 1.0, + 'read_bytes': 131072, + 'write_bytes': 131072} parser.add_argument('--debug', '-d', action='store_true', help="Verbose logging") parser.add_argument('--ver-diff', action='store_true', help="Show package version differences and exit") - parser.add_argument('--diff-attr', default='cputime', choices=('cputime',), + parser.add_argument('--diff-attr', default='cputime', + choices=('cputime', 'read_bytes', 'write_bytes'), help="Buildstat attribute which to compare") parser.add_argument('--min-val', default=min_val_defaults, type=float, help="Filter out tasks less than MIN_VAL. " |