Kể từ phiên bản kernel 2.6.28, Linux sử dụng chiến lược thay thế trang Split Least Recent used (LRU). Các trang có nguồn hệ thống tệp, chẳng hạn như văn bản chương trình hoặc thư viện dùng chung thuộc về bộ đệm tệp. Các trang không có sự hỗ trợ của hệ thống tệp được gọi là các trang ẩn danh và bao gồm dữ liệu thời gian chạy như không gian ngăn xếp dành riêng cho các ứng dụng, v.v. Thông thường, các trang thuộc bộ đệm tệp sẽ rẻ hơn khi bị xóa khỏi bộ nhớ (vì chúng có thể được đọc lại từ đĩa khi cần) . Vì các trang ẩn danh không có sự hỗ trợ của hệ thống tập tin, chúng phải nằm trong bộ nhớ miễn là chúng cần cho một chương trình trừ khi có không gian hoán đổi để lưu trữ chúng.
Các vm.swappiness
tùy chọn đi vào chơi trong get_scan_count()
định nghĩa trong mm/vmscan.c
. get_scan_count()
xác định mức độ mạnh mẽ của danh sách LRU ẩn danh và tệp nên được quét khi tìm trang để đuổi. Giá trị của mỗi trường hợp được xác định bởi mức trung bình nổi của các tỷ lệ được quét gần đây và được quét gần đây trong đó các tham chiếu gần đây có trọng số lớn hơn các trường hợp cũ để tính đến khối lượng công việc thay đổi của hệ thống.
Công cụ vm.swappiness
sửa đổi thay đổi sự cân bằng giữa việc hoán đổi các trang bộ đệm tệp có lợi cho các trang ẩn danh. vm.swappiness
là giá trị ưu tiên được đặt cho các trang ẩn danh, theo mặc định được đặt thành 60 . Bộ đệm tệp được cung cấp một giá trị ưu tiên 200 mà từ đó công cụ vm.swappiness
sửa đổi được khấu trừ ( file_prio=200-anon_prio
). Điều này có nghĩa là theo mặc định, các trọng số ưu tiên đứng ở mức vừa phải có lợi cho các trang ẩn danh ( anon_prio=60
, file_prio=200-60=140
). Tuy nhiên, khi hệ thống gần với tình trạng hết bộ nhớ , cả danh sách LRU ẩn danh và tệp được quét như nhau, trừ khi vm.swappiness
được đặt thành không.
Khi vm.swappiness
được đặt thành 100, mức độ ưu tiên sẽ bằng ( anon_prio=100
, file_prio=200-100=100
). Đặt vm.swappiness
thành không sẽ ngăn hạt nhân đuổi các trang ẩn danh có lợi cho các trang khỏi bộ đệm tệp.