Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] tiny: Add bloat-o-meter to scripts

This is a rewrite of Andi Kleen's bloat-o-meter with sorting and reporting of
gainers/decliners. Sample output:

add/remove: 0/8 grow/shrink: 2/0 up/down: 88/-4424 (-4336)
function old new delta
__copy_to_user_ll 59 103 +44
__copy_from_user_ll 59 103 +44
fill_note 32 - -32
maydump 58 - -58
dump_seek 67 - -67
writenote 180 - -180
elf_dump_thread_status 274 - -274
fill_psinfo 308 - -308
fill_prstatus 466 - -466
elf_core_dump 3039 - -3039

The summary line says:
no functions added, 8 removed
two functions grew, none shrunk
we gained 88 bytes and lost 4424 (or -4336 net)

This work was sponsored in part by CE Linux Forum

Signed-off-by: Matt Mackall <mpm@selenic.com>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Matt Mackall and committed by
Linus Torvalds
d960600d e701e85b

+58
+58
scripts/bloat-o-meter
··· 1 + #!/usr/bin/python 2 + # 3 + # Copyright 2004 Matt Mackall <mpm@selenic.com> 4 + # 5 + # inspired by perl Bloat-O-Meter (c) 1997 by Andi Kleen 6 + # 7 + # This software may be used and distributed according to the terms 8 + # of the GNU General Public License, incorporated herein by reference. 9 + 10 + import sys, os, re 11 + 12 + if len(sys.argv) != 3: 13 + sys.stderr.write("usage: %s file1 file2\n" % sys.argv[0]) 14 + sys.exit(-1) 15 + 16 + def getsizes(file): 17 + sym = {} 18 + for l in os.popen("nm --size-sort " + file).readlines(): 19 + size, type, name = l[:-1].split() 20 + if type in "tTdDbB": 21 + sym[name] = int(size, 16) 22 + return sym 23 + 24 + old = getsizes(sys.argv[1]) 25 + new = getsizes(sys.argv[2]) 26 + grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0 27 + delta, common = [], {} 28 + 29 + for a in old: 30 + if a in new: 31 + common[a] = 1 32 + 33 + for name in old: 34 + if name not in common: 35 + remove += 1 36 + down += old[name] 37 + delta.append((-old[name], name)) 38 + 39 + for name in new: 40 + if name not in common: 41 + add += 1 42 + up += new[name] 43 + delta.append((new[name], name)) 44 + 45 + for name in common: 46 + d = new.get(name, 0) - old.get(name, 0) 47 + if d>0: grow, up = grow+1, up+d 48 + if d<0: shrink, down = shrink+1, down-d 49 + delta.append((d, name)) 50 + 51 + delta.sort() 52 + delta.reverse() 53 + 54 + print "add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s (%s)" % \ 55 + (add, remove, grow, shrink, up, -down, up-down) 56 + print "%-40s %7s %7s %+7s" % ("function", "old", "new", "delta") 57 + for d, n in delta: 58 + if d: print "%-40s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d)