From patchwork Fri Aug 24 16:18:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Ian King X-Patchwork-Id: 961908 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41xmff5FTQz9ryn; Sat, 25 Aug 2018 02:18:18 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1ftEml-00066q-ID; Fri, 24 Aug 2018 16:18:07 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1ftEmj-00066h-Or for kernel-team@lists.ubuntu.com; Fri, 24 Aug 2018 16:18:05 +0000 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1ftEmj-0000mM-Fe; Fri, 24 Aug 2018 16:18:05 +0000 From: Colin King To: kernel-team@lists.ubuntu.com Subject: [PATCH][unstable] UBUNTU: [Config] Enable CONFIG_PAGE_POISONING configs Date: Fri, 24 Aug 2018 17:18:05 +0100 Message-Id: <20180824161805.20260-1-colin.king@canonical.com> X-Mailer: git-send-email 2.17.1 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Colin Ian King BugLink: https://bugs.launchpad.net/bugs/1783651 As requested by Kees, enable the following to help with finding certain types of memory corruption: CONFIG_PAGE_POISONING=y CONFIG_PAGE_POISONING_ZERO=y CONFIG_PAGE_POISONING_NO_SANITY=y "this should have no impact on regular boots, and if someone boots with "page_poison=1" then they get page wiping when page_alloc pages are freed (and then GFP_ZERO is a no-op since it was already freed), so it becomes a reasonable trade-off on performance vs gaining the wipe-on-free ability of the buddy allocator." This has been benchmarked, with the tests comparing kernels without the config, with the config and with the config with page_poison=1 for the 4.18 and 4.15 kernels. I ran nearly 200 stress-ng stress tests and gathered the throughput (based on bogo ops per second on the usr+sys time consumed) for each stress test. Each of the stress tests were run for 60 seconds on an idle 8 thread Xeon i7-3770. The bogo-ops data was then normalized against the kernel that didn't have the config changes. The data to look at is the geometric means of all the normalized test results: 4.18 kernel, geometric mean of normalized bogo/ops throughput: No page poisoning: 1.000 Config page poisoning: 1.003 Config page poionsing + page_poison=1: 0.991 4.15 kernel, geometric mean of normalized bogo/ops throughput: No page poisoning: 1.000 Config page poisoning: 1.025 Config page poionsing + page_poison=1: 0.977 where > 1.000 shows more throughput and < 1.000 shows degraded throughput So it appears that enabling page poisoning configs does not degrade performance and setting page_poison=1 degrades performance by a very small amount. Raw data for this can be found at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1783651/+attachment/5170997/+files/kernel-poison-page-analysis.ods Signed-off-by: Colin Ian King Acked-by: Stefan Bader --- debian.master/config/annotations | 4 +++- debian.master/config/config.common.ubuntu | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/debian.master/config/annotations b/debian.master/config/annotations index 2079eb4..e3c6e3a 100644 --- a/debian.master/config/annotations +++ b/debian.master/config/annotations @@ -9876,7 +9876,9 @@ CONFIG_WW_MUTEX_SELFTEST policy<{'amd64': 'n', 'arm64': ' # Menu: Kernel hacking >> Memory Debugging CONFIG_PAGE_EXTENSION policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'n', 's390x': 'n'}> CONFIG_DEBUG_PAGEALLOC policy<{'amd64': 'n', 'arm64': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> -CONFIG_PAGE_POISONING policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> +CONFIG_PAGE_POISONING policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_POISONING_ZERO policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> +CONFIG_PAGE_POISONING_NO_SANITY policy<{'amd64': 'y', 'arm64': 'y', 'armhf': 'y', 'i386': 'y', 'ppc64el': 'y', 's390x': 'y'}> CONFIG_DEBUG_PAGE_REF policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> CONFIG_DEBUG_RODATA_TEST policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 's390x': 'n'}> CONFIG_SLUB_DEBUG_ON policy<{'amd64': 'n', 'arm64': 'n', 'armhf': 'n', 'i386': 'n', 'ppc64el': 'n', 's390x': 'n'}> diff --git a/debian.master/config/config.common.ubuntu b/debian.master/config/config.common.ubuntu index d248512..7ce3acd 100644 --- a/debian.master/config/config.common.ubuntu +++ b/debian.master/config/config.common.ubuntu @@ -6510,7 +6510,9 @@ CONFIG_PACK_STACK=y CONFIG_PADATA=y CONFIG_PAGE_COUNTER=y # CONFIG_PAGE_OWNER is not set -# CONFIG_PAGE_POISONING is not set +CONFIG_PAGE_POISONING=y +CONFIG_PAGE_POISONING_ZERO=y +CONFIG_PAGE_POISONING_NO_SANITY=y CONFIG_PAGE_POOL=y CONFIG_PAGE_TABLE_ISOLATION=y CONFIG_PALMAS_GPADC=m