Khi cài Linux, quy trình thiết lập có thể thêm phân vùng swap vào ổ cứng cùng với phân vùng cho Linux. Nhưng phân vùng swap này dùng cho gì và có thực sự cần thiết không?
Swap là gì?
Khi hệ điều hành đa nhiệm hết bộ nhớ vật lý, nó không thể khởi động tiến trình mới hoặc cấp phát thêm bộ nhớ cho tiến trình hiện có. Để giải quyết, một khối không gian đặc biệt trên lưu trữ cục bộ (thường là ổ cứng) được dành riêng làm khu vực giữ tạm cho tiến trình không chạy. OS "swap" tiến trình không hoạt động ra khỏi bộ nhớ và vào ổ cứng. Điều này giải phóng bộ nhớ cho công việc mới. Khi tiến trình không hoạt động trở nên hoạt động lại, nó sẽ được swap ngược từ lưu trữ cục bộ về bộ nhớ. Thủ tục này gọi là swapping.
Không gian swap có thực sự cần thiết?
Không gian swap có cần thiết về mặt kỹ thuật? Không. Linux hoạt động không có nó và trong một số tình huống, như giải pháp nhúng, Linux chạy không swap. Nếu OS rơi vào tình huống không đủ bộ nhớ, nó sẽ panic và dừng. Nếu có đủ RAM vật lý, máy chạy không vấn đề.
Không gian swap có cần thiết thực tế? Có. Mặc dù swapping làm chậm máy (đọc/ghi ổ cứng chậm hơn truy cập RAM) và có nhiều RAM vật lý là giải pháp tốt nhất tránh swapping, có tình huống hợp lý swapping mong muốn. Ví dụ, khi boot hệ thống, có tiến trình chạy (tiêu thụ bộ nhớ) nhưng sau đó ngủ hiệu quả lâu dài. Hoặc bộ nhớ được cấp phát, ghi vào và không bao giờ dùng lại. Trong tình huống này, thuật toán swapping sẽ bắt đầu di chuyển bộ nhớ này sang ổ cứng và giải phóng bộ nhớ hệ thống quý giá. Điều này thực sự đảm bảo lượng RAM tối đa luôn sẵn sàng và tăng hiệu suất.
Trên máy không đủ RAM vật lý cho mọi thứ ở trong bộ nhớ, dùng swap space là thiết yếu!
Để đầy đủ, đáng nhắc Linux cũng có subsystem Out-Of-Memory Killer (OOM), thay vì dừng kernel khi hết bộ nhớ, sẽ bắt đầu kill tiến trình để giải phóng tài nguyên. Hành động có thể cấu hình.
Nên cấp bao nhiêu không gian swap?
Không có quy tắc tuyệt đối và vì không gian ổ cứng rẻ (USD/GiB) tốt hơn cấp quá nhiều hơn quá ít. Quy tắc ngón tay cái, bạn nên có hai hoặc ba lần không gian swap so với bộ nhớ vật lý.
Thêm swap mà không mở rộng phân vùng swap
Có hai cách thêm swap space vào hệ thống mà không thay đổi phân vùng swap hiện có. Cách một dùng phân vùng swap trên ổ khác, cách hai dùng swap file.
Để dùng ổ cứng khác, tạo partition loại "Linux swap" (mã 82) rồi chạy lệnh "mkswap" chuẩn bị swap space:
mkswap /dev/sdb2
Nơi /dev/sdb2 là tên partition bạn tạo. Để dùng swap space ngay, dùng lệnh "swapon":
swapon /dev/sdb2
Dùng "swapon -s" lấy danh sách swap space đang dùng. Để vĩnh viễn thêm swap vào hệ thống, bạn chỉnh file /etc/fstab thêm dòng như:
/dev/sdb2 none swap sw 0 0
Nếu hệ thống dùng unique identifier đặt tên ổ, dùng lệnh blkid lấy danh sách id thiết bị. Dòng mount swap trong /etc/fstab sẽ trông như:
UUID=036da155-1ea1-4392-b8d4-700f65aa1ead none swap sw 0 0
Để dùng file cho swap, tạo file trống lớn (dùng dd) trên filesystem bạn muốn dùng cho swapping. Ví dụ, tạo file 1GB, gõ:
dd if=/dev/zero of=/store/swapfile bs=1024 count=1048576
Nơi /store/swapfile là đường dẫn đến swap file trên filesystem mong muốn.
Giống partition swap thêm, file bây giờ cần chuẩn bị với mkswap rồi dùng với swapon. Nó cũng cần thêm vào /etc/fstab. Thủ tục giống hệt trên, nhưng dùng /store/swapfile thay /dev/sdb2 làm tham số swap space.
Swappiness (Độ chủ động swap)
Kernel Linux có thể điều chỉnh để xác định mức độ tích cực nó cố gắng swap tiến trình ra khỏi bộ nhớ. Xu hướng này được kiểm soát bởi biến kernel gọi là swappiness. swappiness 0 nghĩa kernel tránh swap nhiều nhất có thể, trong khi 100 nghĩa kernel tích cực dùng swap space. Cài mặc định nhiều distro là 60. Có thể thay đổi số động bằng lệnh:
sudo sysctl vm.swappiness=10
Để đặt giá trị vĩnh viễn, bạn cần thay đổi (hoặc thêm, nếu không tồn tại) biến vm.swappiness trong file /etc/sysctl.conf.
Cho chúng tôi biết nếu bạn có câu hỏi về swap trong Linux.
Bài này xuất bản lần đầu Dec 2013 và cập nhật Aug 2020.