#

Giới thiệu về swap space trên hệ điều hành Linux

 07/05/2022 - 11:48 Trịnh Duy Thanh

Tìm hiểu cách điều chỉnh dung lượng không gian hoán đổi (swap space) có sẵn trên hệ điều hành Linux của bạn và dung lượng bạn thực sự cần.

Có hai loại bộ nhớ cơ bản trong máy tính điển hình. Loại đầu tiên, bộ nhớ truy xuất ngẫu nhiên (RAM), được sử dụng để lưu trữ dữ liệu và chương trình trong khi chúng đang được máy tính sử dụng. Máy tính không thể sử dụng các chương trình và dữ liệu trừ khi chúng được lưu trữ trong RAM. RAM là bộ nhớ dễ bay hơi, dữ liệu được lưu trữ trong RAM sẽ bị mất nếu máy tính bị tắt.

Ổ cứng là phương tiện từ tính được sử dụng để lưu trữ lâu dài các dữ liệu và chương trình. Phương tiện từ tính không dễ bay hơi, dữ liệu được lưu trữ trên đĩa vẫn còn ngay cả khi nguồn điện được rút khỏi máy tính. CPU (central processing unit) không thể truy cập trực tiếp vào các chương trình và dữ liệu trên ổ cứng; nó phải được sao chép vào RAM trước tiên và đó là nơi CPU có thể truy cập các lệnh chương trình của nó và dữ liệu được vận hành theo các lệnh đó. Trong quá trình khởi động, máy tính sao chép các chương trình hệ điều hành cụ thể, chẳng hạn như kernelinit hoặc systemd và dữ liệu từ ổ cứng vào RAM, nơi nó được bộ xử lý (CPU) của máy tính truy cập trực tiếp.

Loại bộ nhớ thứ hai trong các hệ thống Linux hiện đại là swap space (không gian hoán đổi).

Swap space là gì?

Swap space la gi

Chức năng chính của swap space là thay thế không gian đĩa cho bộ nhớ RAM khi RAM thực đầy và cần thêm dung lượng.

Ví dụ, giả sử bạn có một hệ thống máy tính với 8GB RAM. Nếu bạn khởi động các chương trình RAM vẫn chưa bị đầy, mọi thứ đều ổn và không cần hoán đổi (swapping). Nhưng giả sử bảng tính bạn đang làm việc phát triển khi bạn thêm nhiều hàng hơn và cộng với mọi thứ khác đang chạy sẽ lấp đầy tất cả RAM. Nếu không có dung lượng không gian hoán đổi (swap space) khả dụng, bạn sẽ phải ngừng làm việc trên bảng tính cho đến khi bạn có thể giải phóng một số bộ nhớ RAM giới hạn của mình bằng cách đóng một số chương trình khác.

Kernel sử dụng một chương trình quản lý bộ nhớ để phát hiện các khối, hay còn gọi là các trang (page) của bộ nhớ trong đó nội dung không được sử dụng gần đây. Chương trình quản lý bộ nhớ hoán đổi đủ các trang bộ nhớ được sử dụng tương đối không thường xuyên này sang một phân vùng đặc biệt trên ổ cứng được chỉ định cụ thể cho “phân trang (paging)” hoặc hoán đổi (swapping). Điều này giải phóng RAM và tạo chỗ cho nhiều dữ liệu hơn được nhập vào bảng tính của bạn. Những trang bộ nhớ được hoán đổi sang ổ cứng được mã quản lý bộ nhớ kernel theo dõi và có thể được phân trang trở lại RAM nếu chúng cần thiết.

Tổng dung lượng bộ nhớ trong một máy tính Linux là dung lượng RAM cộng với không gian hoán đổi (swap space) và được gọi là bộ nhớ ảo (virtual memory).

Các loại swap space của hệ điều hành Linux

Linux cung cấp hai loại swap space. Theo mặc định, hầu hết các bản cài đặt Linux đều tạo một hoán đổi phân vùng (swap partition), nhưng cũng có thể sử dụng tệp được cấu hình đặc biệt như tệp hoán đổi (swap file). Swap partition đúng như tên gọi của nó — một phân vùng đĩa tiêu chuẩn được chỉ định làm swap space bằng lệnh mkswap.

Tệp hoán đổi (file swap) có thể được sử dụng nếu không có dung lượng đĩa trống để tạo phân vùng hoán đổi mới hoặc không gian trong volume group nơi mà logical volume có thể được tạo ra cho swap space. Đây chỉ là một tệp thông thường được tạo và phân bổ trước cho một kích thước được chỉ định. Sau đó, lệnh mkswap được chạy để cấu hình nó làm swap space. Tôi không khuyên bạn nên sử dụng tệp cho swap space trừ khi thực sự cần thiết.

Thrashing

Thrashing có thể xảy ra khi tổng bộ nhớ ảo (virtual memory) cả RAM và swap space gần đầy. Hệ thống dành rất nhiều thời gian để phân trang các khối bộ nhớ giữa swap space và RAM và dành lại ít thời gian đó cho công việc thực sự. Các triệu chứng điển hình là: Hệ thống trở nên chậm hoặc hoàn toàn không phản hồi và đèn hoạt động của ổ cứng gần như sáng liên tục.

Nếu bạn có thể quản lý để đưa ra một lệnh như free hiển thị tải CPU và sử dụng bộ nhớ, bạn sẽ thấy rằng tải CPU rất cao, có thể gấp 30 đến 40 lần số nhân CPU trong hệ thống. Một triệu chứng khác là cả RAM và swap space gần như được phân bổ hoàn toàn.

Sau sự thật, nhìn vào dữ liệu SAR (system activity report) cũng có thể cho thấy các triệu chứng này. Tôi cài đặt SAR trên mọi hệ thống mà tôi làm việc và sử dụng nó để phân tích pháp y sau sửa chữa.

Dung lượng swap space phù hợp là bao nhiêu?

Nhiều năm trước, quy tắc chung về dung lượng swap space sẽ được phân bổ trên ổ cứng là gấp 2 lần dung lượng RAM được cài đặt trong máy tính (tất nhiên, đó là khi RAM của hầu hết các máy tính được đo bằng KB hoặc MB) . Vì vậy, nếu một máy tính có RAM 64KB, phân vùng hoán đổi (swap partition) 128KB sẽ là kích thước tối ưu. Quy tắc này đã tính đến thực tế rằng kích thước RAM thường khá nhỏ vào thời điểm đó và việc phân bổ nhiều hơn 2X RAM cho swap space không cải thiện hiệu suất. Với nhiều hơn hai lần RAM để swap, hầu hết các hệ thống dành nhiều thời gian hơn để thực hiện công việc hữu ích.

RAM đã trở thành một mặt hàng rẻ tiền và hầu hết các máy tính ngày nay đều có dung lượng RAM lên tới hàng chục gigabyte. Hầu hết các máy tính mới hơn của tôi có ít nhất 8GB RAM, một máy có 32GB và máy trạm chính của tôi có 64GB. Máy tính cũ của tôi có RAM từ 4 đến 8 GB.

Khi xử lý các máy tính có dung lượng RAM lớn, hệ số hiệu suất giới hạn cho swap space thấp hơn nhiều so với hệ số nhân 2X. Hướng dẫn cài đặt trực tuyến Fedora 28, có thể tìm thấy trực tuyến tại Fedora Installation Guide, định hình suy nghĩ hiện tại về phân bổ swap space. Tôi đã tổng hợp bên dưới một số cuộc thảo luận và bảng các khuyến nghị từ tài liệu đó.

Bảng sau cung cấp kích thước được khuyến nghị của swap partition tùy thuộc vào dung lượng RAM trong hệ thống của bạn và liệu bạn có muốn bộ nhớ đủ cho hệ thống của mình ở chế độ ngủ đông hay không. Kích thước swap partition được khuyến nghị được thiết lập tự động trong khi cài đặt. Tuy nhiên, để cho phép chế độ ngủ đông, bạn sẽ cần chỉnh sửa swap space trong giai đoạn phân vùng tùy chỉnh.

Bảng 1: Swap space hệ thống được đề xuất trong tài liệu Fedora

Dung lượng RAM hệ thốngSwap space được đề xuấtSwap with được đề xuất với chế độ ngủ đông
Bé hơn 2 GB2 lần dung lượng RAM3 lần dung lượng RAM
2 GB – 8 GBBằng dung lượng RAM2 lần dung lượng RAM
8 GB – 64 GB0.5 lần dung lượng RAM1.5 lần dung lượng RAM
Lớn hơn 64 GBPhụ thuộc khối lượng công việcNgủ đông không được khuyến khích

Tại ranh giới giữa mỗi phạm vi được liệt kê ở trên (ví dụ: hệ thống có RAM hệ thống 2 GB, 8 GB hoặc 64 GB) sử dụng tùy ý đối với swap space đã chọn và hỗ trợ ngủ đông. Nếu tài nguyên hệ thống của bạn cho phép, việc tăng swap space có thể dẫn đến hiệu suất tốt hơn.

Tất nhiên, hầu hết các Linux administrator đều có ý tưởng riêng của họ về lượng swap space thích hợp cũng như hầu hết mọi thứ khác. Bảng 2 ở bên dưới chứa các đề xuất của tôi dựa trên kinh nghiệm cá nhân của tôi trong nhiều môi trường. Những điều này có thể không hiệu quả với bạn, nhưng cũng như Bảng 1, chúng có thể giúp bạn bắt đầu.

Bảng 2: Swap space hệ thống được đề xuất cho mỗi tác giả

Dung lượng RAMSwap space dược đề xuất
≤ 2GB2X RAM
2GB – 8GB= RAM
> 8GB8GB

Một cân nhắc trong cả hai bảng là khi dung lượng RAM tăng lên, vượt quá một điểm nhất định, việc thêm nhiều swap space hơn chỉ đơn giản là dẫn đến việc hoạt động tốt trước khi swap space gần được lấp đầy. Nếu bạn có quá ít bộ nhớ ảo trong khi làm theo các khuyến nghị này, bạn nên bổ sung thêm RAM, nếu có thể, thay vì nhiều dung lượng hoán đổi hơn. Như với tất cả các khuyến nghị ảnh hưởng đến hiệu suất hệ thống, hãy sử dụng những gì phù hợp nhất với môi trường cụ thể của bạn. Điều này sẽ tốn thời gian và công sức để thử nghiệm và thực hiện các thay đổi dựa trên các điều kiện trong môi trường Linux của bạn.

Thêm nhiều swap space hơn vào môi trường đĩa non-LVM

Do các yêu cầu thay đổi đối với swap space trên các máy chủ đã cài đặt sẵn Linux, có thể cần phải sửa đổi dung lượng swap space được xác định cho hệ thống. Quy trình này có thể được sử dụng cho bất kỳ trường hợp chung nào khi lượng swap space cần được tăng lên. Nó giả định có đủ dung lượng ổ đĩa khả dụng. Quy trình này cũng giả định rằng các đĩa được phân vùng trong phân vùng EXT4 và hoán đổi “thô” và không sử dụng quản lý khối lượng hợp lý (LVM).

Các bước cơ bản để thực hiện rất đơn giản:

  1. Tắt swap space hiện có.
  2. Tạo một phân vùng hoán đổi mới có kích thước mong muốn.
  3. Đọc lại bảng phân vùng.
  4. Định cấu hình phân vùng làm swap space
  5. Thêm phân vùng mới /etc/fstab.
  6. Bật tính năng swap.

Khởi động lại không cần thiết.

Vì lý do an toàn, trước khi tắt tính năng hoán đổi, ít nhất bạn nên đảm bảo rằng không có ứng dụng nào đang chạy và không có dung lượng hoán đổi nào được sử dụng. Các lệnh free hoặc top có thể cho bạn biết liệu swap space có đang được sử dụng hay không. Để an toàn hơn nữa, bạn có thể hoàn nguyên về chạy chế độ cấp 1 hoặc chế độ một người dùng.

Tắt phân vùng hoán đổi bằng lệnh tắt tất cả swap space:

$ swapoff -a

Bây giờ hiển thị các phân vùng hiện có trên ổ cứng.

$ fdisk -l

Thao tác này sẽ hiển thị các bảng phân vùng(partition table) hiện tại trên mỗi ổ đĩa. Xác định phân vùng hoán đổi hiện tại theo số.

Bắt đầu fdisk ở chế độ tương tác bằng lệnh:

$ fdisk /dev/<device name>

Ví dụ:

$ fdisk /dev/sda

Tại thời điểm này, fdisk tương tác và chỉ hoạt động trên ổ đĩa được chỉ định.

Sử dụng lệnh con fdisk p để xác minh rằng có đủ dung lượng trống trên đĩa để tạo phân vùng hoán đổi mới. Không gian trên ổ cứng được hiển thị dưới dạng khối 512 byte và số xi lanh bắt đầu và kết thúc, vì vậy bạn có thể phải thực hiện một số phép toán để xác định không gian khả dụng giữa và cuối các phân vùng được cấp phát.

Sử dụng lệnh con n để tạo một phân vùng hoán đổi mới. fdisk sẽ hỏi bạn xi lanh bắt đầu. Theo mặc định, nó chọn hình trụ có sẵn được đánh số thấp nhất. Nếu bạn muốn thay đổi điều đó, hãy nhập số của xi lanh bắt đầu.

Lệnh fdisk bây giờ cho phép bạn nhập kích thước của phân vùng theo một số định dạng, bao gồm số hình trụ cuối cùng hoặc kích thước tính bằng byte, KB hoặc MB. Nhập 4000M, sẽ cung cấp khoảng 4GB dung lượng trên phân vùng mới (ví dụ) và nhấn Enter.

Sử dụng lệnh con p để xác minh rằng phân vùng đã được tạo như bạn đã chỉ định. Lưu ý rằng phân vùng có thể sẽ không chính xác như những gì bạn đã chỉ định trừ khi bạn sử dụng số hình trụ kết thúc. Lệnh fdisk chỉ có thể phân bổ không gian đĩa theo số gia trên toàn bộ hình trụ, vì vậy phân vùng của bạn có thể nhỏ hơn hoặc lớn hơn một chút so với bạn đã chỉ định. Nếu phân vùng không như ý muốn, bạn có thể xóa và tạo lại.

Bây giờ cần phải xác định rằng phân vùng mới là phân vùng hoán đổi. Lệnh con t cho phép bạn chỉ định loại phân vùng. Vì vậy, hãy nhập t, chỉ định số phân vùng và khi nó yêu cầu loại phân vùng mã hex, hãy nhập 82, là loại phân vùng hoán đổi Linux và nhấn Enter.

Khi bạn hài lòng với phân vùng đã tạo, hãy sử dụng lệnh con w để ghi bảng phân vùng mới vào đĩa. Chương trình fdisk sẽ thoát và đưa bạn trở lại dấu nhắc lệnh sau khi hoàn tất việc ghi bảng phân vùng đã sửa đổi. Bạn có thể sẽ nhận được thông báo sau khi fdisk hoàn tất việc ghi bảng phân vùng mới:

The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Tại thời điểm này, bạn sử dụng lệnh partprobe để buộc hạt nhân đọc lại bảng phân vùng để không cần thực hiện khởi động lại.

$ partprobe

Bây giờ sử dụng lệnh fdisk -l để liệt kê các phân vùng và phân vùng hoán đổi mới sẽ nằm trong số những phân vùng được liệt kê. Đảm bảo rằng loại phân vùng mới là “Linux swap”.

Cần phải sửa đổi tệp /etc/fstab để trỏ đến phân vùng hoán đổi mới. Dòng hiện tại có thể trông như thế này:

LABEL=SWAP-sdaX swap swap defaults 0 0

trong đó X là số phân vùng (partition number). Thêm một dòng mới trông giống như dòng này, tùy thuộc vào vị trí của phân vùng hoán đổi mới của bạn:

/dev/sdaY swap swap defaults 0 0

Đảm bảo sử dụng đúng partition number. Bây giờ bạn có thể thực hiện bước cuối cùng trong việc tạo swap partion. Sử dụng lệnh mkswap để xác định phân vùng dưới dạng phân vùng hoán đổi.

$ mkswap /dev/sdaY

Bước cuối cùng là bật tính năng hoán đổi bằng lệnh:

$ swapon -a

Phân vùng hoán đổi mới của bạn hiện đang trực tuyến cùng với phân vùng hoán đổi hiện có trước đó. Bạn có thể sử dụng các lệnh free hoặc top để xác minh điều này.

Thêm swap vào môi trường đĩa LVM

Nếu thiết lập đĩa của bạn sử dụng LVM, việc thay đổi swap space sẽ khá dễ dàng. Một lần nữa, điều này giả định rằng không gian có sẵn trong nhóm khối lượng chứa khối lượng hoán đổi (swap volume) hiện tại. Theo mặc định, quy trình cài đặt Fedora Linux trong môi trường LVM tạo phân vùng hoán đổi dưới dạng một ổ đĩa hợp lý. Điều này làm cho nó dễ dàng vì bạn có thể chỉ cần tăng kích thước của khối lượng hoán đổi.

Dưới đây là các bước cần thiết để tăng dung lượng hoán đổi trong môi trường LVM:

  1. Tắt tất cả swap.
  2. Tăng kích thước của khối lượng hợp lý được chỉ định để hoán đổi.
  3. Định cấu hình âm lượng đã thay đổi kích thước làm swap space.
  4. Bật tính năng swap.

Trước tiên, hãy xác minh rằng hoán đổi có tồn tại và là một khối logic bằng cách sử dụng lệnh lvs (liệt kê khối lượng logic).

# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home fedora_studentvm1 -wi-ao---- 2.00g 
pool00 fedora_studentvm1 twi-aotz-- 2.00g 8.17 2.93 
root fedora_studentvm1 Vwi-aotz-- 2.00g pool00 8.17 
swap fedora_studentvm1 -wi-ao---- 8.00g 
tmp fedora_studentvm1 -wi-ao---- 5.00g 
usr fedora_studentvm1 -wi-ao---- 15.00g 
var fedora_studentvm1 -wi-ao---- 10.00g

Bạn có thể thấy rằng kích thước hoán đổi hiện tại là 8GB. Trong trường hợp này, chúng tôi muốn thêm 2GB vào khối lượng hoán đổi này. Đầu tiên, dừng hoán đổi hiện tại. Bạn có thể phải chấm dứt các chương trình đang chạy nếu swap space được sử dụng.

$ swapoff -a

Bây giờ hãy tăng kích thước của logical volume.

# lvextend -L +2G /dev/mapper/fedora_studentvm1-swap
Size of logical volume fedora_studentvm1/swap changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
Logical volume fedora_studentvm1/swap successfully resized.

Chạy mkswap để biến toàn bộ phân vùng 10GB này thành swap space.

# mkswap /dev/mapper/fedora_studentvm1-swap
mkswap: /dev/mapper/fedora_studentvm1-swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 10 GiB (10737414144 bytes)
no label, UUID=3cc2bee0-e746-4b66-aa2d-1ea15ef1574a

Bây giờ xác minh swap space mới có mặt bằng lệnh thiết bị khối danh sách. Một lần nữa, khởi động lại là không cần thiết

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
|-sda1 8:1 0 1G 0 part /boot
`-sda2 8:2 0 59G 0 part
|-fedora_studentvm1-pool00_tmeta 253:0 0 4M 0 lvm 
| `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm 
| |-fedora_studentvm1-root 253:3 0 2G 0 lvm /
| `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm 
|-fedora_studentvm1-pool00_tdata 253:1 0 2G 0 lvm 
| `-fedora_studentvm1-pool00-tpool 253:2 0 2G 0 lvm 
| |-fedora_studentvm1-root 253:3 0 2G 0 lvm /
| `-fedora_studentvm1-pool00 253:6 0 2G 0 lvm 
|-fedora_studentvm1-swap 253:4 0 10G 0 lvm [SWAP]
|-fedora_studentvm1-usr 253:5 0 15G 0 lvm /usr
|-fedora_studentvm1-home 253:7 0 2G 0 lvm /home
|-fedora_studentvm1-var 253:8 0 10G 0 lvm /var
`-fedora_studentvm1-tmp 253:9 0 5G 0 lvm /tmp
sr0

Bạn cũng có thể sử dụng lệnh swapon -s hoặc lệnh top, free hoặc bất kỳ lệnh nào khác để xác minh điều này.

# free
total used free shared buff/cache available
Mem: 4038808 382404 2754072 4152 902332 3404184
Swap: 10485756 0 10485756

Lưu ý rằng các lệnh khác nhau hiển thị hoặc yêu cầu khi nhập tệp đặc biệt của thiết bị ở các dạng khác nhau. Có một số cách mà các thiết bị cụ thể được truy cập trong thư mục /dev.

Tổng kết về Swap space trên hệ điều hành Linux

Bài viết trên đây đã giúp bạn tìm hiểu rõ hơn về Swap space và cách cài đặt nó. Nếu có thể áp dụng thành công Swap, hoạt động hệ thống sẽ ổn định hơn và tăng độ bảo mật, kể cả khi RAM vật lý hết dung lượng một cách bất ngờ. Hiện nay hầu hết các nhà cung cấp dịch vụ cho thuê máy chủ đều sử dụng Swap.

Nếu bạn còn bất cứ câu hỏi nào liên quan đến Swap space, hãy để lại bình luận ở bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất. Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.

  • swap space
  • swap là gì

Bạn đang có ý tưởng thành lập một trang web. Và bạn mong muốn có được một tên miền hấp dẫn và hosting chất lượng.

Mua domain và hosting tại BKHOST ngay hôm nay để nhận ưu đãi hấp dẫn!

BKHOST đang có vô số coupon giảm giá khi đăng ký mới, gia hạn, transfer tên miền và hosting.


Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
Bình luận

Thanh toán linh hoạt

Chúng tôi chấp nhận thanh toán như ATM, Visa, Internet Banking, Paypal, Baokim, Ngân lượng

Gọi ĐT tư vấn ngay
Chat ngay qua Zalo
Chat ngay qua Messenger