From patchwork Sun Oct 28 13:09:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Changbin Du X-Patchwork-Id: 10658623 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0841D109C for ; Sun, 28 Oct 2018 13:11:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EB70B29DF8 for ; Sun, 28 Oct 2018 13:11:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D8CA329E3B; Sun, 28 Oct 2018 13:11:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7AB0029DF8 for ; Sun, 28 Oct 2018 13:11:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=9UoFbrCnrYuhwsrHP5M4F4SerWwQGYRJUNQ77MJshRk=; b=s4O 59BrQx6gaQe1bu/wi3Etlb7MjOkanlanEvQUFRH2EJ65hmWHBVj1lnRpn9MHxITNKbUcPk12aAtSv IZPgxN/8epk/IoWNgkSKXJ6NR5yJ+oJzhnTvysHbK4ODqYGMzGuAjqd3WOMNVPrd22+gi5m3s8eGW TTGTDuMNxbyNqGxz5ebVV8j7+4BS8o5HhmKSoU6PeSI3oBtyhbZxBeEsUKVnhplUmVvzU6A0LLqXp BUdy20W6dsycwzShQojdZD0R5m3ARv0w4NI3SCFKKLpQjRM77tbB8QvK8R77WgU85soAq6vn0a3OV lsGI0d4YaSGmUXCPJSLCsmog8+XaRig==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gGkqk-0000hx-Mp; Sun, 28 Oct 2018 13:11:26 +0000 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gGkpx-0000Of-QC for linux-arm-kernel@lists.infradead.org; Sun, 28 Oct 2018 13:10:39 +0000 Received: by mail-pf1-x443.google.com with SMTP id r64-v6so2668820pfb.13 for ; Sun, 28 Oct 2018 06:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=a+uZnQjGCbsXseSwUo5wUtoaCf6Nw0+ZZ3aq20GQFyM=; b=DQZif+m6q/Y9+aJtbFY/tv5O0rjYtjChPttY+vlar+LiCtfBeF1kPecN42FespMjeV RjqXuVgnRJn00oi/8i22rABoxzKzQZiWlpXF8dnBt6qn0HUpPEQHlqRxxzFTJQDbQGbW c1Eki2bEZ5bPa2u+2BF/VsoJQr6juNc8bq0O1TQm02UNNwCm8E+ko9nu8+zV24lUu0TJ 9vafOwr0ELic0VxHnLrJa/ykFmwkwGLraIRDKizpP+WR8jDilkP1ig6h5RBH20c6yyK5 OFaOYPjNuprG0eDf2QuUzjDAi1cFkWupoZnsxBS1iDcOCZVaPLStPh7+BbsnCJ89/h6B umOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=a+uZnQjGCbsXseSwUo5wUtoaCf6Nw0+ZZ3aq20GQFyM=; b=TUUYX+c4ePlg1EMmehRCQhn7wvGTRtzMV6aNWHa4lEIFzmc1seWBRa0rMRJwsDOzUy 4lWVrhcFmszLJPls7h7x+OCi617BYtl0z6MgNY6MBDTjaXvxnZieqoxuK6rTcTLs87py dqJ92lYY0wqdM3sVOEGiwFWoxm1sttNLF4E2WOuTY5OSqhVN2oFl8fOLS/l/RZ4ryVc6 yMjN95YWoNKY6MPwUWtcmFnrmRNNuFDP8QBgRkvgDqW3vFf1v1x2/zYV5HTNqO4uPFAZ VpdT0PTlpMgOhimg7XBgiYloauaJD0M86+lBg/bR6kWNEKw2++Iiq46HfkIx75fH3nL4 np0g== X-Gm-Message-State: AGRZ1gLlmgatDpNlXBiazzfMyjg0f29N36JUkLqQPiQHrPW1R775WT8n 0HaqabnJb+Z8s49vj/3acYw= X-Google-Smtp-Source: AJdET5cevle15cUqqywgMXQ+37HiZ1QqzE+wlln/nJHmgAGQDVK4+aI1KT2PfibXDE+OZ3MgqOqrrg== X-Received: by 2002:a65:620f:: with SMTP id d15-v6mr1128471pgv.120.1540732226251; Sun, 28 Oct 2018 06:10:26 -0700 (PDT) Received: from vultr.guest ([2001:19f0:6001:4ff6:5400:1ff:feb7:a195]) by smtp.gmail.com with ESMTPSA id e3-v6sm24520585pgc.71.2018.10.28.06.10.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 28 Oct 2018 06:10:25 -0700 (PDT) From: Changbin Du To: yamada.masahiro@socionext.com, michal.lkml@markovi.net, tglx@linutronix.de, mingo@redhat.com, linux@armlinux.org.uk, akpm@linux-foundation.org, gregkh@linuxfoundation.org Subject: [PATCH v3 0/4] kernel hacking: GCC optimization for better debug experience (-Og) Date: Sun, 28 Oct 2018 13:09:41 +0000 Message-Id: <20181028130945.23581-1-changbin.du@gmail.com> X-Mailer: git-send-email 2.17.1 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181028_061037_878539_B9E84E9C X-CRM114-Status: GOOD ( 13.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kbuild@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, rostedt@goodmis.org, linux-sparse@vger.kernel.org, robin.murphy@arm.com, linux-arm-kernel@lists.infradead.org, Changbin Du MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Hi all, I have posted this series several months ago but interrupted by personal affairs. Now I get time to complete this task. Thanks for all of the reviewers. I know some kernel developers was searching for a method to dissable GCC optimizations, probably they want to apply GCC '-O0' option. But since Linux kernel relies on GCC optimization to remove some dead code, so '-O0' just breaks the build. They do need this because they want to debug kernel with qemu, simics, kgtp or kgdb. Thanks for the GCC '-Og' optimization level introduced in GCC 4.8, which offers a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is similar to '-O1' while perferring to keep debug ability over runtime speed. With '-Og', we can build a kernel with better debug ability and little performance drop after some simple change. In this series, firstly introduce a new config CONFIG_NO_AUTO_INLINE after two fixes for this new option. With this option, only functions explicitly marked with "inline" will be inlined. This will allow the function tracer to trace more functions because it only traces functions that the compiler has not inlined. Then introduce new config CC_OPTIMIZE_FOR_DEBUGGING which apply '-Og' optimization level for whole kernel, with a simple fix in fix_to_virt(). Currently I have only tested this option on x86 and ARM platform. Other platforms should also work but probably need some compiling fixes as what having done in this series. I leave that to who want to try this debug option. Comparison of vmlinux size: a bit smaller. w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING $ size vmlinux text data bss dec hex filename 22665554 9709674 2920908 35296136 21a9388 vmlinux w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING $ size vmlinux text data bss dec hex filename 21499032 10102758 2920908 34522698 20ec64a vmlinux Comparison of system performance: a bit drop (~6%). This benchmark of kernel compilation is suggested by Ingo Molnar. https://lkml.org/lkml/2018/5/2/74 Preparation: Set cpufreq to 'performance'. for ((cpu=0; cpu<120; cpu++)); do G=/sys/devices/system/cpu/cpu$cpu/cpufreq/scaling_governor [ -f $G ] && echo performance > $G done w/o CONFIG_CC_OPTIMIZE_FOR_DEBUGGING $ perf stat --repeat 5 --null --pre '\ cp -a kernel ../kernel.copy.$(date +%s); \ rm -rf *; \ git checkout .; \ echo 1 > /proc/sys/vm/drop_caches; \ find ../kernel* -type f | xargs cat >/dev/null; \ make -j kernel >/dev/null; \ make clean >/dev/null 2>&1; \ sync '\ \ make -j8 >/dev/null Performance counter stats for 'make -j8' (5 runs): 219.764246652 seconds time elapsed ( +- 0.78% ) w/ CONFIG_CC_OPTIMIZE_FOR_DEBUGGING $ perf stat --repeat 5 --null --pre '\ cp -a kernel ../kernel.copy.$(date +%s); \ rm -rf *; \ git checkout .; \ echo 1 > /proc/sys/vm/drop_caches; \ find ../kernel* -type f | xargs cat >/dev/null; \ make -j kernel >/dev/null; \ make clean >/dev/null 2>&1; \ sync '\ \ make -j8 >/dev/null Performance counter stats for 'make -j8' (5 runs): 233.574187771 seconds time elapsed ( +- 0.19% ) v3: o Take suggestions from Masahiro Yamada. v2: o rebase on top of mainline. Changbin Du (4): x86/mm: declare check_la57_support() as inline kernel hacking: new config NO_AUTO_INLINE to disable compiler auto-inline optimizations ARM: mm: fix build error in fix_to_virt with CONFIG_CC_OPTIMIZE_FOR_DEBUGGING kernel hacking: new config CC_OPTIMIZE_FOR_DEBUGGING to apply GCC -Og optimization Makefile | 11 +++++++++++ arch/arm/mm/mmu.c | 2 +- arch/x86/kernel/head64.c | 2 +- include/linux/compiler-gcc.h | 2 +- include/linux/compiler.h | 2 +- init/Kconfig | 20 ++++++++++++++++++++ kernel/configs/tiny.config | 1 + lib/Kconfig.debug | 17 +++++++++++++++++ 8 files changed, 53 insertions(+), 4 deletions(-)