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>
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox