aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2016-09-29 17:28:03 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-09-30 17:14:11 +0100
commit24a12e40caeb05dac13c417f35733761af219f03 (patch)
tree2f8d11e9eca73b89333444c539bc3e914b2c33d5 /scripts
parent0782825138731b3f1e6a8e05d723c1d5cd60c90c (diff)
downloadopenembedded-core-contrib-24a12e40caeb05dac13c417f35733761af219f03.tar.gz
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-xscripts/buildstats-diff46
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. "