All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Rini <trini@konsulko.com>
To: u-boot@lists.denx.de
Subject: [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51)
Date: Wed, 3 Mar 2021 11:47:29 -0500	[thread overview]
Message-ID: <20210303164729.GG1310@bill-the-cat> (raw)
In-Reply-To: <20210303174157.280e7179@nic.cz>

On Wed, Mar 03, 2021 at 05:41:57PM +0100, Marek Behun wrote:
> On Wed, 3 Mar 2021 11:11:59 -0500
> Tom Rini <trini@konsulko.com> wrote:
> 
> > On Wed, Mar 03, 2021 at 05:11:59AM +0100, Marek Beh?n wrote:
> > 
> > > Hello,
> > > 
> > > I have managed to add support for building U-Boot with LTO (with GCC)
> > > in a rather sane way (in LOC changed).
> > > 
> > > This series and its follows will also be available at
> > > https://github.com/elkablo/u-boot branch lto.
> > > 
> > > I have tested these builds on Turris Omnia, Turris MOX and on Nokia N900
> > > (via the test/nokia_rx51_test.sh script). For other tests I have created
> > > a pull-request on github to trigger CI (https://github.com/u-boot/u-boot/pull/57)
> > > For some reason it is waiting now, maybe Azure is not working or
> > > something.  
> > 
> > As we're on the free tier with Azure it sometimes just queues us up for
> > a long time, this job finally started running recently.
> > 
> > > My tests on Omnia and MOX show that U-Boot boots sucessfully, and basic
> > > commands seem to work. But of course something broken due to LTO may be
> > > found later.
> > > 
> > > So for all of you that are interested and have an ARM board, please test
> > > this on your boards by enabling CONFIG_LTO option. Also please report
> > > code size reductions. (Chris Packham reports an error related to
> > > jobserver, so if `make -jN` produces an error, please try without the
> > > `-jN` flag.)
> > > 
> > > I have only tested with gcc-10. There are still some warnings printed,
> > > like:
> > >   bfd plugin: invalid symbol type found
> > > but these don't seem to matter. I will look into this later.
> > > 
> > > Here are some results by how much code size reduced. Note that SPL
> > > binary seems to gain more code reduction (15.4 % on average) than main
> > > binary (4.5 % on average).
> > > 
> > > I guess this is because of how drivers are written. The optimizer cannot
> > > know which code paths won't be used, since it does not see the device
> > > tree. Maybe this could be somehow integrated with Simon's work on
> > > OF_PLATDATA_INST in the future, to make the compiler optimize out unused
> > > code paths in drivers by understanding the device tree.
> > > 
> > >                         u-boot.bin       u-boot-spl.bin
> > > 
> > >          clearfog    4.34 %  19.0 KB    13.55 %  16.8 KB
> > >   controlcenterdc    4.79 %  24.2 KB    16.27 %  21.9 KB
> > >    db-88f6820-amc    4.23 %  25.0 KB    16.17 %  22.9 KB
> > >     db-88f6820-gp    4.42 %  22.1 KB    17.00 %  23.8 KB
> > >           helios4    4.32 %  18.9 KB    13.70 %  16.8 KB
> > >        nokia_rx51    6.11 %  16.5 KB
> > >        turris_mox    4.17 %  31.8 KB
> > >      turris_omnia    4.32 %  30.2 KB    14.91 %  16.6 KB
> > >              x530    3.93 %  30.0 KB    16.26 %  23.4 KB
> > > 
> > > Marek  
> > 
> > Thanks for starting on this!  It's been on my list for a long time,
> > especially since it does give overall better reduction than
> > function/data-sections/discard.  It does seem like clang fails to build
> > with this series.  One thing I want to try locally, and I'll fire off
> > the results once I do it, is moving to LTO by default for ARM.
> > 
> 
> Yes, it seems clang is the last thing I need to look at. I did not even
> try, really, my first priority was gcc. I will look into this tomorrow.
> 
> All in all I am happy with this since it seems to be running for
> several different boards without issue.

Great.  I'll give it a spin on my platforms as well, but I suspect
things are good.

> If you want to enable LTO by default for ARM, we probably need to
> determine which gcc version should be minimal for this. Because older
> gcc versions may have problems with LTO. What is the current minimal
> version of gcc for U-Boot?

We, funny enough, have a check for gcc-4.0.4 on ARM, followed by
gcc-6.0.  That 4.0.4 check should be dropped, and gcc-6.0 is the
minimum.  I think gcc-7.2 or so is going to be important to keep working
but given the age of the Linux Kernel LTO support, we should be fine in
that regard.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210303/167fbaca/attachment.sig>

  reply	other threads:[~2021-03-03 16:47 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03  4:11 [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 01/12] build: use thin archives instead of incremental linking Marek Behún
2021-03-04 10:57   ` Bin Meng
2021-03-04 18:17     ` Marek Behun
2021-03-05 13:34       ` Bin Meng
2021-03-05 13:37         ` Tom Rini
2021-03-06 21:20           ` Marek Behun
2021-03-05 15:39         ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 02/12] sandbox: errno: avoid conflict with libc's errno Marek Behún
2021-03-05  3:00   ` Bin Meng
2021-03-05 15:37     ` Marek Behun
2021-03-05 16:39       ` Simon Glass
2021-03-05 16:50         ` Marek Behun
2021-03-05 16:58           ` Simon Glass
2021-03-05 17:24             ` Heinrich Schuchardt
2021-03-05 17:24             ` Marek Behun
2021-03-05 19:42               ` Simon Glass
2021-03-05 17:21       ` Heinrich Schuchardt
2021-03-07  3:14         ` Marek Behun
2021-03-12  4:45   ` Simon Glass
2021-03-03  4:12 ` [RFC PATCH u-boot 03/12] linker_lists: declare entries and lists externally visible Marek Behún
2021-03-04 13:47   ` Marek Behun
2021-03-05  3:04   ` Bin Meng
2021-03-05 15:49     ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 04/12] efi_loader: fix warning when linking with LTO Marek Behún
2021-03-05  5:50   ` Bin Meng
2021-03-03  4:12 ` [RFC PATCH u-boot 05/12] binman: declare symbols externally visible Marek Behún
2021-03-04  0:37   ` Tom Rini
2021-03-04  1:53     ` Marek Behun
2021-03-03  4:12 ` [RFC PATCH u-boot 06/12] build: support building with Link Time Optimizations Marek Behún
2021-03-05  6:34   ` Bin Meng
2021-03-03  4:12 ` [RFC PATCH u-boot 07/12] arch: sandbox: make LTO available Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 08/12] sandbox: build with LTO Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 09/12] ARM: make gd a function for LTO Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 10/12] string: make memcpy() visible to fix LTO linking errors Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 11/12] arch: ARM: make LTO available Marek Behún
2021-03-03  4:12 ` [RFC PATCH u-boot 12/12] Nokia RX-51: build with LTO Marek Behún
2021-03-03 16:11 ` [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Tom Rini
2021-03-03 16:41   ` Marek Behun
2021-03-03 16:47     ` Tom Rini [this message]
2021-03-03 21:36     ` Tom Rini
2021-03-04  0:40       ` Adam Ford
2021-03-04  7:07         ` [PATCH] arm: fix LTO build for some thumb-interwork cases Marek Behún
2021-03-04 10:43       ` [RFC PATCH u-boot 00/12] U-Boot LTO (Sandbox + ARM Nokia RX-51) Marek Behun
2021-03-04 13:46         ` Adam Ford
2021-03-04 13:50           ` Marek Behun
2021-03-04 13:59             ` Adam Ford
2021-03-04 14:58           ` Tom Rini
2021-03-04 15:07             ` Adam Ford
2021-03-04 15:37               ` Marek Behun
2021-03-04 16:18                 ` Tom Rini
2021-03-04 15:59               ` Marek Behun
2021-03-04 22:18                 ` Adam Ford
2021-03-04 22:33                   ` Marek Behun
2021-03-05 11:25                     ` Adam Ford
2021-03-05 12:31                       ` Stefan Roese
2021-03-05 17:10                         ` Adam Ford
2021-03-06  3:03                           ` Adam Ford
2021-03-06 11:12                             ` Adam Ford
2021-03-06 17:37                               ` Marek Behun
2021-03-06 20:08                                 ` Tom Rini
2021-03-06 20:41                                   ` Pali Rohár
2021-03-06 20:54                                     ` Marek Behun
2021-03-06 21:00                                       ` Pali Rohár
2021-03-06 21:19                                         ` Marek Behun
2021-03-06 21:38                                           ` Pali Rohár
2021-03-06 21:49                                             ` Marek Behun
2021-03-07  3:45                                               ` Adam Ford
2021-03-07  4:06                                                 ` Marek Behun
2021-05-09 14:14                                                   ` Adam Ford
2021-05-09 18:44                                                     ` Marek Behun
2021-05-10 16:28                                                       ` Simon Glass
2021-05-13  9:22                                                         ` Pali Rohár
2021-03-04 16:17               ` Tom Rini
2021-03-04 16:35                 ` Pali Rohár

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=20210303164729.GG1310@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.