================================================================
Documentation for Kdump - The kexec-based Crash Dumping Solution
================================================================

This document includes overview, setup and installation, and analysis
information.

Overview
========

Kdump uses kexec to quickly boot to a dump-capture kernel whenever a
dump of the system kernel's memory needs to be taken (for example, when
the system panics). The system kernel's memory image is preserved across
the reboot and is accessible to the dump-capture kernel.

You can use common Linux commands, such as cp and scp, to copy the
memory image to a dump file on the local disk, or across the network to
a remote system.

Kdump and kexec are currently supported on the x86, x86_64, and ppc64
architectures.

When the system kernel boots, it reserves a small section of memory for
the dump-capture kernel. This ensures that ongoing Direct Memory Access
(DMA) from the system kernel does not corrupt the dump-capture kernel.
The kexec -p command loads the dump-capture kernel into this reserved
memory.

On x86 machines, the first 640 KB of physical memory is needed to boot,
regardless of where the kernel loads. Therefore, kexec backs up this
region just before rebooting into the dump-capture kernel.

All of the necessary information about the system kernel's core image is
encoded in the ELF format, and stored in a reserved area of memory
before a crash. The physical address of the start of the ELF header is
passed to the dump-capture kernel through the elfcorehdr= boot
parameter.

With the dump-capture kernel, you can access the memory image, or "old
memory," in two ways:

- Through a /dev/oldmem device interface. A capture utility can read the
  device file and write out the memory in raw format. This is a raw dump
  of memory. Analysis and capture tools must be intelligent enough to
  determine where to look for the right information.

- Through /proc/vmcore. This exports the dump as an ELF-format file that
  you can write out using file copy commands such as cp or scp. Further,
  you can use analysis tools such as the GNU Debugger (GDB) and the Crash
  tool to debug the dump file. This method ensures that the dump pages are
  correctly ordered.


Setup and Installation
======================

Install kexec-tools and the Kdump patch
---------------------------------------

1) Login as the root user.

2) Download the kexec-tools user-space package from the following URL:

   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz

3) Unpack the tarball with the tar command, as follows:

   tar xvpzf kexec-tools-1.101.tar.gz

4) Download the latest consolidated Kdump patch from the following URL:

   http://lse.sourceforge.net/kdump/

   (This location is being used until all the user-space Kdump patches
   are integrated with the kexec-tools package.)

5) Change to the kexec-tools-1.101 directory, as follows:

   cd kexec-tools-1.101

6) Apply the consolidated patch to the kexec-tools-1.101 source tree
   with the patch command, as follows. (Modify the path to the downloaded
   patch as necessary.)

   patch -p1 < /path-to-kdump-patch/kexec-tools-1.101-kdump.patch

7) Configure the package, as follows:

   ./configure

8) Compile the package, as follows:

   make

9) Install the package, as follows:

   make install


Download and build the system and dump-capture kernels
------------------------------------------------------

Download the mainline (vanilla) kernel source code (2.6.13-rc1 or newer)
from http://www.kernel.org. Two kernels must be built: a system kernel
and a dump-capture kernel. Use the following steps to configure these
kernels with the necessary kexec and Kdump features:

System kernel
-------------

1) Enable "kexec system call" in "Processor type and features."

   CONFIG_KEXEC=y

2) Enable "sysfs file system support" in "Filesystem" -> "Pseudo
   filesystems." This is usually enabled by default.

   CONFIG_SYSFS=y

   Note that "sysfs file system support" might not appear in the "Pseudo
   filesystems" menu if "Configure standard kernel features (for small
   systems)" is not enabled in "General Setup." In this case, check the
   .config file itself to ensure that sysfs is turned on, as follows:

   grep 'CONFIG_SYSFS' .config

3) Enable "Compile the kernel with debug info" in "Kernel hacking."

   CONFIG_DEBUG_INFO=Y

   This causes the kernel to be built with debug symbols. The dump
   analysis tools require a vmlinux with debug symbols in order to read
   and analyze a dump file.

4) Make and install the kernel and its modules. Update the boot loader
   (such as grub, yaboot, or lilo) configuration files as necessary.

5) Boot the system kernel with the boot parameter "crashkernel=Y@X",
   where Y specifies how much memory to reserve for the dump-capture kernel
   and X specifies the beginning of this reserved memory. For example,
   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
   starting at physical address 0x01000000 for the dump-capture kernel.

   On x86 and x86_64, use "crashkernel=64M@16M".

   On ppc64, use "crashkernel=128M@32M".


The dump-capture kernel
-----------------------

1) Under "General setup," append "-kdump" to the current string in
   "Local version."

2) On x86, enable high memory support under "Processor type and
   features":

   CONFIG_HIGHMEM64G=y
   or
   CONFIG_HIGHMEM4G

