All commands are run as root.
Create the swap file using either of these commands. fallocate is faster but may not work on all filesystems.
fallocate -l 32G /swap/swap0
dd if=/dev/zero of=/swap/swap0 bs=1M count=32768Next, secure and enable the swap file.
chmod 600 /swap/swap0
mkswap /swap/swap0
swapon /swap/swap0Make it permanent by an entry for the swap file to /etc/fstab.
# /etc/fstab
/swap/swap0 none swap defaults 0 0
Linux can be configured to prioritize which swap files to use. Swap files with higher priority numbers are used first.
/swap/swap0 none swap defaults,prio=1000 0 0
/swap/swap1 none swap defaults,prio=0 0 0
Swappiness controls how aggresively the kernel swaps memory from RAM. The default is 60% and a lower number is known to improve system responsiveness.
cat /proc/sys/vm/swappiness
Use sysctl to change the swappiness temporarily.
sysctl vm.swappiness=10To make it permanent, add the line vm.swappiness=10 to a sysctl configuration file.
/etc/sysctl.d/local.conf
vm.swappiness=1
touch /etc/sysctl.d/local.conf
sed -i -r '/^vm.swappiness=/D' /etc/sysctl.d/local.conf
echo 'vm.swappiness=1' >> /etc/sysctl.d/local.conf
sysctl vm.swappiness=1Swapspace is an unmaintained dynamic swap manager for Linux. It creates swap files as needed based on system memory pressure.
Zswap enables Linux to compress memory pages in response to memory pressure, thereby reducing how much memory needs to be swapped to disk.
First, check that zswap is enabled for kernel build:
cat /boot/config-* | grep ZSWAPIf so, add the appropriate kernel options to /etc/default/grub to enable it at boot.
zswap.enabled=1enables zswapzswap.compressor=lz4configures zswap to use lz4 compressionzswap.max_pool_percent=50limits zswap from using more than 50% of physical memory
# /etc/default/grub
GRUB_CMDLINE_LINUX="console=ttyS0,38400n8 elevator=noop zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=50"
Update the GRUB boot configuration using grub-mkconfig.
grub-mkconfig -o /boot/grub/grub.cfgYou may also need to load the lz4 and lz4_compress kernel modules by adding the entries to /etc/modules.
/etc/modules
# LZ4 compression support for zswap
lz4
lz4_compress
Regenerate initramfs after editing /etc/modules.
update-initramfs -uZswap should now be enabled on restart.
To check that zswap is enabled, check the system messages.
dmesg | grep 'zswap.*'Adjust these steps as necessary if using a newer version of GRUB or a different bootloader.
ZSWAP_FLAGS='zswap.enabled=1 zswap.compressor=lz4'
GRUB_CMDLINE_LINUX=$(sed -rn 's@^GRUB_CMDLINE_LINUX="\s*(.*)"$@\1@p' /etc/default/grub)
GRUB_CMDLINE_LINUX=$(echo "$GRUB_CMDLINE_LINUX" | sed -r 's/\bzswap.\w+=.+\s*\b//g')
sed -i -r 's@^(GRUB_CMDLINE_LINUX=").*(")$@\1'" $ZSWAP_FLAGS"'\2@' /etc/default/grub
sed -i -r '/^lz4(_compress)?/D' /etc/modules
cat <<EOL>> /etc/modules
lz4
lz4_compress
EOL
update-initramfs -u
echo 1 > /sys/module/zswap/parameters/enabled
echo lz4 > /sys/module/zswap/parameters/compressor
It's not /etc/modules where the lz4 module entry should be added, it's /etc/initramfs-tools/modules