When you install Linux, the setup process will likely add a swap partition to the hard disk along with the partitions for Linux itself. But what is this swap partition used for and is it really necessary?
What is swap?
When a multitasking operating system runs out of physical memory, it is unable to start new processes or allocate more memory to existing processes. To solve this problem, a special block of space on the local storage (often the hard drive) is set aside to act as a temporary holding area for processes that aren’t currently running. The OS “swaps” the inactive process out of memory and on to the hard disk. This frees up memory for new work. When the inactive process becomes active again, it will be swapped back from the local storage to the memory. This procedure is known as swapping.
Is swap space really necessary?
Is swap space technically necessary? No. Linux can work without it and in some situations, like embedded solutions, Linux can be run without swap. If the OS gets into a situation where it doesn’t have enough memory, it will panic and stop. If there is enough physical RAM, the machine will run without any problems.
Is swap space practically necessary? Yes. Although swapping slows down a computer (as reading and writing to a hard disk is much slower than accessing RAM) and having as much physical memory on board is the best solution to avoid swapping, there are legitimate situations where swapping is desirable. For example, during system boot, there can be processes that run (and so consume system memory) but then effectively sleep for very long periods of time. Or memory that is allocated, written to and then never used again. In these situations, the swapping algorithm will start to migrate this memory to the hard disk and so free up valuable system memory. This actually ensures that the maximum amount of RAM is available at all times and so increases performance.
On machines that don’t have enough physical RAM for everything to reside in memory then the use of swap space is essential!
For completeness, it is worth mentioning that Linux also has a subsystem called the Out-Of-Memory Killer (OOM), which rather than stopping the kernel when it runs out of memory, will start to kill of processes to free resources. Its actions are configurable.
How much swap space should I allocate?
There is no absolute rule and since hard disk space is cheap (dollar per Gigabyte) it is better to allocate too much than too little space. As a rule of thumb, you should have two or three times the amount of swap space as physical memory.
Adding swap without expanding the swap partition
There are two ways to add swap space to a system without altering the existing swap partition. One way is to use a swap partition on another drive, the other is to use a swap file.
To use another hard drive, create a partition of type “Linux swap” (code 82) and then run the “mkswap
” command to prepare the swap space:
mkswap /dev/sdb2
Where /dev/sdb2
is the name of the partition you created. To use the swap space immediately use the “swapon
” command:
swapon /dev/sdb2
Use “swapon -s
” to get a list of the currently used swap spaces. To permanently add the swap space to the system, you will need to edit the /etc/fstab
file and add a line similar to this:
/dev/sdb2 none swap sw 0 0
If your system is using unique identifiers to name the disks, use the blkid
command to get a list of ids for the devices. The line to mount the swap space in /etc/fstab
would then look something like this:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 0 0
To use a file for swap, create a large blank file (using dd
) on the filesystem that you want to use for swapping. For example, to create a 1GB file, type:
dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576
Where /store/swapfile
is the path to the swap file on the desired filesystem.
As with the additional swap partition, the file now needs to be prepared with mkswap
and then used with swapon
. It also needs to be added to the /etc/fstab
file. The procedure is exactly the same as above, but you need to use /store/swapfile
rather than /dev/sdb2
as the swap space parameter.
Swappiness
The Linux kernel can be tweaked to define how aggressively it should try to swap processes out of memory. This tendency is controlled by a kernel variable called swappiness
. A swappiness
of 0 means that the kernel will avoid swapping as much as possible, while 100 means the kernel will be aggressive in how it uses the swap space. The default setting for many Linux distributions is 60. It is possible to change the number dynamically using this command:
sudo sysctl vm.swappiness=10
To permanently set a value, you need to change (or add, if it doesn’t exist) the vm.swappiness
variable in the /etc/sysctl.conf
file.
Let us know if you have questions about swap in Linux.
This article was first published in Dec 2013 and was updated in Aug 2020.
Image credit: swap
Our latest tutorials delivered straight to your inbox