From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/8743 Path: news.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] configure: add gcc flags for better link-time optimization Date: Fri, 23 Oct 2015 10:48:43 -0400 Message-ID: <20151023144843.GJ8645@brightrain.aerifal.cx> References: <1445603426-4827-1-git-send-email-vda.linux@googlemail.com> <20151023131202.GI10551@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1445611769 1575 80.91.229.3 (23 Oct 2015 14:49:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 23 Oct 2015 14:49:29 +0000 (UTC) Cc: musl To: Denys Vlasenko Original-X-From: musl-return-8756-gllmg-musl=m.gmane.org@lists.openwall.com Fri Oct 23 16:49:23 2015 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1ZpdeP-0008Nh-CK for gllmg-musl@m.gmane.org; Fri, 23 Oct 2015 16:49:01 +0200 Original-Received: (qmail 30337 invoked by uid 550); 23 Oct 2015 14:48:58 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 30312 invoked from network); 23 Oct 2015 14:48:57 -0000 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:8743 Archived-At: On Fri, Oct 23, 2015 at 04:41:17PM +0200, Denys Vlasenko wrote: > On Fri, Oct 23, 2015 at 3:12 PM, Szabolcs Nagy wrote: > >> +# When linker merges sections, a tiny section (such as one resulting > >> +# from "static char flag_var") with no alignment restrictions > >> +# can end up logded between two more strongly aligned ones (say, > >> +# "static int global_cnt1/2", both of which want 32-bit alignment). > >> +# Then this byte-sized "flag_var" gets 3 bytes of padding. > >> +# > >> +# With section sorting by alignment, one-byte flag variables have > >> +# higher chance of being grouped together and not require padding. > >> +# (It can be made even better. Linker is too dumb. > >> +# ld needs to grow -Wl,--pack-sections-optimally) > >> +# > >> +# For us, this affects the size of only one file: libc.so > >> +# > >> +tryldflag LDFLAGS_AUTO -Wl,--sort-section=alignment > >> +tryldflag LDFLAGS_AUTO -Wl,--sort-common > > > > i think this came up before > > https://sourceware.org/bugzilla/show_bug.cgi?id=14156 > > > > it was also noted at some point that the optimal sorting > > is 'sort by use' so all the unused legacy functions end > > up on the same page so they never need to be loaded. > > Sure, but that would be quite hard to do. > How would you reliably know who uses which part of libc > code? > > OTOH, we don't _need_ to kill ourselves trying to optimize > that. Optimizing code size is not the big thing here. > Even though data and bss shrinkage is smaller, > it is more important. I agree, data is a lot more important than code here. > Minimizing the number of data pages is more important > than text pages. A text page is shared among all processes linked > to this libc.so; data page is allocated in every process > (as soon as even one byte in this page is written to. > With only 4 pages in total like in this example, I'm pretty sure > all of them get dirtied by libc init, use of stdio or malloc). > > Make libc (.data + .bss) fit into one page less and you get about > as many pages saved as you have processes running. FYI all the data/bss in libc except a few large objects _easily_ fits in a single page. Unfortunately a couple of those large ones (malloc state & stdio buffers) are used by the majority of programs. I'm still not sure of the best way to achieve a particular sorting without awful hacks. Sort by alignment may be a decent approximation of best behavior but I need to check it out. Thanks for working on this topic. Rich