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ư kernel và init 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). Vậy swap space là gì? Hãy cùng BKHOST tìm hiểu ngay sau đây.
Swap space là gì?
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 khích bạ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ống | Swap space được đề xuất | Swap with được đề xuất với chế độ ngủ đông |
---|---|---|
Bé hơn 2 GB | 2 lần dung lượng RAM | 3 lần dung lượng RAM |
2 GB – 8 GB | Bằng dung lượng RAM | 2 lần dung lượng RAM |
8 GB – 64 GB | 0.5 lần dung lượng RAM | 1.5 lần dung lượng RAM |
Lớn hơn 64 GB | Phụ thuộc khối lượng công việc | Ngủ đô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 RAM | Swap space dược đề xuất |
---|---|
≤ 2GB | 2X RAM |
2GB – 8GB | = RAM |
> 8GB | 8GB |
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:
- Tắt swap space hiện có.
- Tạo một phân vùng hoán đổi mới có kích thước mong muốn.
- Đọc lại bảng phân vùng.
- Định cấu hình phân vùng làm swap space
- Thêm phân vùng mới /etc/fstab.
- 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:
{{EJS0}}
Bây giờ hiển thị các phân vùng hiện có trên ổ cứng.
{{EJS1}}
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:
{{EJS2}}
Ví dụ:
{{EJS3}}
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:
{{EJS4}}
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.
{{EJS5}}
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:
{{EJS6}}
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:
{{EJS7}}
Đả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.
{{EJS8}}
Bước cuối cùng là bật tính năng hoán đổi bằng lệnh:
{{EJS9}}
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:
- Tắt tất cả swap.
- Tăng kích thước của khối lượng hợp lý được chỉ định để hoán đổi.
- Định cấu hình âm lượng đã thay đổi kích thước làm swap space.
- 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).
{{EJS10}}
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.
{{EJS11}}
Bây giờ hãy tăng kích thước của logical volume.
{{EJS12}}
Chạy mkswap để biến toàn bộ phân vùng 10GB này thành swap space.
{{EJS13}}
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
{{EJS14}}
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.
{{EJS15}}
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.
P/s: 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ì