
Bloaty McBloatface: a size profiler for binaries - haberman
http://blog.reverberate.org/2016/11/07/introducing-bloaty-mcbloatface.html
======
rwmj
I ran it and it gives an awful lot of "[None]":

    
    
        $ ~/d/bloaty/bloaty builder/virt-builder -d compileunits
             VM SIZE                            FILE SIZE
         --------------                      --------------
          75.5%  1.96Mi [None]                3.67Mi  85.2%
           8.7%   232Ki guestfs-c-actions.c    232Ki   5.3%
           8.2%   219Ki guestfs.ml             219Ki   5.0%
           2.0%  52.4Ki [Other]               52.4Ki   1.2%
           1.3%  33.7Ki _none_                33.7Ki   0.8%
           0.7%  17.5Ki customize_cmdline.ml  17.5Ki   0.4%
           0.6%  17.3Ki builder.ml            17.3Ki   0.4%
           0.4%  11.8Ki customize_run.ml      11.8Ki   0.3%
           0.4%  10.4Ki cmdline.ml            10.4Ki   0.2%
           0.3%  7.08Ki firstboot.ml          7.08Ki   0.2%
           0.2%  6.21Ki index-scan.c          6.21Ki   0.1%
           0.2%  5.90Ki index_parser.ml       5.90Ki   0.1%
           0.2%  5.15Ki sigchecker.ml         5.15Ki   0.1%
           0.2%  4.87Ki getopt-c.c            4.87Ki   0.1%
        [...]

It's a mixed OCaml/C executable, but I ran it on a build from the local
directory and all debug symbols are still available.

Edit: The README mentions this may be caused by incompletely parsed
`.debug_aranges'.

~~~
haberman
Author here. The quality of the reports that use debug info (like
"compileunits") is entirely dependent on how complete said debug information
is. There may be ways of mining the debug info more completely, to compensate
for this. Theoretically .debug_aranges should be all we need for this report,
but we could supplement this with info in other sections.

------
smnscu
I was curious so I ran bloaty against Go's hello world:

    
    
       bloaty main
            VM SIZE                                FILE SIZE
        --------------                          --------------
         33.0%   536Ki __TEXT,__text              536Ki  33.7%
         18.1%   293Ki __TEXT,__gopclntab         293Ki  18.5%
         15.6%   253Ki __DWARF,__debug_info       253Ki  16.0%
         13.1%   213Ki __TEXT,__rodata            213Ki  13.4%
          6.5%   106Ki __DATA,__bss                   0   0.0%
          0.3%  5.62Ki [None]                    93.1Ki   5.9%
          4.4%  71.9Ki __DWARF,__debug_frame     71.9Ki   4.5%
          4.2%  68.3Ki __DWARF,__debug_line      68.3Ki   4.3%
          1.9%  30.5Ki __DWARF,__debug_pubtypes  30.5Ki   1.9%
          1.1%  17.1Ki __DATA,__noptrbss              0   0.0%
          0.6%  9.90Ki __DWARF,__debug_pubnames  9.90Ki   0.6%
          0.6%  9.45Ki __DATA,__noptrdata        9.45Ki   0.6%
          0.4%  6.34Ki __DATA,__data             6.34Ki   0.4%
          0.2%  2.86Ki __TEXT,__typelink         2.86Ki   0.2%
          0.0%     255 __DWARF,__debug_abbrev       255   0.0%
          0.0%      72 __TEXT,__itablink             72   0.0%
          0.0%      61 __DWARF,__debug_gdb_scri      61   0.0%
          0.0%      48 __DWARF,__debug_aranges       48   0.0%
        100.0%  1.59Mi TOTAL                     1.55Mi 100.0%

------
tempodox
Quite predictably, that name made me lough out loudly. I like very much how
cleanly it displays units. Since I routinely produce binary executables, I
want to give it a try. It looks really useful.

------
ndesaulniers
If you have debug symbols. Great tool, I have already used it for Android
platform, and love it. But without debug symbols, you're going to have a bad
time.

------
dboreham
Almost spat my latte into my keyboard reading the name.

The first time I remember doing this exercise was when the product I worked on
got so large it wouldn't fit on one CD. I think we found 10 copies of one of
its shared libraries.

------
ayuvar
This is a great thing. I am currently tracking down a problem at work where we
have a Win32 PE with a lot of DLL bloat.

I've written a few hacky exploratory tools for it but nothing of this quality.

------
dan353hehe
I'm just a little confused, With terabytes of disk and gigabytes of ram, why
should someone spend time shrinking the size of a binary down?

I understand if you are working in an environment where both of those could be
limited such a tool would be extremely helpful. But I don't think I have ever
decided to not use a program because of the size of the executable. I don't
spend my day looking at the size of awk vs sed vs grep and then using the one
that is smaller.

~~~
Peaker
You might not care to shrink it down for 500KB to 200KB. But shrinking 200MiB
binary to 40MiB is nice.

See also:
[https://en.wikipedia.org/wiki/Wirth's_law](https://en.wikipedia.org/wiki/Wirth's_law)

~~~
WalterGR
_But shrinking 200MiB binary to 40MiB is nice._

Is that the average size savings?

~~~
Normal_gaussian
You can make that kind of saving quite easily if you are statically linking a
load of stuff together. Often the extra libs have a whole set of features you
don't need and didn't realise were so large.

~~~
FnuGk
Should the linker not throw away dead code?

~~~
Peaker
Normally, if you use archive (.a) files, then any .o files within them that
are not needed, are thrown away.

But that is at .o file granularity. There's no per-symbol dead code
elimination.

And if you provide a list of .o files (no .a files) then it doesn't throw away
anything at all.

------
shultays
Uh, what is "Mi", "Ki"? Is it Mebibyte, kibibyte? Wikipedia says correct
abbreviation is MiB and KiB.

------
shaqbert
Vincent Vanhoucke deserves a lot of credit for his naming skills... Bloaty
McBloatface[1] is the best name I've seen in ages.

[1]:
[https://en.wikipedia.org/wiki/Boaty_McBoatface](https://en.wikipedia.org/wiki/Boaty_McBoatface)

~~~
archgoon
Was Vincent Vanhoucke the mind behind Boaty? Or just Parsey?

~~~
skinofstars
James Hand, a former BBC Jersey presenter, came up with Boaty McBoatface

[http://www.bbc.co.uk/news/world-europe-
jersey-35860760](http://www.bbc.co.uk/news/world-europe-jersey-35860760)

------
21
Xy McXface was hilarious the first time, fun the second time, but I feel that
now it's just lame to name something like this.

~~~
AnimalMuppet
Given how close "Bloaty" is to "Boaty", this one gets a pass in my book...

