[OE-core] [PATCH 4/6] scripts/tiny/ksum.py: New tool
Khem Raj
raj.khem at gmail.com
Wed Jan 4 06:38:49 UTC 2017
On Tue, Jan 3, 2017 at 2:30 PM, Alejandro Hernandez
<alejandro.hernandez at linux.intel.com> wrote:
> From: Tom Zanussi <tom.zanussi at linux.intel.com>
>
> '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 <tom.zanussi at linux.intel.com>
> ---
> 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
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list