[lkml]   [2007]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[RFC][PATCH 0/2 -mm] kexec based hibernation -v3
    Kexec base hibernation has some potential advantages over uswsusp and
    TuxOnIce (suspend2). Some most obvious advantages are:

    1. The hibernation image size can exceed half of memory size easily.

    2. The hibernation image can be written to and read from almost
    anywhere, such as USB disk, NFS.

    3. It is possible to eliminate freezer from kexec based hibernation

    4. Based on kexec/kdump implementation, the kernel code needed is

    This patch set implements the kexec based hibernation. The kernel
    functionality added are as follow:

    1. Jumping between the kexeced kernel and the original kernel. This is
    used by hibernation to save/load necessary state in original kernel
    and jumping back to original kernel after restore the memory of
    original kernel.

    2. Add writing support to /dev/oldmem. This is used by hibernation to
    restore the memory of original kernel.

    The hibernation procedure with the patch set is as follow:

    1. Boot a kernel A

    2. Work under kernel A

    3. Kexec another kernel B (crash dump enabled) in kernel A.

    4. Save the memory image of kernel A through crash dump (such as "cp
    /proc/vmcore ~"). Save the "jump back entry".

    5. Shutdown or reboot

    The restore process with the patch set is as follow:

    1. Boot a kernel C (crash dump enabled), the memory area used by
    kernel C must be a subset of memory area used by kernel B.

    2. Restore the memory image of kernel A through /dev/oldmem. Restore
    the "jump back entry".

    3. Jump from kernel C back to kernel A

    4. Continue work under kernel A

    The following user-space tools are needed to implement hibernation and

    1. kexec-tools needs to be patched to support kexec jump. The patches
    and the precompiled kexec can be download from the following URL:

    2. Memory image saving tool. Currently, the memory image saving is
    done through: "cp /proc/vmcore <image file>". This will save all
    memory pages of original kernel including the free pages. Maybe the
    crash dump tool "makedumpfile" can be used for this, but it has not
    been tested.

    3. Memory image restore tool. A simplest memory image restoring tool
    named "krestore" is implemented. It can be downloaded from the
    following URL:

    Known issues:

    1. The CONFIG_ACPI must be turned off to make kexec jump work. Because
    ACPI will put devices into low power state, the kexeced kernel can
    not be booted properly under it. This constrains can be eliminated
    by separating the suspend method and hibernate method of the
    devices as proposed earlier in the LKML.

    2. The setup of hibernation/restore is fairly complex. I will continue
    working on simplifying.

    3. Memory pages including free pages of kernel A are saved. I think
    the "makedumpfile" tool can be used to exclude "free pages", but I
    have not tested it.

    Now, only the i386 architecture is supported. The patch is based on
    Linux kernel 2.6.23-rc6-mm1, and has been tested on my IBM T42.


    1. Compile kernel with following options selected:

    CONFIG_RELOCATABLE=y # not needed strictly, but it is more convenient with it
    CONFIG_CRASH_DUMP=y # only needed by kexeced kernel to save/restore memory image

    2. Download the kexec-tools-testing git tree, apply the kexec-tools
    kjump patches (or download the source tar ball directly) and

    3. Download and compile the krestore tool.

    4. Prepare 2 root partition used by kernel A and kernel B/C, referred
    as /dev/hda, /dev/hdb in following text. This is not strictly
    necessary, I use this scheme for testing during development.

    5. Boot kernel compiled for normal usage (kernal A).

    6. Load kernel compiled for hibernating/restore usage (kernel B) with
    kexec, the same kernel as that of 5 can be used if

    The --elf64-core-headers should be specified in command line of
    kexec, because only the 64bit ELF is supported by krestore tool.

    For example, the shell command line can be as follow:

    kexec -p -n /boot/bzImage --mem-min=0x100000 --mem-max=0xffffff
    --elf64-core-headers --append="root=/dev/hdb single"

    7. Jump to the hibernating kernel (kernel B) with following shell
    command line:

    kexec -j

    8. In the hibernating kernel (kernel B), the memory image of
    hibernated kernel (kernel A) can be saved as follow:

    cp /proc/vmcore .
    cp /sys/kernel/kexec_jump_back_entry .

    9. Shutdown or reboot in hibernating kernel (kernel B).

    10. Boot kernel (kernel C) compiled for hibernating/restore usage on
    the root file system /dev/hdb in memory range of kernel B.

    For example, the following kernel command line parameters can be

    root=/dev/hdb single memmap=exactmap memmap=640K@0K memmap=15M@1M

    11. In restore kernel (kernel C), the memory image of kernel A can be
    restored as follow:

    cp kexec_jump_back_entry /sys/kernel/kexec_jump_back_entry
    krestore vmcore

    12. Jump back to hibernated kernel (kernel A)

    kexec -b

    Best Regards,
    Huang Ying
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-09-20 07:53    [W:0.029 / U:22.436 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site