3) On x86 and x86_64, disable symmetric multi-processing support
   under "Processor type and features":

   CONFIG_SMP=n
   (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
   when loading the dump-capture kernel, see section "Load the Dump-capture
   Kernel".)

4) On ppc64, disable NUMA support and enable EMBEDDED support:

   CONFIG_NUMA=n
   CONFIG_EMBEDDED=y
   CONFIG_EEH=N for the dump-capture kernel

5) Enable "kernel crash dumps" support under "Processor type and
   features":

   CONFIG_CRASH_DUMP=y

6) Use a suitable value for "Physical address where the kernel is
   loaded" (under "Processor type and features"). This only appears when
   "kernel crash dumps" is enabled. By default this value is 0x1000000
   (16MB). It should be the same as X in the "crashkernel=Y@X" boot
   parameter discussed above.

   On x86 and x86_64, use "CONFIG_PHYSICAL_START=0x1000000".

   On ppc64 the value is automatically set at 32MB when
   CONFIG_CRASH_DUMP is set.

6) Optionally enable "/proc/vmcore support" under "Filesystems" ->
   "Pseudo filesystems".

   CONFIG_PROC_VMCORE=y
   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)

7) Make and install the kernel and its modules. DO NOT add this kernel
   to the boot loader configuration files.


Load the Dump-capture Kernel
============================

After booting to the system kernel, load the dump-capture kernel using
the following command:

   kexec -p <dump-capture-kernel> \
   --initrd=<initrd-for-dump-capture-kernel> --args-linux \
   --append="root=<root-dev> init 1 irqpoll"


Notes on loading the dump-capture kernel:

* <dump-capture-kernel> must be a vmlinux image (that is, an
  uncompressed ELF image). bzImage does not work at this time.

* By default, the ELF headers are stored in ELF64 format to support
  systems with more than 4GB memory. The --elf32-core-headers option can
  be used to force the generation of ELF32 headers. This is necessary
  because GDB currently cannot open vmcore files with ELF64 headers on
  32-bit systems. ELF32 headers can be used on non-PAE systems (that is,
  less than 4GB of memory).

* The "irqpoll" boot parameter reduces driver initialization failures
  due to shared interrupts in the dump-capture kernel.

* You must specify <root-dev> in the format corresponding to the root
  device name in the output of mount command.

* "init 1" boots the dump-capture kernel into single-user mode without
  networking. If you want networking, use "init 3."


Kernel Panic
============

After successfully loading the dump-capture kernel as previously
described, the system will reboot into the dump-capture kernel if a
system crash is triggered.  Trigger points are located in panic(),
die(), die_nmi() and in the sysrq handler (ALT-SysRq-c).

The following conditions will execute a crash trigger point:

If a hard lockup is detected and "NMI watchdog" is configured, the system
will boot into the dump-capture kernel ( die_nmi() ).

If die() is called, and it happens to be a thread with pid 0 or 1, or die()
is called inside interrupt context or die() is called and panic_on_oops is set,
the system will boot into the dump-capture kernel.

On powererpc systems when a soft-reset is generated, die() is called by all cpus and the system system will boot into the dump-capture kernel.

For testing purposes, you can trigger a crash by using "ALT-SysRq-c",
"echo c > /proc/sysrq-trigger or write a module to force the panic.

Write Out the Dump File
=======================

After the dump-capture kernel is booted, write out the dump file with
the following command:

   cp /proc/vmcore <dump-file>

You can also access dumped memory as a /dev/oldmem device for a linear
and raw view. To create the device, use the following command:

    mknod /dev/oldmem c 1 12

Use the dd command with suitable options for count, bs, and skip to
access specific portions of the dump.

To see the entire memory, use the following command:

   dd if=/dev/oldmem of=oldmem.001


Analysis
========

Before analyzing the dump image, you should reboot into a stable kernel.

You can do limited analysis using GDB on the dump file copied out of
/proc/vmcore. Use the debug vmlinux built with -g and run the following
command:

   gdb vmlinux <dump-file>

Stack trace for the task on processor 0, register display, and memory
display work fine.

Note: GDB cannot analyze core files generated in ELF64 format for x86.
On systems with a maximum of 4GB of memory, you can generate
ELF32-format headers using the --elf32-core-headers kernel option on the
dump kernel.

You can also use the Crash utility to analyze dump files in Kdump
format. Crash is available on Dave Anderson's site at the following URL:

   http://people.redhat.com/~anderson/


To Do
=====

1) Provide a kernel pages filtering mechanism, so core file size is not
   extreme on systems with huge memory banks.

2) Relocatable kernel can help in maintaining multiple kernels for
   crash_dump, and the same kernel as the system kernel can be used to
   capture the dump.


Contact
=======

Vivek Goyal (vgoyal@in.ibm.com)
Maneesh Soni (maneesh@in.ibm.com)


Trademark
=========

Linux is a trademark of Linus Torvalds in the United States, other
countries, or both.
