Bộ nhớ ảo trên Linux: Từ A đến Z

Chia sẻ kiến thức 10/08/2022

Bộ nhớ ảo giúp hệ điều hành thực hiện các quy trình của nó mà không bị gián đoạn. Đây là cách bạn có thể quản lý bộ nhớ ảo trên Linux.

Bộ nhớ ảo là một trong những nền tảng cho hệ điều hành hiện đại nhưng bạn không thường nghĩ về nó trừ khi gặp sự cố. Các bản phân phối Linux yêu cầu bạn thiết lập không gian bộ nhớ ảo (hoán đổi phân vùng) trong khi cài đặt, nhưng hầu hết người mới bắt đầu không biết điều đó hữu ích như thế nào.

Đây là mọi thứ bạn cần biết về bộ nhớ ảo trên Linux.

Bộ nhớ ảo là gì?

Bộ nhớ ảo là một vùng thuộc không gian lưu trữ của bộ nhớ phụ trên hệ thống máy tính của bạn. Nó sử dụng cả RAM và không gian lưu trữ, cho dù đó là trên ổ cứng truyền thống hay SSD.

Trong Linux, điều này được thực hiện ở cấp độ hạt nhân và phần cứng. CPU có một phần cứng được gọi là Bộ quản lý bộ nhớ (Memory Management Unit, viết tắt là MMU) để chuyển các địa chỉ bộ nhớ vật lý thành các địa chỉ ảo. Các địa chỉ này độc lập với nơi chúng cư trú thực tế trên máy. Các không gian địa chỉ này được gọi là “page” (trang) và chúng có thể nằm trong RAM hoặc trên ổ cứng hoặc SSD. Hệ điều hành coi các địa chỉ này là một vùng bộ nhớ lớn, được gọi là “address space” (không gian địa chỉ).

Bộ nhớ ảo tận dụng việc không phải tất cả bộ nhớ đang được sử dụng trên lý thuyết đều được sử dụng mọi lúc. Các chương trình trong bộ nhớ được chia nhỏ thành các trang và các phần mà hạt nhân cho là không cần thiết sẽ được “hoán đổi” hoặc chuyển vào ổ cứng. Khi cần, chúng có thể được “hoán đổi” hoặc đưa trở lại RAM.

Không gian được sử dụng cho bộ nhớ ảo trên ổ đĩa được gọi là “backing store” (kho sao lưu) hoặc “swap space” (không gian hoán đổi). Trong thế giới Windows, nó thường được triển khai dưới dạng tệp, được gọi là “swap file” (tệp hoán đổi). Điều này cũng có thể được thực hiện trong Linux, nhưng việc sử dụng phân vùng đĩa chuyên dụng vẫn phổ biến hơn nhiều.

Các tệp hoán đổi trên Linux thường được dành riêng cho các hệ thống nhúng hoặc hệ thống tối thiểu. Hệ thống nhúng thường chạy mà hoàn toàn không có bộ nhớ ảo vì hệ điều hành nhúng phải nhỏ.

Ưu điểm của bộ nhớ ảo là có thể chạy các chương trình lớn bằng cách sử dụng nhiều bộ nhớ hơn RAM vật lý trong máy của bạn, tương tự như cách thẻ tín dụng cho phép bạn thực hiện các giao dịch mua lớn với số tiền nhiều hơn số tiền bạn có trong tài khoản. Giống như thẻ tín dụng, bộ nhớ ảo rất hữu ích khi cần nhưng bạn không nên lạm dụng nó. 

Bộ nhớ ảo cũng cho phép các nhà phát triển tạo ra các ứng dụng mà không cần phải biết cách tổ chức bộ nhớ của máy tính.

Trước đây nhược điểm chính của bộ nhớ ảo là ổ cứng hoạt động chậm hơn RAM. Nếu máy không có đủ RAM, hệ thống có thể liên tục hoán đổi các trang vào và ra, một quá trình được gọi là “thrashing” (đập). Điều này ít phổ biến hơn trên các PC hiện đại vì chúng có nhiều RAM hơn và ổ SSD nhanh hơn (thay thế ổ cứng cơ học), nhưng nó vẫn là điều cần lưu ý.

Phân vùng hoán đổi Linux

Như đã nói ở trên, phương pháp thông thường để thiết lập bộ nhớ ảo trên Linux là sử dụng một phân vùng đĩa chuyên dụng. Tiện ích cài đặt sẽ kiểm tra phần cứng và đề xuất một sơ đồ phân vùng bao gồm một phân vùng hoán đổi.

Bạn cũng có thể thêm phân vùng hoán đổi sau khi cài đặt. Nếu bạn muốn thêm phân vùng mới vào ổ đĩa hiện có, bạn sẽ phải sử dụng công cụ phân vùng không phá hủy như GParted. Hãy đảm bảo rằng bạn đã chọn “Linux swap” làm hệ thống tệp cho phân vùng của mình.

Chú ý: Nên sao lưu dữ liệu quan trọng trước khi phân vùng lại ổ đĩa.

Sau khi bạn đã tạo phân vùng của mình, hãy sử dụng lệnh mkswap để định dạng phân vùng.

sudo mkswap /dev/sdX

Bây giờ bạn sẽ phải chỉnh sửa /etc/fstab của mình dưới dạng thư mục gốc để thêm phân vùng hoán đổi. Khi được thêm vào tệp, dòng này sẽ thiết lập phân vùng hoán đổi được gắn vào lúc khởi động:

/dev/sdX none swap defaults 0 0

Bây giờ sử dụng lệnh swapon để kích hoạt không gian hoán đổi mới của bạn, trong đó sdX là tên của phân vùng hoán đổi:

sudo swapon /dev/sdX

