How to Create and Manage swap space in Linux

Introducing swap space concepts

A swap space is an area of a disk under the control of the Linux kernel memory management subsystem. The kernel uses swap space to supplement the system RAM by holding inactive pages of memory. The combined system RAM plus swap space is called virtual memory.

When the memory usage on a system exceeds a defined limit, the kernel searches through RAM looking for idle memory pages assigned to processes. The kernel writes the idle pages to the swap area and reassigns the RAM pages to other processes. If a program requires access to a page on disk, the kernel locates another idle page of memory, writes it to disk, then recalls the needed page from the swap area.

Because swap areas reside on disk, swap is slow when compared with RAM. While it is used to augment system RAM, you should not consider swap space as a sustainable solution for insufficient RAM for your workload.

Sizing the Swap Space

Administrators should size the swap space based on the memory workload on the system. Application vendors sometimes provide recommendations on that subject. The following table provides some guidance based on the total amount of physical memory.

RAM and Swap Space Recommendations

2 GiB or less Twice the RAM Three times the RAM
Between 2 GiB and 8 GiB Same as RAM Twice the RAM
Between 8 GiB and 64 GiB At least 4 GiB 1.5 times the RAM
More than 64 GiB At least 4 GiB Hibernation is not recommended

The laptop and desktop hibernation function uses the swap space to save the RAM contents before powering off the system. When you turn the system back on, the kernel restores the RAM contents from the swap space and does not need a complete boot. For those systems, the swap space needs to be greater than the amount of RAM. The Knowledgebase article in the Reference section at the end of this section gives more guidance on sizing the swap space.

Creating a swap space

To create a swap space, you need to perform the following:

  • Create a partition with a file system type of linux-swap.
  • Place a swap signature on the device.

Creating a Swap Partition

Use parted to create a partition of the desired size and set its file system type to linux-swap. In the past, tools looked at the partition file system type to determine if the device should be activated; however, that is no longer the case. Even though utilities no longer use the partition file system type, setting that type allows administrators to quickly determine the partition’s purpose.

The following example creates a 256 MB partition.

[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
1       1049kB  1001MB  1000MB               data

(parted) mkpart
Partition name?  []? swap1
File system type?  [ext2]? linux-swap
Start? 1001MB
End? 1257MB
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name   Flags
1       1049kB  1001MB  1000MB                  data
2       1001MB  1257MB  256MB   linux-swap(v1) swap1

(parted) quit
Information: You may need to update /etc/fstab.

After creating the partition, run the udevadm settle command. This command waits for the system to detect the new partition and to create the associated device file in /dev. It only returns when it is done.

[root@host ~]# udevadm settle
[root@host ~]#

Formatting the Device

The mkswap command applies a swap signature to the device. Unlike other formatting utilities, mkswap writes a single block of data at the beginning of the device, leaving the rest of the device unformatted so the kernel can use it for storing memory pages.

[root@host ~]# mkswap /dev/vdb2
Setting up swapspace version 1, size = 244 MiB (255848448 bytes)
no label, UUID=39e2667a-9458-42fe-9665-c5c854605881

Activating a swap space

You can use the swapon command to activate a formatted swap space. Use swapon with the device as a parameter, or use swapon -a to activate all the swap spaces listed in the /etc/fstab file. Use the swapon –show and free commands to inspect the available swap spaces.

[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1873036      134688     1536436       16748      201912     1576044
Swap:             0           0           0
[root@host ~]# swapon /dev/vdb2

[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1873036      135044     1536040       16748      201952     1575680
Swap:        249852           0      249852

You can deactivate a swap space using the swapoff command. If the swap space has pages written to it, swapoff tries to move those pages to other active swap spaces or back into memory. If it cannot write data to other places, the swapoff command fails with an error, and the swap space stays active.

Activating Swap Space Persistently

To activate a swap space at every boot, place an entry in the /etc/fstab file. The example below shows a typical line in /etc/fstab based on the swap space created above.

UUID=39e2667a-9458-42fe-9665-c5c854605881   swap   swap   defaults   0 0

The example uses the UUID as the first field. When you format the device, the mkswap command displays that UUID. If you lost the output of mkswap, use the lsblk –fs command. As an alternative, you can also use the device name in the first field.

  • The second field is typically reserved for the mount point. However, for swap devices, which are not accessible through the directory structure, this field takes the placeholder value swap.
  • The third field is the file system type. The file system type for swap space is swap.
  • The fourth field is for options. The example uses the **defaults **option. The **defaults **option includes the mount option auto, which means activate the swap space automatically at system boot.
  • The final two fields are the **dump **flag and **fsck **order. Swap spaces require neither backing up nor file-system checking and so these fields should be set to zero.

When you add or remove an entry in the **/etc/fstab **file, run the **systemctl daemon-reload **command, or reboot the server, for systemd to register the new configuration.

[root@host ~]# systemctl daemon-reload

Setting the Swap Space Priority

By default, the system uses swap spaces in series, meaning that the kernel uses the first activated swap space until it is full, then it starts using the second swap space. However, you can define a priority for each swap space to force that order.

To set the priority, use the pri option in /etc/fstab. The kernel uses the swap space with the highest priority first. The default priority is -2.

The following example shows three swap spaces defined in /etc/fstab. The kernel uses the last entry first, with pri=10. When that space is full, it uses the second entry, with pri=4. Finally, it uses the first entry, which has a default priority of -2.

UUID=af30cbb0-3866-466a-825a-58889a49ef33   swap   swap   defaults  0 0
UUID=39e2667a-9458-42fe-9665-c5c854605881   swap   swap   pri=4     0 0
UUID=fbd7fa60-b781-44a8-961b-37ac3ef572bf   swap   swap   pri=10    0 0

Use swapon –show to display the swap space priorities. When swap spaces have the same priority, the kernel writes to them in a round-robin fashion.