Việc hoán đổi rõ ràng đã xảy ra khi các trang RAM không hoạt động thực sự hoạt động.
( Cập nhật: như đã được làm rõ trong một nhận xét, đây không phải là trường hợp của bạn. Vì vậy, những người có cùng vấn đề có thể bỏ qua quy tắc ngang .)
Tức là bạn đã có nhiều chương trình đang chạy và kernel đã tráo đổi một số trang. Sau đó, bạn bỏ một số chương trình. Nhân đánh dấu các trang RAM của họ là không hoạt động. Nhưng nó sẽ không trao đổi các trang trở lại RAM cho đến khi các trang này là cần thiết. Điều này dẫn đến việc có cả các trang không hoạt động và tráo đổi.
Tại sao không tráo đổi trang trong? Bởi vì đó sẽ là cá cược chống lại tỷ lệ cược: về lâu dài bạn thua. Hãy nghĩ về một ví dụ đơn giản: Hai chương trình A và B không phù hợp với RAM cùng một lúc. Chương trình A vẫn đang chạy và tất cả các trang bị tráo đổi thuộc về A. Chương trình B đã thoát ra và tất cả các trang không hoạt động thuộc về B.
Nếu hạt nhân hoán đổi trong các trang của A và ngay sau đó:
- chương trình A cần truy cập vào các trang của nó -> Bạn thắng - các trang đã có trong RAM.
- bạn khởi chạy lại B -> Bạn thua - bạn đã "trả" chi phí cho việc đưa các trang vào RAM và bây giờ bạn phải gửi lại chúng.
- bạn khởi chạy một chương trình khác C -> Bạn bị mất nếu A và C không vừa với RAM cùng một lúc. Nếu họ phù hợp, bạn thậm chí.
Ngoài ra, hãy tính đến việc hoán đổi (ghi vào đĩa) đắt hơn so với trao đổi (đọc từ đĩa). Điều này làm cho "đặt cược" này thậm chí không hấp dẫn hơn.
Nói tóm lại: hãy tin vào kernel của bạn và đừng cố gắng vượt qua nó.
Cập nhật:
Hóa ra bộ nhớ không hoạt động không hoạt động vì sử dụng Trình theo dõi hoạt động để đọc bài viết Bộ nhớ hệ thống đã khiến nhiều người tin rằng nó hoạt động. Định nghĩa được đưa ra trong bài viết cho bộ nhớ không hoạt động là chính xác:
Thông tin này có trong RAM nhưng nó không được sử dụng tích cực, nó đã được sử dụng gần đây.
Nhưng ví dụ sau đây hoàn toàn sai lệch và đơn giản hóa quá mức (như ví dụ của tôi là thẳng thắn):
Ví dụ: nếu bạn đã sử dụng Mail và sau đó thoát nó, RAM mà Mail đang sử dụng được đánh dấu là Bộ nhớ không hoạt động. Bộ nhớ không hoạt động có sẵn để sử dụng bởi một ứng dụng khác, giống như Bộ nhớ miễn phí. Tuy nhiên, nếu bạn mở Mail trước khi bộ nhớ Không hoạt động của nó được sử dụng bởi một ứng dụng khác, Mail sẽ mở nhanh hơn vì bộ nhớ Không hoạt động của nó được chuyển đổi sang Bộ nhớ hoạt động, thay vì tải nó từ ổ đĩa chậm hơn.
Tôi đã tìm kiếm thêm các tài nguyên trực tuyến và kết thúc với chủ đề này trong danh sách gửi thư hạt nhân darwin khá nhiều thông tin. Trích dẫn Jim Magee (từ nhóm darwin - tôi nghĩ):
Nói tóm lại, hệ thống VM kernel khi xử lý áp suất bộ nhớ sẽ quét qua các trang đang sử dụng và cố gắng giữ chúng ở trạng thái cân bằng giữa các dấu hiệu hoạt động và không hoạt động. Các trang không hoạt động được quét để sử dụng lại trong khi được đánh dấu là không hoạt động. Nếu chúng đã được sử dụng lại, chúng được đánh dấu là đang hoạt động và một số trang khác phải chuyển từ trạng thái hoạt động sang trạng thái không hoạt động để phát hiện nếu nó đang được sử dụng. Vì vậy, không hoạt động là một cách hiểu sai. Nó là viết tắt của "có thể không hoạt động, hãy thử xác minh điều đó."
Như bạn đã khám phá, số dư nội bộ mà chúng tôi (hiện tại) đang phấn đấu là khoảng 2/3 hoạt động so với 1/3 không hoạt động ...
Điều này giải thích hành vi bạn quan sát. Tức là các trang không hoạt động mà bạn thấy thuộc về các chương trình đang chạy gần đây. Vì vậy, khi bạn khởi động một chương trình mới, các trang không hoạt động sẽ bị tráo đổi. Đồng thời các trang từ các chương trình khác được đánh dấu là không hoạt động để duy trì tỷ lệ 2/1 của hoạt động so với không hoạt động.
Các chủ đề cũng chứa một số gợi ý để tìm hiểu thêm về nội bộ darwin. Ngoài ra còn có một số gợi ý trong trường hợp bạn bắt đầu điều tra việc sử dụng bộ nhớ vì các vấn đề về bóng ném (thường không liên quan đến nó).
Kết luận vẫn giống nhau: Tin tưởng hạt nhân của bạn và đừng cố gắng vượt qua nó. :-)