Received: by 10.192.165.148 with SMTP id m20csp665013imm; Wed, 2 May 2018 06:56:12 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoaPUHLA75+n1DnWioTKkVS22QxWbv2M8tiJwGbQzXXoN9BaZxbbZuIkIV9K7Zw+u8WXMLq X-Received: by 2002:a63:4384:: with SMTP id q126-v6mr16001348pga.294.1525269372743; Wed, 02 May 2018 06:56:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525269372; cv=none; d=google.com; s=arc-20160816; b=adC123NPIXdPiKqhQDz6dqJxGt+Ims0piYex1uaKEdv78QzG9YqtvC2g8v53TCQcBl Di0k9Uqb8KKpjo45Or/gEt2CG79yHiNSUs6iDYo5AaaUoIaeP/DAuELfSbOmGDC2a6U1 yb2Zmsf/8lmJzBYti4g4GuuVtRntX+Ur3wKmoZbixFaaaV1gtnYNo/snke1yomiepyFh 7mIg7SJm/Ygc+sNzCtGMd/Ozqd5KsV5kPRW8ogUhzwYZVjSkM3W7fCbYWgzypJN4AqRf DvUR6AikJy+6lhBnnN6Mf6y4odtzUCUf+I4norVx8bbmlDYNxv3p0hWBB9cWujPN2VUk gC2A== 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=jDgK1MpI877KS6T//6O6lEkfAhJS9KRB0av6EwQ8Us8=; b=ehCn1mzDjrHm0lD9RVwhvhHFe28yxeX+pbCOD8adr+o2DowmSFATrGVH0K1IH2kquo nCr8CheG5U/sDiOpwWU1SJLDIjn/TvX0t23OO3TgJeOCAeJGA5+AbldGBTw4OUHMrBfm ova8YZnmbIHNUb6QmsanETNOVCuEcn+1oDqQ2vZXxMKGAxhZzmBK9/Vyo0hRne4l/U94 I7fYE3XrzH4N5tqOhMKmnETPsuMU2OMxYEdEgwq8j84TGfBNaQY1na+0eRyLS4qFzt7j kKSZ0zljRW88E381OlrZG+ibjOvpcLelaEZe5Xzf9Nh/9CRe1c4xpieHiIYTLleNXbUq NReQ== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q3-v6si10947955pll.126.2018.05.02.06.55.58; Wed, 02 May 2018 06:56:12 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751453AbeEBNzc (ORCPT + 99 others); Wed, 2 May 2018 09:55:32 -0400 Received: from mga01.intel.com ([192.55.52.88]:58147 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750930AbeEBNz3 (ORCPT ); Wed, 2 May 2018 09:55:29 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 May 2018 06:55:28 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,354,1520924400"; d="scan'208";a="225150712" Received: from gvt-dell.bj.intel.com (HELO gvt-dell-host.bj.intel.com) ([10.238.154.59]) by fmsmga005.fm.intel.com with ESMTP; 02 May 2018 06:55:25 -0700 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 Subject: [PATCH v2 0/5] kernel hacking: GCC optimization for debug experience (-Og) Date: Wed, 2 May 2018 21:44:55 +0800 Message-Id: <1525268700-10631-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 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