From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755273AbbDKRls (ORCPT ); Sat, 11 Apr 2015 13:41:48 -0400 Received: from mail-ig0-f176.google.com ([209.85.213.176]:37089 "EHLO mail-ig0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754058AbbDKRlq (ORCPT ); Sat, 11 Apr 2015 13:41:46 -0400 MIME-Version: 1.0 In-Reply-To: <20150411092021.GA9478@gmail.com> References: <20150409175652.GI6464@linux.vnet.ibm.com> <20150409183926.GM6464@linux.vnet.ibm.com> <20150410090051.GA28549@gmail.com> <20150410091252.GA27630@gmail.com> <20150410092152.GA21332@gmail.com> <20150410111427.GA30477@gmail.com> <20150410112748.GB30477@gmail.com> <20150410120846.GA17101@gmail.com> <20150411092021.GA9478@gmail.com> Date: Sat, 11 Apr 2015 10:41:46 -0700 X-Google-Sender-Auth: X1lKKfjg-h73bZX3EEqud4DTPK0 Message-ID: Subject: Re: [PATCH] x86: Turn off GCC branch probability heuristics From: Linus Torvalds To: Ingo Molnar Cc: Thomas Gleixner , Denys Vlasenko , Borislav Petkov , Tim Chen , Andy Lutomirski , Jason Low , Brian Gerst , Aswin Chandramouleeswaran , "Paul E. McKenney" , Davidlohr Bueso , Peter Zijlstra , "H. Peter Anvin" , LKML , Peter Zijlstra Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Apr 11, 2015 2:20 AM, "Ingo Molnar" wrote: > > Another thing caught my attention (and I'm hijacking the RCU thread > again): GCC's notion of how to place branches seems somewhat random, > and rather bloaty. > > So I tried the experiment below on an x86 defconfig, turning off GCC's > branch heuristics, and it's rather surprising: > > text data bss dec filename > 12566447 1617840 1089536 15273823 vmlinux.fguess-branch-probability > 11923593 1617840 1089536 14630969 vmlinux.fno-guess-branch-probability > > That's an 5.4% code size improvement! Ugh. That's much larger than I would have expected. Is it just because gcc ends up turning if (a) b c into if (a) goto out-of-line return: c .. out-of-line: c goto return; a lot? Still, 5% sounds insanely big. How much of that 5% comes from code alignment? Or was this on *top* of the 1-byte alignment testt? Linus