896MB address limit

Maxim Uvarov muvarov at gmail.com
Tue Sep 25 11:58:41 EDT 2012


2012/9/25 Maxim Uvarov <muvarov at gmail.com>:
> In the most cases you need to boot crash kernel with nr_cpus=1
> parameter. In that case you will not allocate per cpus buffers  for
> other cpus. Saving dump on more the one cpu does not give any benefit.
> So it's very rare case where you need  such huge memory only for save
> dump process. You might be looking to the problem from the work side.

other.
>
> Maxim.
>
> 2012/9/25 Eric W. Biederman <ebiederm at xmission.com>:
>> Cliff Wickman <cpw at sgi.com> writes:
>>
>>> Hi Eric, and all,
>>>
>>> On Mon, Sep 24, 2012 at 08:11:12PM -0700, Eric W. Biederman wrote:
>>>> Cliff Wickman <cpw at sgi.com> writes:
>>>>
>>>> > Gentlemen,
>>>> >
>>>> > In dumping very large memories we are running up against the 896MB
>>>> > limit in SLES11SP2 (3.0.38 kernel).
>>>>
>>>> Odd.  That limit should be the maximum address in memory to load the
>>>> crash kernel.  Tha limit should have nothing to do with the dump process
>>>> itself.
>>>>
>>>> Are you saying you need more that 512MiB reserved for the crash kernel
>>>> to be able to dump all of the memory in your system?
>>>>
>>>> Eric
>>>
>>> As I noted to Eric privately, yes we need to bump up to crashkernel=1G
>>> or more for some very large memories.
>>>
>>> As an experiment I bumped
>>> +++ linux/arch/x86/kernel/setup.c
>>> @@ -528,7 +528,7 @@ static inline unsigned long long get_tot
>>>  #ifdef CONFIG_X86_32
>>>  # define CRASH_KERNEL_ADDR_MAX (512 << 20)
>>>  #else
>>> -# define CRASH_KERNEL_ADDR_MAX (896 << 20)
>>> +# define CRASH_KERNEL_ADDR_MAX (1700 << 20)
>>>
>>> And that seems to work.  i.e. I'm currently dumping a system where
>>> crashkernel=1G and it seems to be working.
>>>
>>> Am I just living dangerously?
>>
>> So fundamentally this should work.  However there have been a lot of
>> kinks and silly limitations in the x86 boot protocol.
>>
>> So it used to be that the bootloader protocol variable ramdisk_max was
>> set to 896M for 32bit kernels.  Because the ramdisk could not be located
>> in high memory.
>>
>> Looking today it appears that ramdisk_max has been upped to 4G.
>>
>> I will let you look through the /sbin/kexec source code.
>>
>> As for testing I would up the limit to 4G on x86_64 and see how far
>> you get.
>>
>> The practical question does the system still work with crashkernel=32M
>> when you have raised the limit much higher.
>>
>> So I would test with crashkernel=1G at 2G and see if that works.  If that
>> works I figure that in practice all of the bugs are historical and we
>> can forget them.  But a sweep through the /sbin/kexec code for the magic
>> number 896 might not be out of order.
>>
>> Eric
>>
>>
>>
>>
>>
>> _______________________________________________
>> kexec mailing list
>> kexec at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/kexec
>
>
>
> --
> Best regards,
> Maxim Uvarov



-- 
Best regards,
Maxim Uvarov



More information about the kexec mailing list