Re: [PATCH 3/3] x86, crash: Allocate enough low-mem when crashkernel=high
From: Baoquan He
Date: Fri Jan 23 2015 - 03:46:59 EST
Hi Joerg,
Yeah, it does happen if too many devices. I guess the reason no reports
come to us on rhel is we always use a auto mechsanism. We always try to
allocate from below 896M, if failed try below 4G, if failed try above
4G.
This could be solved in 2 ways:
1) We could optimize the distro shell scripts which build the initramfs
for kdump. Only include those devices which are necessary in kdump
kernel. E.g for net dump only that NIC which connect to dump target will
be brought up, this can decrease the dma memory requirement.
2) increase low-mem when crashkernel=high. But we have to be careful to
do this. We implement crashkernel=high not only for the unhappiness
crashkernel reservation is limited below 4G, but dma/dma32 memory space
is precious on some systems. If set crashkernel=high still too much low
memory has to be reserved by default, it's important to find the
balance. So if we have to increase the default low-mem, how much memory
is enough, why 256M? why not 128M/192M/320M/384M? And if 256M works
on your system, what if another person say it does't work because there
are more devices on his system?
Anyway, I understand the requirement, but we need find out how much
memory can satisfy most of systems.
Thanks
Baoquan
On 01/06/15 at 03:51pm, Joerg Roedel wrote:
> From: Joerg Roedel <jroedel@xxxxxxx>
>
> When the crashkernel is loaded above 4GiB in memory the
> first kernel only allocates 72MiB of low-memory for the DMA
> requirements of the second kernel. On systems with many
> devices this is not enough and causes device driver
> initialization errors and failed crash dumps. Set this
> default value to 256MiB to make sure there is enough memory
> available for DMA.
>
> Signed-off-by: Joerg Roedel <jroedel@xxxxxxx>
> ---
> arch/x86/kernel/setup.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index ab4734e..d6e6a6d 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -536,8 +536,11 @@ static void __init reserve_crashkernel_low(void)
> * swiotlb overflow buffer: now is hardcoded to 32k.
> * We round it to 8M for other buffers that
> * may need to stay low too.
> + * Also make sure we allocate enough extra memory
> + * low memory so that we don't run out of DMA
> + * buffers for 32bit devices.
> */
> - low_size = swiotlb_size_or_default() + (8UL<<20);
> + low_size = max(swiotlb_size_or_default() + (8UL<<20), 256UL<<20);
> auto_set = true;
> } else {
> /* passed with crashkernel=0,low ? */
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/