From: changbin.du@intel.com
To: yamada.masahiro@socionext.com, michal.lkml@markovi.net,
tglx@linutronix.de, mingo@redhat.com, akpm@linux-foundation.org
Cc: rostedt@goodmis.org, rdunlap@infradead.org, x86@kernel.org,
lgirdwood@gmail.com, broonie@kernel.org, arnd@arndb.de,
linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, Changbin Du <changbin.du@intel.com>
Subject: [PATCH v2 0/5] kernel hacking: GCC optimization for debug experience (-Og)
Date: Wed, 2 May 2018 21:44:55 +0800 [thread overview]
Message-ID: <1525268700-10631-1-git-send-email-changbin.du@intel.com> (raw)
From: Changbin Du <changbin.du@intel.com>
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 perfer keeping
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 CONFIG_DEBUG_EXPERIENCE which apply '-Og'
optimization level for whole kernel, with a simple fix in fix_to_virt().
Currently this option is only tested on a QEMU gust and it works fine.
Comparison of vmlinux size: a bit smaller.
w/o CONFIG_DEBUG_EXPERIENCE
$ size vmlinux
text data bss dec hex filename
22665554 9709674 2920908 35296136 21a9388 vmlinux
w/ CONFIG_DEBUG_EXPERIENCE
$ 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_DEBUG_EXPERIENCE
$ 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_DEBUG_EXPERIENCE
$ 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% )
Changbin Du (5):
x86/mm: surround level4_kernel_pgt with #ifdef
CONFIG_X86_5LEVEL...#endif
regulator: add dummy function of_find_regulator_by_node
kernel hacking: new config NO_AUTO_INLINE to disable compiler
auto-inline optimizations
kernel hacking: new config DEBUG_EXPERIENCE to apply GCC -Og
optimization
asm-generic: fix build error in fix_to_virt with
CONFIG_DEBUG_EXPERIENCE
Makefile | 10 ++++++++++
arch/x86/include/asm/pgtable_64.h | 2 ++
arch/x86/kernel/head64.c | 13 ++++++-------
drivers/regulator/internal.h | 9 +++++++--
include/asm-generic/fixmap.h | 3 ++-
include/linux/compiler-gcc.h | 2 +-
include/linux/compiler.h | 2 +-
lib/Kconfig.debug | 39 +++++++++++++++++++++++++++++++++++++++
8 files changed, 68 insertions(+), 12 deletions(-)
--
2.7.4
next reply other threads:[~2018-05-02 13:55 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-02 13:44 changbin.du [this message]
2018-05-02 13:44 ` [PATCH v2 1/5] x86/mm: surround level4_kernel_pgt with #ifdef CONFIG_X86_5LEVEL...#endif changbin.du
2018-05-02 13:44 ` [PATCH v2 2/5] regulator: add dummy function of_find_regulator_by_node changbin.du
2018-05-02 13:44 ` [PATCH v2 3/5] kernel hacking: new config NO_AUTO_INLINE to disable compiler auto-inline optimizations changbin.du
2018-05-02 14:07 ` Steven Rostedt
2018-05-02 20:27 ` Arnd Bergmann
2018-05-03 13:00 ` Du, Changbin
2018-05-03 14:16 ` Steven Rostedt
2018-05-02 13:44 ` [PATCH v2 4/5] kernel hacking: new config DEBUG_EXPERIENCE to apply GCC -Og optimization changbin.du
2018-05-02 14:17 ` Steven Rostedt
2018-05-02 20:45 ` Andrew Morton
2018-05-03 1:19 ` Steven Rostedt
2018-05-03 13:45 ` Du, Changbin
2018-05-03 14:28 ` Steven Rostedt
2018-05-05 23:57 ` Du, Changbin
2018-05-06 0:27 ` Randy Dunlap
2018-05-02 19:26 ` Randy Dunlap
2018-05-02 13:45 ` [PATCH v2 5/5] asm-generic: fix build error in fix_to_virt with CONFIG_DEBUG_EXPERIENCE changbin.du
2018-05-02 14:19 ` Steven Rostedt
2018-05-03 13:25 ` Du, Changbin
2018-05-03 14:19 ` Steven Rostedt
2018-05-03 16:39 ` weylin
2018-05-02 14:56 ` [PATCH v2 0/5] kernel hacking: GCC optimization for debug experience (-Og) Daniel Thompson
2018-05-03 13:49 ` Du, Changbin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1525268700-10631-1-git-send-email-changbin.du@intel.com \
--to=changbin.du@intel.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=broonie@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michal.lkml@markovi.net \
--cc=mingo@redhat.com \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).