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 free
và df
để kiểm tra thông số RAM và ổ cứng.
free -m
df -h
Kết quả như hình dưới:
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