diff options
| author | Maninder Singh <maninder1.s@samsung.com> | 2017-11-15 20:31:14 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-11-15 21:21:00 -0500 |
| commit | 192efb7a1f9b69ce2ec1212ee8c24fb9b4a80a35 (patch) | |
| tree | ba8f7165c06e48e04a914c23e1ba71f0b17015a9 /scripts | |
| parent | c9b012e5f4a1d01dfa8abc6318211a67ba7d5db2 (diff) | |
bloat-o-meter: provide 3 different arguments for data, function and All
This patch provides 3 new arguments for bloat-o-meter
1) -c -> for all (showing function and data differently)
2) -d -> data
3) -t -> function
output:
./scripts/bloat-o-meter -c "file1" "file2"
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-152 (-152)
Function old new delta
main 412 260 -152
Total: Before=548, After=396, chg -27.74%
##########################################################
add/remove: 1/0 grow/shrink: 1/0 up/down: 84/0 (84)
Data old new delta
arr - 64 +64
backtrace 60 80 +20
Total: Before=109, After=193, chg +77.06%
##########################################################
add/remove: 0/1 grow/shrink: 0/0 up/down: 0/-64 (-64)
RO Data old new delta
arr 64 - -64
Total: Before=68, After=4, chg -94.12%
[maninder1.s@samsung.com: v1 -> v2]
Link: http://lkml.kernel.org/r/1506569402-24787-1-git-send-email-maninder1.s@samsung.com
Link: http://lkml.kernel.org/r/1506336313-27187-1-git-send-email-maninder1.s@samsung.com
Signed-off-by: Vaneet Narang <v.narang@samsung.com>
Signed-off-by: Maninder Singh <maninder1.s@samsung.com>
Cc: Amit Sahrawat <a.sahrawat@samsung.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Michal Marek <mmarek@suse.cz>
Cc: <pankaj.m@samsung.com>
Cc: <a.sahrawat@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/bloat-o-meter | 89 |
1 files changed, 55 insertions, 34 deletions
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter index a27677146410..6f099f915dcf 100755 --- a/scripts/bloat-o-meter +++ b/scripts/bloat-o-meter | |||
| @@ -12,18 +12,22 @@ from signal import signal, SIGPIPE, SIG_DFL | |||
| 12 | 12 | ||
| 13 | signal(SIGPIPE, SIG_DFL) | 13 | signal(SIGPIPE, SIG_DFL) |
| 14 | 14 | ||
| 15 | if len(sys.argv) != 3: | 15 | if len(sys.argv) < 3: |
| 16 | sys.stderr.write("usage: %s file1 file2\n" % sys.argv[0]) | 16 | sys.stderr.write("usage: %s [option] file1 file2\n" % sys.argv[0]) |
| 17 | sys.stderr.write("The options are:\n") | ||
| 18 | sys.stderr.write("-c cateogrize output based on symbole type\n") | ||
| 19 | sys.stderr.write("-d Show delta of Data Section\n") | ||
| 20 | sys.stderr.write("-t Show delta of text Section\n") | ||
| 17 | sys.exit(-1) | 21 | sys.exit(-1) |
| 18 | 22 | ||
| 19 | re_NUMBER = re.compile(r'\.[0-9]+') | 23 | re_NUMBER = re.compile(r'\.[0-9]+') |
| 20 | 24 | ||
| 21 | def getsizes(file): | 25 | def getsizes(file, format): |
| 22 | sym = {} | 26 | sym = {} |
| 23 | with os.popen("nm --size-sort " + file) as f: | 27 | with os.popen("nm --size-sort " + file) as f: |
| 24 | for line in f: | 28 | for line in f: |
| 25 | size, type, name = line.split() | 29 | size, type, name = line.split() |
| 26 | if type in "tTdDbBrR": | 30 | if type in format: |
| 27 | # strip generated symbols | 31 | # strip generated symbols |
| 28 | if name.startswith("__mod_"): continue | 32 | if name.startswith("__mod_"): continue |
| 29 | if name.startswith("SyS_"): continue | 33 | if name.startswith("SyS_"): continue |
| @@ -34,44 +38,61 @@ def getsizes(file): | |||
| 34 | sym[name] = sym.get(name, 0) + int(size, 16) | 38 | sym[name] = sym.get(name, 0) + int(size, 16) |
| 35 | return sym | 39 | return sym |
| 36 | 40 | ||
| 37 | old = getsizes(sys.argv[1]) | 41 | def calc(oldfile, newfile, format): |
| 38 | new = getsizes(sys.argv[2]) | 42 | old = getsizes(oldfile, format) |
| 39 | grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0 | 43 | new = getsizes(newfile, format) |
| 40 | delta, common = [], {} | 44 | grow, shrink, add, remove, up, down = 0, 0, 0, 0, 0, 0 |
| 41 | otot, ntot = 0, 0 | 45 | delta, common = [], {} |
| 46 | otot, ntot = 0, 0 | ||
| 42 | 47 | ||
| 43 | for a in old: | 48 | for a in old: |
| 44 | if a in new: | 49 | if a in new: |
| 45 | common[a] = 1 | 50 | common[a] = 1 |
| 46 | 51 | ||
| 47 | for name in old: | 52 | for name in old: |
| 48 | otot += old[name] | 53 | otot += old[name] |
| 49 | if name not in common: | 54 | if name not in common: |
| 50 | remove += 1 | 55 | remove += 1 |
| 51 | down += old[name] | 56 | down += old[name] |
| 52 | delta.append((-old[name], name)) | 57 | delta.append((-old[name], name)) |
| 53 | 58 | ||
| 54 | for name in new: | 59 | for name in new: |
| 55 | ntot += new[name] | 60 | ntot += new[name] |
| 56 | if name not in common: | 61 | if name not in common: |
| 57 | add += 1 | 62 | add += 1 |
| 58 | up += new[name] | 63 | up += new[name] |
| 59 | delta.append((new[name], name)) | 64 | delta.append((new[name], name)) |
| 60 | 65 | ||
| 61 | for name in common: | 66 | for name in common: |
| 62 | d = new.get(name, 0) - old.get(name, 0) | 67 | d = new.get(name, 0) - old.get(name, 0) |
| 63 | if d>0: grow, up = grow+1, up+d | 68 | if d>0: grow, up = grow+1, up+d |
| 64 | if d<0: shrink, down = shrink+1, down-d | 69 | if d<0: shrink, down = shrink+1, down-d |
| 65 | delta.append((d, name)) | 70 | delta.append((d, name)) |
| 66 | 71 | ||
| 67 | delta.sort() | 72 | delta.sort() |
| 68 | delta.reverse() | 73 | delta.reverse() |
| 74 | return grow, shrink, add, remove, up, down, delta, old, new, otot, ntot | ||
| 69 | 75 | ||
| 70 | print("add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s (%s)" % \ | 76 | def print_result(symboltype, symbolformat, argc): |
| 71 | (add, remove, grow, shrink, up, -down, up-down)) | 77 | grow, shrink, add, remove, up, down, delta, old, new, otot, ntot = \ |
| 72 | print("%-40s %7s %7s %+7s" % ("function", "old", "new", "delta")) | 78 | calc(sys.argv[argc - 1], sys.argv[argc], symbolformat) |
| 73 | for d, n in delta: | ||
| 74 | if d: print("%-40s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d)) | ||
| 75 | 79 | ||
| 76 | print("Total: Before=%d, After=%d, chg %+.2f%%" % \ | 80 | print("add/remove: %s/%s grow/shrink: %s/%s up/down: %s/%s (%s)" % \ |
| 77 | (otot, ntot, (ntot - otot)*100.0/otot)) | 81 | (add, remove, grow, shrink, up, -down, up-down)) |
| 82 | print("%-40s %7s %7s %+7s" % (symboltype, "old", "new", "delta")) | ||
| 83 | for d, n in delta: | ||
| 84 | if d: print("%-40s %7s %7s %+7d" % (n, old.get(n,"-"), new.get(n,"-"), d)) | ||
| 85 | |||
| 86 | print("Total: Before=%d, After=%d, chg %+.2f%%" % \ | ||
| 87 | (otot, ntot, (ntot - otot)*100.0/otot)) | ||
| 88 | |||
| 89 | if sys.argv[1] == "-c": | ||
| 90 | print_result("Function", "tT", 3) | ||
| 91 | print_result("Data", "dDbB", 3) | ||
| 92 | print_result("RO Data", "rR", 3) | ||
| 93 | elif sys.argv[1] == "-d": | ||
| 94 | print_result("Data", "dDbBrR", 3) | ||
| 95 | elif sys.argv[1] == "-t": | ||
| 96 | print_result("Function", "tT", 3) | ||
| 97 | else: | ||
| 98 | print_result("Function", "tTdDbBrR", 2) | ||
