Since the original Software Suspend code was written by Gabor Kuti and Pavel Machek back in 1998, four different implementations have been created for the 2.6 kernel, all forks of the same original codebase. Here is a quick comparison between the three that still exist. The first column refers to CONFIG_SOFTWARE_SUSPEND in the 2.6 kernel. pmdisk has been merged back into the original “swsusp” implementation in the kernel, and hence is no longer listed here. The second column refers to what is now commonly called “Suspend2” and is what this site largely deals with. The third is userspace swsusp, developed by Rafael Wysocki.
Name | swsusp | Suspend2 | uswsusp |
Available in kernel | 2.6.x | patch against 2.6.x | since 2.6.17 |
Kernel config option | CONFIG_SOFTWARE_SUSPEND | CONFIG_SUSPEND2 | CONFIG_SOFTWARE_SUSPEND |
Principle author | Pavel Machek | Nigel Cunningham | Rafael Wysocki |
PM subsystem required | none | none | none |
Telling kernel at boot where to save image | resume=/dev/hda# | resume|resume2=<file:|swap:>/dev/[node]<:sector></file:|swap:> | |
How to activate suspend | echo -n disk > /sys/power/state | echo > /sys/power/suspend2/do_suspend or echo disk > /sys/power/state if replacing swsusp is enabled. | Userspace program |
Telling kernel not to try and resume in case of a problem | noresume | noresume2 and noresume if replacing swsusp is enabled. | ? |
Architecture support | i386, ppc, x86_64, ia64 | i386, ppc, x86_64, ia64 | i386, ppc, x86_64, ia64 |
Max. Image size | 1/2 memory | See below | 1/2 memory |
Highmem support | Yes (up to 4GB) | Yes (up to 4GB) | Yes (up to 4GB) |
Discontiguous memory support | Yes | Yes | Yes |
SMP support | Yes | Yes | Yes |
Preemption support | Yes | Yes | Yes |
Compression | No | via cryptoapi – LZF recommended | Yes, with libraries |
Encryption | No | directly via cryptoapi, or by writing to dm-crypt partition | With libraries |
Suspend-to-swapfile support | No | Yes | Yes? |
Suspend-to-multiple swap partitions/files | No | Yes | No |
Suspend-to-file support | No | Yes | No |
Modular support | No | Yes (post 2.2.9) | No |
Initrd support (needed for LVM/dm-crypt) | Yes | Yes | Required |
UML support | No | No | No |
Suspend-over-NFS support | No | No (also planned 😉 | No |
Suspend2 saves the image in two parts. The first part consists of the page cache, and is generally 70%+ of the memory in use. Suspend2 saves this first, since it’s not needed while saving the remainder. It then makes an atomic copy of the remainder, using the pages previously saved, and stores the atomic copy. Working in this way, Suspend2 can normally save a full image of memory. Only if the page cache is smaller than 50% and there is no other free memory will Suspend2 be unable to save a full image of memory.