Tham số vm.swappiness thực sự kiểm soát là gì?


37

Theo tài liệu kernel:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.

Tuy nhiên đây là loại mơ hồ. Tôi đang cố gắng tìm ra chính xác những gì tham số cuối cùng kiểm soát. Tôi biết nó điều chỉnh mức độ mạnh mẽ của kernel cố gắng trao đổi các trang, nhưng quá trình ra quyết định trong mã kernel có ảnh hưởng gì không?

Nó có điều chỉnh cách đây một trang phải được truy cập trước khi kernel hoán đổi nó không? Nếu vậy giá trị mặc định của 60 đại diện cho cái gì? Và bao nhiêu được thay đổi bởi mức tăng / giảm 1 (một công thức sẽ tốt)?
Hoặc nó trao đổi các trang dựa trên tần số truy cập của họ?
Hay cái gì khác?


2
Vâng, sự hoán đổi mơ hồ ;-)
ℝaphink

Câu trả lời:


27

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.swappinesstù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.swappinesssử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.swappinesslà 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.swappinesssử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.swappinessthà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.


Có cách nào để thay đổi sự linh hoạt của file_prio không? Hoặc giới hạn nó vào một thư mục cụ thể?
CMCDragonkai

13

Có một công thức được sử dụng để tính toán trang nào sẽ được hoán đổi. Trong vmscan.cbạn có thể thấy thuật toán này:

xu hướng hoán đổi = mapped_ratio / 2 + đau khổ + vm_swappiness

Ở đây bạn có thể thấy rằng swappiness là một thang đo, được thêm vào trong một số thuật toán và bạn có thể kiểm soát bằng tham số này cách hạt nhân sẽ hoạt động khi nó phải trao đổi. Bạn có thể tính nó là một tỷ lệ phần trăm của xác suất, rằng một số trang bộ nhớ không hoạt động sẽ bị tráo đổi. Nếu bạn đặt swappiness thành 100, không có xác suất nào, nhưng đảm bảo rằng nó sẽ hoán đổi và nếu bạn đặt nó thành 0, kernel sẽ cố gắng không trao đổi miễn là nó có bộ nhớ trống.


6

Người ta đã nói (tôi nghĩ Norman 1986) thường là nút "ĐÓNG CỬA" trong thang máy bị hỏng hoặc không bao giờ được kết nối với bất cứ thứ gì ở nơi đầu tiên. Điều này làm cho việc điều khiển ersatz không phải là một cách điều khiển thang máy mà là vỗ về người lái quá vội vàng.

Theo cách tương tự, swappiness có một hiệu ứng không liên quan đến sự kiểm soát xác định, xác định rõ ràng của một vị từ kernel. Như đã được ghi nhận bởi @neon_overlord trên Askubfox.com

Bởi vì hầu hết đều tin rằng trao đổi = xấu và nếu bạn không giảm bớt sự thay đổi, hệ thống sẽ trao đổi khi thực sự không cần thiết. Cả hai điều đó đều không đúng. Mọi người liên kết trao đổi với thời gian mà hệ thống của họ bị sa lầy - tuy nhiên, chủ yếu là hoán đổi vì hệ thống bị sa lầy, không phải là cách khác. Đúng là có những thời điểm nhất định khi trao đổi có thể có một hình phạt đáng chú ý, nhưng việc giảm tính dễ thay đổi trong trường hợp đó có thể làm giảm hiệu suất hoặc tính ổn định của hệ thống tổng thể theo những cách khác mà sau này có thể trở thành đáng chú ý

Vậy nó thực sự kiểm soát cái gì? Một câu trả lời hợp lệ - ngoài các câu trả lời hay đã được cung cấp - là nó điều chỉnh kỳ vọng của bạn rằng bạn có quyền kiểm soát nhiều hơn đối với hệ thống của mình và việc xoay một núm sẽ cho phép bạn thực hiện việc kiểm soát đó theo cách có ý nghĩa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.