On Tue, Jan 3, 2017 at 2:30 PM, Alejandro Hernandez <[email protected]> wrote: > From: Tom Zanussi <[email protected]> > > 'ksum.py' generates a combined summary of vmlinux and module sizes for > a built kernel, as a quick tool for comparing the overall effects of > systemic tinification changes. Execute from the base directory of the > kernel build you want to summarize. Setting the 'verbose' flag will > display the sizes for each file included in the summary. >
Does this work with python3 as well? > Signed-off-by: Tom Zanussi <[email protected]> > --- > scripts/tiny/ksum.py | 168 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 168 insertions(+) > create mode 100755 scripts/tiny/ksum.py > > diff --git a/scripts/tiny/ksum.py b/scripts/tiny/ksum.py > new file mode 100755 > index 0000000..d4f3892 > --- /dev/null > +++ b/scripts/tiny/ksum.py > @@ -0,0 +1,168 @@ > +#!/usr/bin/env python > +# ex:ts=4:sw=4:sts=4:et > +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- > +# > +# Copyright (c) 2016, Intel Corporation. > +# All rights reserved. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License version 2 as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License along > +# with this program; if not, write to the Free Software Foundation, Inc., > +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > +# > +# DESCRIPTION 'ksum.py' generates a combined summary of vmlinux and > +# module sizes for a built kernel, as a quick tool for comparing the > +# overall effects of systemic tinification changes. Execute from the > +# base directory of the kernel build you want to summarize. Setting > +# the 'verbose' flag will display the sizes for each file included in > +# the summary. > +# > +# AUTHORS > +# Tom Zanussi <tom.zanussi (at] linux.intel.com> > +# > + > +__version__ = "0.1.0" > + > +# Python Standard Library modules > +import os > +import sys > +import getopt > +from subprocess import * > + > +def usage(): > + prog = os.path.basename(sys.argv[0]) > + print('Usage: %s [OPTION]...' % prog) > + print(' -v, display sizes for each file') > + print(' -h, --help display this help and exit') > + print('') > + print('Run %s from the top-level Linux kernel build directory.' % prog) > + > +verbose = False > + > +n_ko_files = 0 > +ko_file_list = [] > + > +ko_text = 0 > +ko_data = 0 > +ko_bss = 0 > +ko_total = 0 > + > +vmlinux_file = "" > +vmlinux_level = 0 > + > +vmlinux_text = 0 > +vmlinux_data = 0 > +vmlinux_bss = 0 > +vmlinux_total = 0 > + > +def is_vmlinux_file(filename): > + global vmlinux_level > + if filename == ("vmlinux") and vmlinux_level == 0: > + vmlinux_level += 1 > + return True > + return False > + > +def is_ko_file(filename): > + if filename.endswith(".ko"): > + return True > + return False > + > +def collect_object_files(): > + print "Collecting object files recursively from %s..." % os.getcwd() > + for dirpath, dirs, files in os.walk(os.getcwd()): > + for filename in files: > + if is_ko_file(filename): > + ko_file_list.append(os.path.join(dirpath, filename)) > + elif is_vmlinux_file(filename): > + global vmlinux_file > + vmlinux_file = os.path.join(dirpath, filename) > + print "Collecting object files [DONE]" > + > +def add_ko_file(filename): > + p = Popen("size -t " + filename, shell=True, stdout=PIPE, > stderr=PIPE) > + output = p.communicate()[0].splitlines() > + if len(output) > 2: > + sizes = output[-1].split()[0:4] > + if verbose: > + print " %10d %10d %10d %10d\t" % \ > + (int(sizes[0]), int(sizes[1]), int(sizes[2]), > int(sizes[3])), > + print "%s" % filename[len(os.getcwd()) + 1:] > + global n_ko_files, ko_text, ko_data, ko_bss, ko_total > + ko_text += int(sizes[0]) > + ko_data += int(sizes[1]) > + ko_bss += int(sizes[2]) > + ko_total += int(sizes[3]) > + n_ko_files += 1 > + > +def get_vmlinux_totals(): > + p = Popen("size -t " + vmlinux_file, shell=True, stdout=PIPE, > stderr=PIPE) > + output = p.communicate()[0].splitlines() > + if len(output) > 2: > + sizes = output[-1].split()[0:4] > + if verbose: > + print " %10d %10d %10d %10d\t" % \ > + (int(sizes[0]), int(sizes[1]), int(sizes[2]), > int(sizes[3])), > + print "%s" % vmlinux_file[len(os.getcwd()) + 1:] > + global vmlinux_text, vmlinux_data, vmlinux_bss, vmlinux_total > + vmlinux_text += int(sizes[0]) > + vmlinux_data += int(sizes[1]) > + vmlinux_bss += int(sizes[2]) > + vmlinux_total += int(sizes[3]) > + > +def sum_ko_files(): > + for ko_file in ko_file_list: > + add_ko_file(ko_file) > + > +def main(): > + try: > + opts, args = getopt.getopt(sys.argv[1:], "vh", ["help"]) > + except getopt.GetoptError as err: > + print('%s' % str(err)) > + usage() > + sys.exit(2) > + > + for o, a in opts: > + if o == '-v': > + global verbose > + verbose = True > + elif o in ('-h', '--help'): > + usage() > + sys.exit(0) > + else: > + assert False, "unhandled option" > + > + collect_object_files() > + sum_ko_files() > + get_vmlinux_totals() > + > + print "\nTotals:" > + print "\nvmlinux:" > + print " text\tdata\t\tbss\t\ttotal" > + print " %-10d\t%-10d\t%-10d\t%-10d" % \ > + (vmlinux_text, vmlinux_data, vmlinux_bss, vmlinux_total) > + print "\nmodules (%d):" % n_ko_files > + print " text\tdata\t\tbss\t\ttotal" > + print " %-10d\t%-10d\t%-10d\t%-10d" % \ > + (ko_text, ko_data, ko_bss, ko_total) > + print "\nvmlinux + modules:" > + print " text\tdata\t\tbss\t\ttotal" > + print " %-10d\t%-10d\t%-10d\t%-10d" % \ > + (vmlinux_text + ko_text, vmlinux_data + ko_data, \ > + vmlinux_bss + ko_bss, vmlinux_total + ko_total) > + > +if __name__ == "__main__": > + try: > + ret = main() > + except Exception: > + ret = 1 > + import traceback > + traceback.print_exc(5) > + sys.exit(ret) > -- > 2.6.6 > > -- > _______________________________________________ > Openembedded-core mailing list > [email protected] > http://lists.openembedded.org/mailman/listinfo/openembedded-core -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
