Re: [PATCH] mm/debug_pagealloc: Ask users for default setting of debug_pagealloc

From: Heiko Carstens
Date: Mon Jan 25 2016 - 04:41:45 EST


On Mon, Jan 25, 2016 at 10:19:48AM +0100, Christian Borntraeger wrote:
> since commit 031bc5743f158 ("mm/debug-pagealloc: make debug-pagealloc
> boottime configurable") CONFIG_DEBUG_PAGEALLOC is by default a no-op.
>
> This resulted in several unnoticed bugs, e.g.
>
> https://lkml.kernel.org/g/<569F5E29.3090107@xxxxxxxxxx>
> or
> https://lkml.kernel.org/g/<56A20F30.4050705@xxxxxxxxxx>
>
> as this behaviour change was not even documented in Kconfig.
>
> Let's provide a new Kconfig symbol that allows to change the default
> back to enabled, e.g. for debug kernels. This also makes the change
> obvious to kernel packagers.
>
> Let's also change the Kconfig description for CONFIG_DEBUG_PAGEALLOC,
> to indicate that it is ok to enable this by default.
>
> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
> ---
> mm/Kconfig.debug | 17 +++++++++++++++++
> mm/page_alloc.c | 6 +++++-
> 2 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/mm/Kconfig.debug b/mm/Kconfig.debug
> index 957d3da..4cf1212 100644
> --- a/mm/Kconfig.debug
> +++ b/mm/Kconfig.debug
> @@ -26,5 +26,22 @@ config DEBUG_PAGEALLOC
> that would result in incorrect warnings of memory corruption after
> a resume because free pages are not saved to the suspend image.
>
> + By default this option will be almost for free and can be activated
> + in distribution kernels. The overhead and the debugging can be enabled
> + by DEBUG_PAGEALLOC_ENABLE_DEFAULT or the debug_pagealloc command line
> + parameter.

Sorry, but it's not almost for free and should not be used by distribution
kernels. If we have DEBUG_PAGEALLOC enabled, at least on s390 we will not
make use of 2GB and 1MB pagetable entries for the identy mapping anymore.
Instead we will only use 4K mappings.

I assume this is true for all architectures since freeing pages can happen
in any context and therefore we can't allocate memory in order to split
page tables.

So enabling this will cost memory and put more pressure on the TLB.