Swap
Swap space can take the form of a disk partition or a file. Users may create a swap space during installation or at any later time as desired. Swap space can be used for two purposes, to extend the virtual memory beyond the installed physical memory (RAM), a.k.a "enable swap", and also for suspend-to-disk support.
If it is beneficial to enable swap depends on the amount of installed physical memory, and the amount of memory required to run all the desired programs. If the amount of physical memory is less than the required amount, then it is beneficial to enable swap. This avoids out of memory conditions, where the Linux kernel OOM killer mechanism will automatically attempt to free up memory by killing processes. To increase the amount of virtual memory to the required amount, add the necessary difference as swap space. For example, if your programs require 7.5 GB of memory to run, and there are 4 GB of physical memory installed, add the difference of 3.5 GB in swap space. Add more swap space to account for future requirements. It is a matter of personal preference if you prefer programs to be killed over enabling swap. The biggest drawback to enabling swap is its lower performance, as disk drives are orders of a magnitude slower than RAM (yes, even SSDs).
Swap partition
If you followed the installation guide you'll still have some space left for partitions via LVM. Create a new partition for your swap data and format it as such, then enable it.
lvcreate -L 2048M -n lv_swap vg_sys # 2GB swap mkswap /dev/vg_sys/lv_swap swapon /dev/vg_sys/lv_swap
The UUID of the swap partition is displayed from the mkswap command upon creation. Insert the UUID into /etc/fstab
:
# Swap Partition UUID=6811af79-1bf7-44aa-b5a0-b3eb13101a53 none swap defaults 0 0
To deactivate/remove the swap partition, issue the following commands:
swapoff /dev/vg_sys/lv_swap lvremove /dev/vg_sys/lv_swap # Don't forget to remove the /etc/fstab entry.
Swap file
As an alternative to creating an entire partition, a swap file offers the ability to vary its size on-the-fly, and is more easily removed altogether. This may be especially desirable if disk space is at a premium (e.g. a modestly-sized SSD).
Some filesystems do not handle swap files well. I do not recommend using a swap file on ZFS
or Btrfs
. Stick to something simple like ext4
or xfs
.
Issue the following commands to create a 2GB swap file under /root/swapfile
and enable it permanently:
dd if=/dev/zero of=/root/swapfile bs=1M count=2048 chmod 600 /root/swapfile mkswap /root/swapfile swapon /root/swapfile
Add the file to your /etc/fstab
file so it is mounted at boot:
# Swap File /root/swapfile none swap defaults 0 0
To deactivate/remove the swap file, issue the following commands:
swapoff /root/swapfile rm -f /root/swapfile # Don't forget to remove the /etc/fstab entry.
Performance
Swap operations are usually significantly slower than directly accessing data in RAM. Disabling swap entirely to improve performance can sometimes lead to a degradation, since it decreases the memory available for VFS caches, causing more frequent and costly disk I/O.
Swap values can be adjusted to help performance:
Swappiness
The swappiness sysctl parameter represents the kernel's preference (or avoidance) of swap space. Swappiness can have a value between 0 and 100, the default value is 60. A low value causes the kernel to avoid swapping, a higher value causes the kernel to try to use swap space. Using a low value on sufficient memory is known to improve responsiveness on many systems.
To check the current swappiness value:
cat /sys/fs/cgroup/memory/memory.swappiness
To temporarily set the swappiness value:
sysctl vm.swappiness=10
To set the swappiness value permanently, edit a sysctl configuration file .
vi /etc/sysctl.d/99-sysctl.conf
vm.swappiness=10
Priority
If you have more than one swap file or swap partition you should consider assigning a priority value (0 to 32767) for each swap area. The system will use swap areas of higher priority before using swap areas of lower priority. For example, if you have a faster disk (/dev/sda
) and a slower disk (/dev/sdb
), assign a higher priority to the swap area located on the fastest device. Priorities can be assigned in /etc/fstab
via the pri
parameter:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
Or via the --priority parameter of swapon:
swapon --priority 100 /dev/sda1
If two or more areas have the same priority, and it is the highest priority available, pages are allocated on a round-robin basis between them.