linux/Documentation/kdump/kdump.txt
<<
>>
Prefs
   1================================================================
   2Documentation for Kdump - The kexec-based Crash Dumping Solution
   3================================================================
   4
   5This document includes overview, setup and installation, and analysis
   6information.
   7
   8Overview
   9========
  10
  11Kdump uses kexec to quickly boot to a dump-capture kernel whenever a
  12dump of the system kernel's memory needs to be taken (for example, when
  13the system panics). The system kernel's memory image is preserved across
  14the reboot and is accessible to the dump-capture kernel.
  15
  16You can use common commands, such as cp and scp, to copy the
  17memory image to a dump file on the local disk, or across the network to
  18a remote system.
  19
  20Kdump and kexec are currently supported on the x86, x86_64, ppc64 and ia64
  21architectures.
  22
  23When the system kernel boots, it reserves a small section of memory for
  24the dump-capture kernel. This ensures that ongoing Direct Memory Access
  25(DMA) from the system kernel does not corrupt the dump-capture kernel.
  26The kexec -p command loads the dump-capture kernel into this reserved
  27memory.
  28
  29On x86 machines, the first 640 KB of physical memory is needed to boot,
  30regardless of where the kernel loads. Therefore, kexec backs up this
  31region just before rebooting into the dump-capture kernel.
  32
  33Similarly on PPC64 machines first 32KB of physical memory is needed for
  34booting regardless of where the kernel is loaded and to support 64K page
  35size kexec backs up the first 64KB memory.
  36
  37All of the necessary information about the system kernel's core image is
  38encoded in the ELF format, and stored in a reserved area of memory
  39before a crash. The physical address of the start of the ELF header is
  40passed to the dump-capture kernel through the elfcorehdr= boot
  41parameter.
  42
  43With the dump-capture kernel, you can access the memory image, or "old
  44memory," in two ways:
  45
  46- Through a /dev/oldmem device interface. A capture utility can read the
  47  device file and write out the memory in raw format. This is a raw dump
  48  of memory. Analysis and capture tools must be intelligent enough to
  49  determine where to look for the right information.
  50
  51- Through /proc/vmcore. This exports the dump as an ELF-format file that
  52  you can write out using file copy commands such as cp or scp. Further,
  53  you can use analysis tools such as the GNU Debugger (GDB) and the Crash
  54  tool to debug the dump file. This method ensures that the dump pages are
  55  correctly ordered.
  56
  57
  58Setup and Installation
  59======================
  60
  61Install kexec-tools
  62-------------------
  63
  641) Login as the root user.
  65
  662) Download the kexec-tools user-space package from the following URL:
  67
  68http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/kexec-tools.tar.gz
  69
  70This is a symlink to the latest version.
  71
  72The latest kexec-tools git tree is available at:
  73
  74git://git.kernel.org/pub/scm/linux/kernel/git/horms/kexec-tools.git
  75or
  76http://www.kernel.org/git/?p=linux/kernel/git/horms/kexec-tools.git
  77
  78More information about kexec-tools can be found at
  79http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/README.html
  80
  813) Unpack the tarball with the tar command, as follows:
  82
  83   tar xvpzf kexec-tools.tar.gz
  84
  854) Change to the kexec-tools directory, as follows:
  86
  87   cd kexec-tools-VERSION
  88
  895) Configure the package, as follows:
  90
  91   ./configure
  92
  936) Compile the package, as follows:
  94
  95   make
  96
  977) Install the package, as follows:
  98
  99   make install
 100
 101
 102Build the system and dump-capture kernels
 103-----------------------------------------
 104There are two possible methods of using Kdump.
 105
 1061) Build a separate custom dump-capture kernel for capturing the
 107   kernel core dump.
 108
 1092) Or use the system kernel binary itself as dump-capture kernel and there is
 110   no need to build a separate dump-capture kernel. This is possible
 111   only with the architecutres which support a relocatable kernel. As
 112   of today, i386, x86_64 and ia64 architectures support relocatable kernel.
 113
 114Building a relocatable kernel is advantageous from the point of view that
 115one does not have to build a second kernel for capturing the dump. But
 116at the same time one might want to build a custom dump capture kernel
 117suitable to his needs.
 118
 119Following are the configuration setting required for system and
 120dump-capture kernels for enabling kdump support.
 121
 122System kernel config options
 123----------------------------
 124
 1251) Enable "kexec system call" in "Processor type and features."
 126
 127   CONFIG_KEXEC=y
 128
 1292) Enable "sysfs file system support" in "Filesystem" -> "Pseudo
 130   filesystems." This is usually enabled by default.
 131
 132   CONFIG_SYSFS=y
 133
 134   Note that "sysfs file system support" might not appear in the "Pseudo
 135   filesystems" menu if "Configure standard kernel features (for small
 136   systems)" is not enabled in "General Setup." In this case, check the
 137   .config file itself to ensure that sysfs is turned on, as follows:
 138
 139   grep 'CONFIG_SYSFS' .config
 140
 1413) Enable "Compile the kernel with debug info" in "Kernel hacking."
 142
 143   CONFIG_DEBUG_INFO=Y
 144
 145   This causes the kernel to be built with debug symbols. The dump
 146   analysis tools require a vmlinux with debug symbols in order to read
 147   and analyze a dump file.
 148
 149Dump-capture kernel config options (Arch Independent)
 150-----------------------------------------------------
 151
 1521) Enable "kernel crash dumps" support under "Processor type and
 153   features":
 154
 155   CONFIG_CRASH_DUMP=y
 156
 1572) Enable "/proc/vmcore support" under "Filesystems" -> "Pseudo filesystems".
 158
 159   CONFIG_PROC_VMCORE=y
 160   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)
 161
 162Dump-capture kernel config options (Arch Dependent, i386 and x86_64)
 163--------------------------------------------------------------------
 164
 1651) On i386, enable high memory support under "Processor type and
 166   features":
 167
 168   CONFIG_HIGHMEM64G=y
 169   or
 170   CONFIG_HIGHMEM4G
 171
 1722) On i386 and x86_64, disable symmetric multi-processing support
 173   under "Processor type and features":
 174
 175   CONFIG_SMP=n
 176
 177   (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
 178   when loading the dump-capture kernel, see section "Load the Dump-capture
 179   Kernel".)
 180
 1813) If one wants to build and use a relocatable kernel,
 182   Enable "Build a relocatable kernel" support under "Processor type and
 183   features"
 184
 185   CONFIG_RELOCATABLE=y
 186
 1874) Use a suitable value for "Physical address where the kernel is
 188   loaded" (under "Processor type and features"). This only appears when
 189   "kernel crash dumps" is enabled. A suitable value depends upon
 190   whether kernel is relocatable or not.
 191
 192   If you are using a relocatable kernel use CONFIG_PHYSICAL_START=0x100000
 193   This will compile the kernel for physical address 1MB, but given the fact
 194   kernel is relocatable, it can be run from any physical address hence
 195   kexec boot loader will load it in memory region reserved for dump-capture
 196   kernel.
 197
 198   Otherwise it should be the start of memory region reserved for
 199   second kernel using boot parameter "crashkernel=Y@X". Here X is
 200   start of memory region reserved for dump-capture kernel.
 201   Generally X is 16MB (0x1000000). So you can set
 202   CONFIG_PHYSICAL_START=0x1000000
 203
 2045) Make and install the kernel and its modules. DO NOT add this kernel
 205   to the boot loader configuration files.
 206
 207Dump-capture kernel config options (Arch Dependent, ppc64)
 208----------------------------------------------------------
 209
 210*  Make and install the kernel and its modules. DO NOT add this kernel
 211   to the boot loader configuration files.
 212
 213Dump-capture kernel config options (Arch Dependent, ia64)
 214----------------------------------------------------------
 215
 216- No specific options are required to create a dump-capture kernel
 217  for ia64, other than those specified in the arch idependent section
 218  above. This means that it is possible to use the system kernel
 219  as a dump-capture kernel if desired.
 220
 221  The crashkernel region can be automatically placed by the system
 222  kernel at run time. This is done by specifying the base address as 0,
 223  or omitting it all together.
 224
 225  crashkernel=256M@0
 226  or
 227  crashkernel=256M
 228
 229  If the start address is specified, note that the start address of the
 230  kernel will be aligned to 64Mb, so if the start address is not then
 231  any space below the alignment point will be wasted.
 232
 233
 234Extended crashkernel syntax
 235===========================
 236
 237While the "crashkernel=size[@offset]" syntax is sufficient for most
 238configurations, sometimes it's handy to have the reserved memory dependent
 239on the value of System RAM -- that's mostly for distributors that pre-setup
 240the kernel command line to avoid a unbootable system after some memory has
 241been removed from the machine.
 242
 243The syntax is:
 244
 245    crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset]
 246    range=start-[end]
 247
 248    'start' is inclusive and 'end' is exclusive.
 249
 250For example:
 251
 252    crashkernel=512M-2G:64M,2G-:128M
 253
 254This would mean:
 255
 256    1) if the RAM is smaller than 512M, then don't reserve anything
 257       (this is the "rescue" case)
 258    2) if the RAM size is between 512M and 2G (exclusive), then reserve 64M
 259    3) if the RAM size is larger than 2G, then reserve 128M
 260
 261
 262
 263Boot into System Kernel
 264=======================
 265
 2661) Update the boot loader (such as grub, yaboot, or lilo) configuration
 267   files as necessary.
 268
 2692) Boot the system kernel with the boot parameter "crashkernel=Y@X",
 270   where Y specifies how much memory to reserve for the dump-capture kernel
 271   and X specifies the beginning of this reserved memory. For example,
 272   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
 273   starting at physical address 0x01000000 (16MB) for the dump-capture kernel.
 274
 275   On x86 and x86_64, use "crashkernel=64M@16M".
 276
 277   On ppc64, use "crashkernel=128M@32M".
 278
 279   On ia64, 256M@256M is a generous value that typically works.
 280   The region may be automatically placed on ia64, see the
 281   dump-capture kernel config option notes above.
 282
 283Load the Dump-capture Kernel
 284============================
 285
 286After booting to the system kernel, dump-capture kernel needs to be
 287loaded.
 288
 289Based on the architecture and type of image (relocatable or not), one
 290can choose to load the uncompressed vmlinux or compressed bzImage/vmlinuz
 291of dump-capture kernel. Following is the summary.
 292
 293For i386 and x86_64:
 294        - Use vmlinux if kernel is not relocatable.
 295        - Use bzImage/vmlinuz if kernel is relocatable.
 296For ppc64:
 297        - Use vmlinux
 298For ia64:
 299        - Use vmlinux or vmlinuz.gz
 300
 301
 302If you are using a uncompressed vmlinux image then use following command
 303to load dump-capture kernel.
 304
 305   kexec -p <dump-capture-kernel-vmlinux-image> \
 306   --initrd=<initrd-for-dump-capture-kernel> --args-linux \
 307   --append="root=<root-dev> <arch-specific-options>"
 308
 309If you are using a compressed bzImage/vmlinuz, then use following command
 310to load dump-capture kernel.
 311
 312   kexec -p <dump-capture-kernel-bzImage> \
 313   --initrd=<initrd-for-dump-capture-kernel> \
 314   --append="root=<root-dev> <arch-specific-options>"
 315
 316Please note, that --args-linux does not need to be specified for ia64.
 317It is planned to make this a no-op on that architecture, but for now
 318it should be omitted
 319
 320Following are the arch specific command line options to be used while
 321loading dump-capture kernel.
 322
 323For i386, x86_64 and ia64:
 324        "1 irqpoll maxcpus=1 reset_devices"
 325
 326For ppc64:
 327        "1 maxcpus=1 noirqdistrib reset_devices"
 328
 329
 330Notes on loading the dump-capture kernel:
 331
 332* By default, the ELF headers are stored in ELF64 format to support
 333  systems with more than 4GB memory. On i386, kexec automatically checks if
 334  the physical RAM size exceeds the 4 GB limit and if not, uses ELF32.
 335  So, on non-PAE systems, ELF32 is always used.
 336
 337  The --elf32-core-headers option can be used to force the generation of ELF32
 338  headers. This is necessary because GDB currently cannot open vmcore files
 339  with ELF64 headers on 32-bit systems.
 340
 341* The "irqpoll" boot parameter reduces driver initialization failures
 342  due to shared interrupts in the dump-capture kernel.
 343
 344* You must specify <root-dev> in the format corresponding to the root
 345  device name in the output of mount command.
 346
 347* Boot parameter "1" boots the dump-capture kernel into single-user
 348  mode without networking. If you want networking, use "3".
 349
 350* We generally don' have to bring up a SMP kernel just to capture the
 351  dump. Hence generally it is useful either to build a UP dump-capture
 352  kernel or specify maxcpus=1 option while loading dump-capture kernel.
 353
 354Kernel Panic
 355============
 356
 357After successfully loading the dump-capture kernel as previously
 358described, the system will reboot into the dump-capture kernel if a
 359system crash is triggered.  Trigger points are located in panic(),
 360die(), die_nmi() and in the sysrq handler (ALT-SysRq-c).
 361
 362The following conditions will execute a crash trigger point:
 363
 364If a hard lockup is detected and "NMI watchdog" is configured, the system
 365will boot into the dump-capture kernel ( die_nmi() ).
 366
 367If die() is called, and it happens to be a thread with pid 0 or 1, or die()
 368is called inside interrupt context or die() is called and panic_on_oops is set,
 369the system will boot into the dump-capture kernel.
 370
 371On powerpc systems when a soft-reset is generated, die() is called by all cpus
 372and the system will boot into the dump-capture kernel.
 373
 374For testing purposes, you can trigger a crash by using "ALT-SysRq-c",
 375"echo c > /proc/sysrq-trigger" or write a module to force the panic.
 376
 377Write Out the Dump File
 378=======================
 379
 380After the dump-capture kernel is booted, write out the dump file with
 381the following command:
 382
 383   cp /proc/vmcore <dump-file>
 384
 385You can also access dumped memory as a /dev/oldmem device for a linear
 386and raw view. To create the device, use the following command:
 387
 388    mknod /dev/oldmem c 1 12
 389
 390Use the dd command with suitable options for count, bs, and skip to
 391access specific portions of the dump.
 392
 393To see the entire memory, use the following command:
 394
 395   dd if=/dev/oldmem of=oldmem.001
 396
 397
 398Analysis
 399========
 400
 401Before analyzing the dump image, you should reboot into a stable kernel.
 402
 403You can do limited analysis using GDB on the dump file copied out of
 404/proc/vmcore. Use the debug vmlinux built with -g and run the following
 405command:
 406
 407   gdb vmlinux <dump-file>
 408
 409Stack trace for the task on processor 0, register display, and memory
 410display work fine.
 411
 412Note: GDB cannot analyze core files generated in ELF64 format for x86.
 413On systems with a maximum of 4GB of memory, you can generate
 414ELF32-format headers using the --elf32-core-headers kernel option on the
 415dump kernel.
 416
 417You can also use the Crash utility to analyze dump files in Kdump
 418format. Crash is available on Dave Anderson's site at the following URL:
 419
 420   http://people.redhat.com/~anderson/
 421
 422
 423To Do
 424=====
 425
 4261) Provide relocatable kernels for all architectures to help in maintaining
 427   multiple kernels for crash_dump, and the same kernel as the system kernel
 428   can be used to capture the dump.
 429
 430
 431Contact
 432=======
 433
 434Vivek Goyal (vgoyal@in.ibm.com)
 435Maneesh Soni (maneesh@in.ibm.com)
 436
 437
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.