From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754779AbbEOJlP (ORCPT ); Fri, 15 May 2015 05:41:15 -0400 Received: from terminus.zytor.com ([198.137.202.10]:60070 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754738AbbEOJlK (ORCPT ); Fri, 15 May 2015 05:41:10 -0400 Date: Fri, 15 May 2015 02:40:08 -0700 From: tip-bot for Ingo Molnar Message-ID: Cc: aswin@hp.com, tim.c.chen@linux.intel.com, jason.low2@hp.com, hpa@zytor.com, brgerst@gmail.com, peterz@infradead.org, a.p.zijlstra@chello.nl, dvlasenk@redhat.com, luto@amacapital.net, dave@stgolabs.net, torvalds@linux-foundation.org, tglx@linutronix.de, paulmck@linux.vnet.ibm.com, bp@alien8.de, mingo@kernel.org, linux-kernel@vger.kernel.org Reply-To: jason.low2@hp.com, aswin@hp.com, tim.c.chen@linux.intel.com, peterz@infradead.org, hpa@zytor.com, brgerst@gmail.com, dvlasenk@redhat.com, luto@amacapital.net, torvalds@linux-foundation.org, dave@stgolabs.net, a.p.zijlstra@chello.nl, mingo@kernel.org, linux-kernel@vger.kernel.org, paulmck@linux.vnet.ibm.com, tglx@linutronix.de, bp@alien8.de In-Reply-To: <20150410123017.GB19918@gmail.com> References: <20150410123017.GB19918@gmail.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] x86: Pack loops tightly as well Git-Commit-ID: 24b0af706205ba49cd139913f92fea837a5724a7 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 24b0af706205ba49cd139913f92fea837a5724a7 Gitweb: http://git.kernel.org/tip/24b0af706205ba49cd139913f92fea837a5724a7 Author: Ingo Molnar AuthorDate: Fri, 10 Apr 2015 14:30:18 +0200 Committer: Ingo Molnar CommitDate: Fri, 15 May 2015 11:17:11 +0200 x86: Pack loops tightly as well Packing loops tightly (-falign-loops=1) is beneficial to code size: text data bss dec filename 12566391 1617840 1089536 15273767 vmlinux.align.16-byte 12224951 1617840 1089536 14932327 vmlinux.align.1-byte 11976567 1617840 1089536 14683943 vmlinux.align.1-byte.funcs-1-byte 11903735 1617840 1089536 14611111 vmlinux.align.1-byte.funcs-1-byte.loops-1-byte Which reduces the size of the kernel by another 0.6%, so the the total combined size reduction of the alignment-packing patches is ~5.5%. The x86 decoder bandwidth and caching arguments laid out in: be6cb02779ca ("x86: Align jump targets to 1-byte boundaries") apply to loop alignment as well. Furtermore, modern CPU uarchs have a loop cache/buffer that is a L0 cache before even any uop cache, covering a few dozen most recently executed instructions. This loop cache generally does not have the 16-byte alignment restrictions of the uop cache. Now loop alignment can still be beneficial if: - a loop is cache-hot and its surroundings are not. - if the loop is so cache hot that the instruction flow becomes x86 decoder bandwidth limited But loop alignment is harmful if: - a loop is cache-cold - a loop's surroundings are cache-hot as well - two cache-hot loops are close to each other - if the loop fits into the loop cache - if the code flow is not decoder bandwidth limited and I'd argue that the latter five scenarios are much more common in the kernel, as our hottest loops are typically: - pointer chasing: this should fit into the loop cache in most cases and is typically data cache and address generation limited - generic memory ops (memset, memcpy, etc.): these generally fit into the loop cache as well, and are likewise data cache limited. So this patch packs loop addresses tightly as well. Acked-by: Denys Vlasenko Cc: Andy Lutomirski Cc: Aswin Chandramouleeswaran Cc: Borislav Petkov Cc: Brian Gerst Cc: Davidlohr Bueso Cc: H. Peter Anvin Cc: Jason Low Cc: Linus Torvalds Cc: Paul E. McKenney Cc: Peter Zijlstra Cc: Peter Zijlstra Cc: Thomas Gleixner Cc: Tim Chen Link: http://lkml.kernel.org/r/20150410123017.GB19918@gmail.com Signed-off-by: Ingo Molnar --- arch/x86/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 5c7edf9..8c7cc44 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -83,6 +83,9 @@ else # Pack functions tightly as well: KBUILD_CFLAGS += -falign-functions=1 + # Pack loops tightly as well: + KBUILD_CFLAGS += -falign-loops=1 + # Don't autogenerate traditional x87 instructions KBUILD_CFLAGS += $(call cc-option,-mno-80387) KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)