All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Rini <trini@konsulko.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] Making U-Boot smaller
Date: Wed, 22 May 2019 14:50:58 -0400	[thread overview]
Message-ID: <20190522185058.GW22232@bill-the-cat> (raw)
In-Reply-To: <20190522165036.GA9229@x230>

On Wed, May 22, 2019 at 06:50:36PM +0200, Eugeniu Rosca wrote:
> Hi Tom,
> 
> On Wed, May 22, 2019 at 11:09:54AM -0400, Tom Rini wrote:
> > On Wed, May 22, 2019 at 04:15:47PM +0200, Eugeniu Rosca wrote:
> > > cc: Yamada-san
> > > 
> > > I dream of a (Kconfig/Kbuild-assisted) bloaty-like output [1] which
> > > would point out the culprit configs. This is hardly achievable, but
> > > looks good on the paper!
> > > 
> > >       CONFIG           FILE SIZE
> > >   ------------       --------------
> > >   CONFIG_FEATURE_A    10.7Mi  37.1%
> > >   CONFIG_FEATURE_B    5.39Mi  18.6%
> > >   CONFIG_FEATURE_C    4.48Mi  15.5%
> > >   CONFIG_FEATURE_D    1.86Mi   6.4%
> > >   CONFIG_FEATURE_E    1.67Mi   5.8%
> > >   CONFIG_FEATURE_F    1.61Mi   5.6%
> > >   CONFIG_FEATURE_G     856Ki   2.9%
> > >   CONFIG_FEATURE_H     470Ki   1.6%
> > >   ....
> > >   TOTAL               28.9Mi 100.0%
> > > 
> > > [1] https://github.com/google/bloaty
> > 
> > This is relatively easy to do today, with buildman and a local commit to
> > enable/disable CONFIG_FEATURE_A.
> 
> Being a valid choice doesn't make it necessarily appealing, especially
> with 512 [1] configurations enabled in sandbox and knowing that U-Boot
> is not really randconfig-grade [2] (the latter is being improved).
> 
> What I was alluding to is embedding the Kconfig symbol names into the
> ELF objects, such that utilities like 'nm' (currently producing a nice
> output of symbol sizes [3]) can also be made capable to report the exact
> Kconfig symbols contributing to the size of the objects passed as input.
> That would be, in my opinion, mind-blowingly useful.
> 
> [1] grep "CONFIG.*=" .config | wc -l
> 512
> 
> [2] https://patchwork.ozlabs.org/patch/1074420/
> 
> [3] nm --print-size --size-sort --radix=d ./drivers/clk/clk-uclass.o
> 0000000000000421 0000000000000024 T clk_free
> 0000000000000961 0000000000000027 T clk_disable
> 0000000000000888 0000000000000027 T clk_enable
> 0000000000000000 0000000000000027 T clk_request
> 0000000000000503 0000000000000027 T clk_set_parent
> 0000000000000445 0000000000000029 T clk_get_rate
> 0000000000000474 0000000000000029 T clk_set_rate

Right.  More numbers, and more easily readable is good.  But to be
clear, since we use -ffunction-sections / -fdata-sections (and the
kernel doesn't normally), we get can get a lot more detail than I might
have implied.  It's not just that you'll see that U-Boot shrank X bytes
with CONFIG_FEATURE_A disabled, it's that you'll see which functions
shrank by how much.  What we don't have is the link between
"CONFIG_OPTION_X" and "is part of functions A/B/C".   But we have a lot
of information like you would get out of nm already in u-boot*.map which
also includes "and we discarded these functions".

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190522/de93c4c3/attachment.sig>

  reply	other threads:[~2019-05-22 18:50 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-21 16:43 [U-Boot] Making U-Boot smaller Simon Glass
2019-05-21 16:56 ` Jagan Teki
2019-05-21 19:32   ` Marek Vasut
2019-05-21 19:53     ` Tom Rini
2019-05-21 19:54       ` Marek Vasut
2019-05-21 19:59         ` Tom Rini
2019-05-21 20:01           ` Marek Vasut
2019-05-21 20:10             ` Tom Rini
2019-05-21 20:13               ` Marek Vasut
2019-05-22 14:15                 ` Eugeniu Rosca
2019-05-22 15:09                   ` Tom Rini
2019-05-22 16:50                     ` Eugeniu Rosca
2019-05-22 18:50                       ` Tom Rini [this message]
2019-05-24 19:59                         ` Eugeniu Rosca
2019-05-21 19:31 ` Marek Vasut

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=20190522185058.GW22232@bill-the-cat \
    --to=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /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.