93 lines
3.4 KiB
ReStructuredText
93 lines
3.4 KiB
ReStructuredText
|
=======================================
|
||
|
crashkernel memory reservation on arm64
|
||
|
=======================================
|
||
|
|
||
|
Author: Baoquan He <bhe@redhat.com>
|
||
|
|
||
|
Kdump mechanism is used to capture a corrupted kernel vmcore so that
|
||
|
it can be subsequently analyzed. In order to do this, a preliminarily
|
||
|
reserved memory is needed to pre-load the kdump kernel and boot such
|
||
|
kernel if corruption happens.
|
||
|
|
||
|
That reserved memory for kdump is adapted to be able to minimally
|
||
|
accommodate the kdump kernel and the user space programs needed for the
|
||
|
vmcore collection.
|
||
|
|
||
|
Kernel parameter
|
||
|
================
|
||
|
|
||
|
Through the kernel parameters below, memory can be reserved accordingly
|
||
|
during the early stage of the first kernel booting so that a continuous
|
||
|
large chunk of memomy can be found. The low memory reservation needs to
|
||
|
be considered if the crashkernel is reserved from the high memory area.
|
||
|
|
||
|
- crashkernel=size@offset
|
||
|
- crashkernel=size
|
||
|
- crashkernel=size,high crashkernel=size,low
|
||
|
|
||
|
Low memory and high memory
|
||
|
==========================
|
||
|
|
||
|
For kdump reservations, low memory is the memory area under a specific
|
||
|
limit, usually decided by the accessible address bits of the DMA-capable
|
||
|
devices needed by the kdump kernel to run. Those devices not related to
|
||
|
vmcore dumping can be ignored. On arm64, the low memory upper bound is
|
||
|
not fixed: it is 1G on the RPi4 platform but 4G on most other systems.
|
||
|
On special kernels built with CONFIG_ZONE_(DMA|DMA32) disabled, the
|
||
|
whole system RAM is low memory. Outside of the low memory described
|
||
|
above, the rest of system RAM is considered high memory.
|
||
|
|
||
|
Implementation
|
||
|
==============
|
||
|
|
||
|
1) crashkernel=size@offset
|
||
|
--------------------------
|
||
|
|
||
|
The crashkernel memory must be reserved at the user-specified region or
|
||
|
fail if already occupied.
|
||
|
|
||
|
|
||
|
2) crashkernel=size
|
||
|
-------------------
|
||
|
|
||
|
The crashkernel memory region will be reserved in any available position
|
||
|
according to the search order:
|
||
|
|
||
|
Firstly, the kernel searches the low memory area for an available region
|
||
|
with the specified size.
|
||
|
|
||
|
If searching for low memory fails, the kernel falls back to searching
|
||
|
the high memory area for an available region of the specified size. If
|
||
|
the reservation in high memory succeeds, a default size reservation in
|
||
|
the low memory will be done. Currently the default size is 128M,
|
||
|
sufficient for the low memory needs of the kdump kernel.
|
||
|
|
||
|
Note: crashkernel=size is the recommended option for crashkernel kernel
|
||
|
reservations. The user would not need to know the system memory layout
|
||
|
for a specific platform.
|
||
|
|
||
|
3) crashkernel=size,high crashkernel=size,low
|
||
|
---------------------------------------------
|
||
|
|
||
|
crashkernel=size,(high|low) are an important supplement to
|
||
|
crashkernel=size. They allows the user to specify how much memory needs
|
||
|
to be allocated from the high memory and low memory respectively. On
|
||
|
many systems the low memory is precious and crashkernel reservations
|
||
|
from this area should be kept to a minimum.
|
||
|
|
||
|
To reserve memory for crashkernel=size,high, searching is first
|
||
|
attempted from the high memory region. If the reservation succeeds, the
|
||
|
low memory reservation will be done subsequently.
|
||
|
|
||
|
If reservation from the high memory failed, the kernel falls back to
|
||
|
searching the low memory with the specified size in crashkernel=,high.
|
||
|
If it succeeds, no further reservation for low memory is needed.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
- If crashkernel=,low is not specified, the default low memory
|
||
|
reservation will be done automatically.
|
||
|
|
||
|
- if crashkernel=0,low is specified, it means that the low memory
|
||
|
reservation is omitted intentionally.
|