Swap là vùng RAM ảo trên đĩa cứng, cho phép CPU sử dụng khi lượng RAM vật lý không còn đủ. Swap có thể được tạo ra từ 1 phân vùng (swap partition) hoặc 1 file (swap file).

Bài này hướng dẫn bạn cách tạo swap file.

Tạo swap file

Trước khi thực hiện tạo swap, các bạn có thể dùng các lệnh freedf để kiểm tra thông số RAM và ổ cứng.

free -m
df -h

Kết quả như hình dưới:

Kiểm tra RAM và hard drive

Nếu máy chưa có swap thì chúng ta sẽ tạo ra bằng các lệnh sau:

# Create 2GB swap file:  
sudo fallocate -l 2G /swapfile

# Check it: 
ls -lh /swapfile

# Chmod it: 
sudo chmod 600 /swapfile

# Setup swap space: 
sudo mkswap /swapfile

# Enable swap: 
sudo swapon /swapfile

# Check swap space:  
swapon --show  # hoặc swapon -s

Bây giờ swap đã sẵn sàng để sử dụng. Các bạn có thể kiểm tra lại bằng lệnh free -m.

Để giúp hệ điều hành nhận ra phân vùng swap sau khi restart, chúng ta thêm vào file fstab 1 dòng lệnh mount tự động:

sudo bash -c 'echo "/swapfile   none    swap    sw    0   0" >> /etc/fstab'

Chọn dung lượng swap

Dung lượng swap phụ thuộc vào lượng RAM vật lý, hệ điều hành và cơ chế hoạt động của chúng. Có 1 công thức khá phổ biến như sau:

if RAM <= 2GB:
  SWAP = RAM * 2
else:
  SWAP = RAM + 2GB

Tuy nhiên có vẻ công thức trên dành cho các máy tiêu thụ nhiều bộ nhớ, còn thực tế hệ điều hành rất hiếm khi sử dụng tới swap lớn như vậy. Kinh nghiệm cho thấy với RAM từ 4G đến 16G thì swap chỉ cần khoảng 1 đến 4G là đủ, tùy theo quan sát hiệu năng hệ thống.

Bảng dưới đây dành cho Ubuntu, nhưng có thể tham khảo được trong nhiều trường hợp khác:

RAM Size Swap Size (hibernation off) Swap size (hibernation on)
256MB 256MB 512MB
512MB 512MB 1GB
1GB 1GB 2GB
2GB 1GB 3GB
3GB 2GB 5GB
4GB 2GB 6GB
6GB 2GB 8GB
8GB 3GB 11GB
12GB 3GB 15GB
16GB 4GB 20GB
24GB 5GB 29GB
32GB 6GB 38GB
64GB 8GB 72GB
128GB 11GB 139GB

Tối ưu hóa swap

swappiness

Swappiness là tham số thiết lập cấu hình cho hệ điều hành sử dụng swap nhiều hay ít.

Kiểm tra bằng lệnh:

sysctl vm.swappiness

Swappiness có thể nhận giá trị từ 0 đến 200, mặc định thường là 60. Value thấp nghĩa là OS sẽ tránh dùng tới swap, và ngược lại, value cao nghĩa là cố gắng tận dụng swap.

Nếu máy của bạn có nhiều RAM thì nên set swappiness thấp xuống, ví dụ 10:

sudo sysctl vm.swappiness=10

VFS cache pressure

VFS cache pressure là tỷ lệ thu hồi bộ nhớ từ virtual filesystem cache đang dùng cho việc lưu tạm các thông tin liên quan tới directory và inode objects.

Kiểm tra bằng lệnh:

sysctl vm.vfs_cache_pressure

Mặc định giá trị của vfs_cache_pressure là 100.

vfs_cache_pressure = 0 nghĩa là OS không thu hồi memory, và hệ thống sẽ nhanh chóng rơi vào trạng thái tràn bộ nhớ (out of memory).

Ngược lại, nếu tăng vfs_cache_pressure lên trên 100, hệ thống sẽ liên tục đi thu hồi memory làm cho performance giảm xuống, vì cần phải đóng băng một số tiến trình để tìm kiếm những vùng nhớ có thể giải phóng được.

Tắt swap và loại bỏ swap file

sudo swapoff /swapfile
sudo rm -f /swapfile