All of lore.kernel.org
 help / color / mirror / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
Cc: Patches and discussions about the oe-core layer
	<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 4/6] scripts/tiny/ksum.py: New tool
Date: Tue, 3 Jan 2017 22:38:49 -0800	[thread overview]
Message-ID: <CAMKF1soMf35-VzMr9rE5uOmGTu-3NhdhbykQrp0KBOVN=x1+Ag@mail.gmail.com> (raw)
In-Reply-To: <0960cf70d3357819843e693eb13c1e7c1f93da8e.1482363237.git.alejandro.hernandez@linux.intel.com>

On Tue, Jan 3, 2017 at 2:30 PM, Alejandro Hernandez
<alejandro.hernandez@linux.intel.com> wrote:
> From: Tom Zanussi <tom.zanussi@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@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@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


  reply	other threads:[~2017-01-04  6:39 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-03 22:30 [PATCH 0/6] poky-tiny improvements Alejandro Hernandez
2017-01-03 22:30 ` [PATCH 1/6] image-live-artifacts: Add support for creating image artifacts only Alejandro Hernandez
2017-01-03 22:41   ` Richard Purdie
2017-01-03 22:30 ` [PATCH 2/6] core-image-tiny-initramfs: Add and image " Alejandro Hernandez
2017-01-04 18:29   ` Leonardo Sandoval
2017-01-03 22:30 ` [PATCH 3/6] ksize.py: Python 3 fixes Alejandro Hernandez
2017-01-04  6:39   ` Khem Raj
2017-01-04 18:21     ` Alejandro Hernandez
2017-01-04 22:18       ` Alejandro Hernandez
2017-01-04 23:52         ` Khem Raj
2017-01-03 22:30 ` [PATCH 4/6] scripts/tiny/ksum.py: New tool Alejandro Hernandez
2017-01-04  6:38   ` Khem Raj [this message]
2017-01-03 22:30 ` [PATCH 5/6] bootimg-efi: Look for image artifacts in a common location Alejandro Hernandez
2017-01-03 22:30 ` [PATCH 6/6] core-image-tiny-initramfs: Fix error message shown after a successful initrd boot Alejandro Hernandez

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMKF1soMf35-VzMr9rE5uOmGTu-3NhdhbykQrp0KBOVN=x1+Ag@mail.gmail.com' \
    --to=raj.khem@gmail.com \
    --cc=alejandro.hernandez@linux.intel.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.