Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp618208imm; Tue, 5 Jun 2018 01:25:38 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKrROkafHBgYygDUR0h7daD5A72ZHfN3coAOz2P00I5qCHRJTDqzG2z4XyY7YHrJDfc2tNa X-Received: by 2002:a62:8552:: with SMTP id u79-v6mr15188851pfd.201.1528187138646; Tue, 05 Jun 2018 01:25:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528187138; cv=none; d=google.com; s=arc-20160816; b=GgvTPfOyhlSP+ymnQXYYhXkFbY8z11laJMCX0QiIF4zsqSclWZ2GYrAnnngGra5YDI d99/cTpUYt6fB0hRMry/fBTAd9XjZii7PsQEkeqJavx99wWvonePeAeRch6veblk5bN5 bCqVmOOG5wJs8QXl2pbi+Z6YGX5d6ZAcY1OPtnNwS8NMsJ8CX2QhosEpwH5IT/zqfOKA sG4o67K58ETt5WY+yTRyTyA+LvaQ20vIE9woHIfK8y7ZUdLvn7y8Nwfh2gk1PMzG5wME DO92kqqOZ0hwREEgEalJVUO20FfJrEsT+83MV9EWU9E0sQGqmF1wWn0Zz8wzerWXjrZY U/ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=Qa7FkYz6Mou702Hgjy3L7SZWjDCZ56i+V0mVw2Aarb8=; b=PhCLKcwGDs6lBI8hywt6/lEZXDDJt4gIx7ErPdTg7wostYSsP3OsrQgkAr7X0cq7dX PYuXJnLSDO5EsB4BPk1+N2Ub1sEy8QZtWLJ8f9RWxpYKrRiwv+f2iijVLdiny1z1tQI8 789W17y0jkPGfKR8xSpuH3jYRMPl+5EYkElGtsdNkhDYsGvB8KG0vGjydQazeffm5n3+ vtk103xhoK3j9HnAai220Jc3FzNDllI/rGjjIIvazXo63H0fr00+5rAnNph4/sdR2Zy5 YKCGSnzq/W8iysgXC1Qvpvz5V9DiqhJyRE6Ion4EX8fA3i6LKBJeaRf8LD1ktWMhSNaX dXFg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y187-v6si21294572pgb.120.2018.06.05.01.25.24; Tue, 05 Jun 2018 01:25:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751837AbeFEIY3 (ORCPT + 99 others); Tue, 5 Jun 2018 04:24:29 -0400 Received: from mga17.intel.com ([192.55.52.151]:34421 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751498AbeFEIY1 (ORCPT ); Tue, 5 Jun 2018 04:24:27 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2018 01:24:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,478,1520924400"; d="scan'208";a="45352106" Received: from gvt-dell.bj.intel.com (HELO gvt-dell-host.bj.intel.com) ([10.238.154.65]) by fmsmga008.fm.intel.com with ESMTP; 05 Jun 2018 01:24:23 -0700 From: changbin.du@intel.com To: mingo@redhat.com, akpm@linux-foundation.org, yamada.masahiro@socionext.com, michal.lkml@markovi.net Cc: rostedt@goodmis.org, tglx@linutronix.de, rdunlap@infradead.org, x86@kernel.org, linux@armlinux.org.uk, lgirdwood@gmail.com, broonie@kernel.org, arnd@arndb.de, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sparse@vger.kernel.org, changbin.du@gmail.com, Changbin Du Subject: [RESEND PATCH v5 0/4] kernel hacking: GCC optimization for better debug experience (-Og) Date: Tue, 5 Jun 2018 16:13:36 +0800 Message-Id: <1528186420-6615-1-git-send-email-changbin.du@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Changbin Du Hi all, 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 replys 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% ) v5: o Exchange the position of last two patches to avoid compiling error. v4: o Remove aready merged one "regulator: add dummy function of_find_regulator_by_node". Changbin Du (4): x86/mm: surround level4_kernel_pgt with #ifdef CONFIG_X86_5LEVEL...#endif 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 | 10 ++++++++++ arch/arm/mm/mmu.c | 2 +- arch/x86/include/asm/pgtable_64.h | 2 ++ arch/x86/kernel/head64.c | 13 ++++++------- include/linux/compiler-gcc.h | 2 +- include/linux/compiler.h | 2 +- init/Kconfig | 19 +++++++++++++++++++ lib/Kconfig.debug | 17 +++++++++++++++++ 8 files changed, 57 insertions(+), 10 deletions(-) -- 2.7.4