Câu trả lời:
Theo yêu cầu. Trên thực tế, Linux sẽ từ từ chuyển bộ nhớ vật lý sang trao đổi khi không hoạt động (xem: "swappiness").
Trong quá trình hoạt động thông thường, dữ liệu từ trao đổi được tải vào bộ nhớ theo yêu cầu, như đã trả lời khác, nhưng có một trường hợp nữa xảy ra: đó là khi không gian trao đổi bị vô hiệu hóa, miễn là có đủ bộ nhớ vật lý để tải toàn bộ nội dung trao đổi.
Cứ làm đi:
swapoff -a
Càng và tất cả dữ liệu trao đổi của bạn sẽ 'trở lại' vào bộ nhớ. Tác dụng phụ là bộ đệm / bộ đệm có thể bị xóa.
Đôi khi có thể cần phải thực hiện swapoff -a ; swapon -a
, ví dụ như sau một quá trình rò rỉ bộ nhớ bị lỗi, trước khi bị hỏng, đã thực hiện các quy trình quan trọng hơn - để đảm bảo mọi quá trình đang chạy trong hệ thống được tải vào bộ nhớ và sẽ không chờ trao đổi một vài phút.
swapoff
sẽ không thất bại, nhưng hệ thống sẽ hết bộ nhớ ngay sau đó swapoff
và OOM sẽ giết quá trình ngẫu nhiên (trong trường hợp xấu nhất là lớp vỏ sắp gọi swapon
hoặc swapon
lệnh). Trong thực tế, điều này rất khó xảy ra - rất nhiều bộ nhớ được sử dụng bởi bộ nhớ cache trước khi swapoff
được gọi vì vậy nó phải đủ RAM cho cả hai lệnh để chạy.
Như những người khác đã chỉ ra, các trang sẽ chỉ được sao chép trở lại vào RAM khi cần thiết (theo yêu cầu) thay vì chiếm RAM có thể tốt hơn để có sẵn cho bộ đệm / bộ đệm.
Việc các trang được sao chép trở lại vào RAM, không bị di chuyển, rất quan trọng và có thể dẫn đến nhầm lẫn nếu bạn không biết về nó. Trang sẽ không bị hủy khỏi trao đổi trừ khi không còn cần thiết nữa (tức là trang đã được giải phóng hoàn toàn), được thay đổi trong RAM (vì vậy bản sao trong trao đổi không còn chính xác nữa) hoặc trao đổi đang ở mức thấp (và bật khối -disk là cần thiết để trao đổi một số trang khác). Bằng cách này, nếu trang cần phải được tráo đổi một lần nữa trong tương lai thì không cần ghi đĩa vì nhân biết rằng đã có một bản sao tốt trên đĩa - điều này có thể giảm đáng kể việc "đập" khi RAM có sẵn trở nên cực kỳ thấp nhưng không gian trao đổi cũng không nghẽn.
Bạn có thể thấy có bao nhiêu trang hiện tại trong cả RAM và trao đổi từ cat /proc/meminfo
- SwapCached
dòng là lượng dữ liệu trong các trang hiện có cả RAM và trên đĩa. Nếu bạn nghĩ rằng hoán đổi hiện tại của bạn sử dụng nó cao hơn bạn mong đợi, hãy kiểm tra giá trị SwapCached vì điều này có thể giải thích sự khác biệt.
Điều này thường được ràng buộc với phần cứng bạn đang sử dụng. Trên hầu hết các phần cứng (bao gồm cả intel), MMU kiểm soát toàn bộ quá trình.
Khi một chương trình phân bổ bộ nhớ, nó sẽ yêu cầu nó tới MMU và lấy lại một địa chỉ ảo. Đổi lại, MMU sẽ đăng ký trang đó là "đang sử dụng" trong bản đồ không gian địa chỉ toàn cầu.
Khi chương trình thực sự truy cập vào không gian bộ nhớ đó, MMU sẽ tra cứu trang vào bản đồ địa chỉ. Nếu trang đó nằm trong bộ nhớ "trực tiếp", nó sẽ gửi lại một con trỏ "trực tiếp" cho HĐH sẽ xử lý bộ nhớ đọc / ghi thay cho chương trình. Nếu bộ nhớ hiện không được phân bổ, thì nó sẽ gây ra lỗi trang. Sau đó, ngoại lệ bộ xử lý này bị HĐH bắt giữ, sau đó chịu trách nhiệm tìm ra dữ liệu nằm trong tệp hoán đổi, tải nó vào bộ nhớ vật lý và đưa trang trở lại MMU để quá trình ban đầu có thể tiếp tục.
Điều này có nghĩa là, trừ khi trang bộ nhớ được truy cập, nó sẽ không bao giờ quay lại bộ nhớ "trực tiếp" khi được đưa vào trao đổi. Đó là lý do tại sao thường có API hệ điều hành cho phép các chương trình chỉ định rằng một khối bộ nhớ cụ thể KHÔNG được hoán đổi vào đĩa và nên được giữ trong bộ nhớ (tôi không biết về Linux, nhưng trong Windows, đó là chức năng VirtualLock) .
mlock(2)
linux.die.net/man/2/mlock