Sử dụng file hoán đổi trên Linux

Rất dễ để thiết lập tệp hoán đổi trong Linux bằng dòng lệnh. Bạn có thể muốn làm điều này nếu không muốn phân vùng lại ổ đĩa hoặc chỉnh sửa /etc/fstab. Một trong các phương pháp là sử dụng fallocate:

Ví dụ: để tạo tệp hoán đổi 2GB:
sudo fallocate -l 2G /path/to/swapfile

Thay vào đó, bạn có thể sử dụng lệnh dd để tạo tệp hoán đổi.

sudo dd if=/dev/zero of=/path/to/swapfile bs=1024 count=2048

Hãy đảm bảo rằng bạn đang sử dụng lệnh dd đúng cách, vì việc lấy sai tệp vào (infile) và tệp ra (outfile) có thể gây mất dữ liệu. fallocate là phương pháp được ưa thích vì lý do này.

Thiết bị /dev/zero là một thiết bị đặc biệt xuất ra “0.” Lệnh dd tạo một tệp khối trống hai gigabyte bằng cách sử dụng các khối 1024 kilobyte thích hợp để sử dụng làm không gian hoán đổi.

Sau đó, bạn có thể sử dụng lệnh mkswap và swapon với một tệp hoán đổi như đã làm với phân vùng hoán đổi:

sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile

Bạn có thể tự hỏi khi nào nên sử dụng tệp hoán đổi hoặc phân vùng chuyên dụng cho không gian hoán đổi của mình. Sự lựa chọn rất dễ dàng: trong hầu hết các trường hợp, bạn nên sử dụng một phân vùng. Đây là sự lựa chọn tốt nhất cho desktop hoặc máy chủ Linux. Sơ đồ phân vùng do trình cài đặt đề xuất thường thích hợp trên desktop Linux dành cho một người dùng.

Bạn có thể muốn sử dụng tệp hoán đổi nếu đang chạy Linux trong một máy ảo, trên một hệ thống nhúng nhỏ hoặc nếu bạn không muốn phân vùng lại hệ thống Linux hiện có của mình.

Không gian hoán đổi bao nhiêu?

Trước đây, câu trả lời phổ biến cho câu hỏi cần bao nhiêu dung lượng hoán đổi là gấp đôi lượng RAM vật lý. Tuy nhiên, ngay cả những chiếc PC rẻ nhất ngày nay cũng đi kèm những ổ đĩa và dung lượng bộ nhớ, nên câu trả lời này không còn chính xác. 

Trên nhiều hệ thống, nếu bạn kiểm tra top hoặc htop, bạn thậm chí có thể nhận thấy rằng không gian hoán đổi của bạn thậm chí không được sử dụng nếu bạn thiết lập hệ thống của mình theo cách này.

Tuy nhiên, gấp đôi bộ nhớ vật lý sẽ rất tốt nếu bạn cần dùng nhiều bộ nhớ hơn. Bạn có thể thực hiện các thay đổi đối với hệ thống của mình nếu cần. Nếu hệ thống đang sử dụng hết RAM, máy tính có thể gặp sự cố về hiệu suất khi sử dụng bộ nhớ ảo.

Máy tính có thể liên tục hoán đổi trong và ngoài, một quá trình được gọi là thrashing, khiến cho nó có vẻ không phản hồi. 

Ngày nay, điều này không còn là vấn đề nữa vì dung lượng RAM trên ngay cả những chiếc PC rẻ nhất cũng đã là quá đủ, cộng với tốc độ của ổ SSD nhanh hơn nhiều so với ổ cứng cũ. Tuy nhiên, bạn vẫn nên lưu ý điều này. 

Cách dễ nhất để khắc phục điều này là chỉ cần bổ sung thêm RAM cho máy. Nếu không thể, bạn có thể cố gắng điều chỉnh “tính năng” của nhân Linux.

Số swappiness xác định lượng hạt nhân nhúng vào bộ nhớ ảo. Nó nằm trong khoảng từ 0 đến 100. Đặt nó thành 0 có nghĩa là Linux sẽ không hoán đổi một chút nào, trong khi ở mức 100, nó sẽ hoán đổi mọi lúc có cơ hội. Con số mặc định trên hầu hết các hệ thống là 60.

Để thay đổi swappiness tạm thời, hãy sử dụng lệnh sysctl:
sudo sysctl vm.swappiness=20

“20” trong lệnh đó sẽ là số swappiness cho đến khi bạn khởi động lại. Để thay đổi nó vĩnh viễn, hãy chỉnh sửa tệp /etc/sysctl.conf làm thư mục gốc và đặt dòng “vm.swappiness = [swappiness number]”, trong đó “[swappiness number]” là số swappiness bạn muốn. Đây sẽ là một cách khắc phục tạm thời cho đến khi bạn có thể cài đặt thêm RAM.

Bộ nhớ ảo giữ cho hệ thống Linux hoạt động trơn tru

Bộ nhớ ảo là một thành phần của hệ điều hành hiện đại, bao gồm cả Linux và giúp máy tính hoạt động trơn tru. Bạn có thể sử dụng tệp hoán đổi, nhưng phương pháp thông thường là phân vùng chuyên dụng. Bạn không cần phải suy nghĩ nhiều về nó, nhưng các phân vùng trao đổi trên Linux và các tệp hoán đổi rất dễ thiết lập và khắc phục sự cố.

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/virtual-memory-on-linux/

Bình luận (
0
)

Graphic Noti Complete Course

Chúc mừng học viên

Hoàng Lê Tuấn Nam

Đã xuất sắc hoàn thành

Kỹ sư phần mềm cơ bản - Basic Software Engineer đạt học bổng 5%

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        

yêu cầu gọi lại

error: Content is protected !!