Tại sao swappiness được đặt thành 60 theo mặc định?


109

Tôi chỉ đọc một số thứ về swappiness trên Linux. Tôi không hiểu tại sao mặc định được đặt thành 60.

Theo tôi, tham số này nên được đặt thành 10 để giảm trao đổi. Hoán đổi là trên các ổ đĩa cứng của tôi vì vậy nó chậm hơn nhiều so với bộ nhớ của tôi.

Tại sao họ lại cấu hình kernel như vậy?


2
@Mat Xem phần này để biết cách làm điểm chuẩn swappiness.
Geremia

Câu trả lời:


133

Kể từ 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.

Đó là một quan niệm sai lầm phổ biến rằng một phân vùng trao đổi bằng cách nào đó sẽ làm chậm hệ thống của bạn. Không có phân vùng trao đổi không có nghĩa là kernel sẽ không đuổi các trang khỏi bộ nhớ, điều đó chỉ có nghĩa là kernel có ít lựa chọn hơn liên quan đến trang nào sẽ bị đuổi. Lượng trao đổi có sẵn sẽ không ảnh hưởng đến số tiền được sử dụng.

Linux có thể đối phó với việc không có không gian hoán đổi vì theo mặc định, chính sách kế toán bộ nhớ kernel có thể vượt quá bộ nhớ . Nhược điểm là khi bộ nhớ vật lý là kiệt sức, và hạt nhân không thể trao đổi trang nặc danh vào đĩa, các out-of-nhớ-killer (oom-killer) cơ chế sẽ bắt đầu giết chết bộ nhớ hogging "giả mạo" các quy trình để giải phóng bộ nhớ cho các quá trình khác.

Các vm.swappinesstùy chọn là một modifier rằng những thay đổi sự cân bằng giữa trao đổi ra các trang file cache ủng hộ trang nặc danh. Bộ đệm tệp được cung cấp một giá trị ưu tiên tùy ý là 200 từ đó vm.swappinesssửa đổi được khấu trừ ( file_prio=200-vm.swappiness). Các trang ẩn danh, theo mặc định, bắt đầu với 60 ( anon_prio=vm.swappiness). Đ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). Hành vi được định nghĩa trong mm/vmscan.ccây nguồn kernel.

Cho một vm.swappinesssố 100, những ưu tiên sẽ là bằng nhau ( file_prio=200-100=100, anon_prio=100). Điều này sẽ có ý nghĩa đối với một hệ thống nặng I / O nếu không muốn các trang từ bộ đệm tệp bị xóa để ủng hộ các trang ẩn danh.

Ngược lại, cài đặt vm.swappinessthành 0sẽ 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. Điều này có thể hữu ích nếu các chương trình thực hiện hầu hết bộ nhớ đệm của chúng, có thể là trường hợp với một số cơ sở dữ liệu. Trong các hệ thống máy tính để bàn, điều này có thể cải thiện khả năng tương tác, nhưng nhược điểm là hiệu năng I / O có thể sẽ bị ảnh hưởng.

Giá trị mặc định rất có thể đã được chọn là một khoảng giữa gần đúng giữa hai thái cực này. Như với bất kỳ tham số hiệu suất nào, việc điều chỉnh vm.swappinessnên dựa trên dữ liệu điểm chuẩn tương đương với khối lượng công việc thực tế, không chỉ là cảm giác ruột.


4
Làm thế nào để cài đặt hệ điều hành trên một thiết bị trạng thái rắn ảnh hưởng đến sự đánh đổi?
gerrit

3
@gerrit Loại phương tiện lưu trữ cơ bản là không liên quan. Loại chi tiết đó không thể nhìn thấy đối với hệ thống con quản lý bộ nhớ.
Thomas Nyman

Loại phương tiện lưu trữ cơ bản không liên quan từ góc độ sử dụng bộ nhớ. Bạn có thể xem xét việc giảm độ swappiness mà phương tiện hỗ trợ một số lượng hạn chế đọc / ghi (tức là bộ nhớ flash) để tăng tuổi thọ của nó.
MatrixManAtYrService

2
@MatrixManAtYrService Nhờ mức độ hao mòn bên trong và dự phòng tích hợp, các ổ SSD hiện đại (mà câu hỏi trong bình luận trước đề cập đến) đã được hiển thị để kéo dài tới 2 PB (!) Trước khi ghi lỗi. Ngay cả các ổ đĩa rẻ hơn trong các thử nghiệm đó đã tồn tại 300TB trước khi xảy ra lỗi, vượt xa mức bảo hành chính thức khoảng 100TB. Ít nhất theo quan điểm của tôi, việc điều chỉnh sự linh hoạt để phù hợp với ổ SSD trên máy trạm hoặc máy tính xách tay không thực sự được bảo hành.
Thomas Nyman

2
@ThomasNyman bạn thực hiện một điểm tốt, đối với hầu hết người dùng, điều đó không đáng lo ngại. Vụ việc đưa tôi đến bài đăng này liên quan đến không gian hoán đổi trên thẻ SD, mà tôi nhận ra đó là một chút trường hợp cạnh.
MatrixManAtYrService

9

Vấn đề là không có một giá trị mặc định nào phù hợp với mọi nhu cầu. Đặt tùy chọn swappiness thành 10 có thể là một cài đặt phù hợp cho máy tính để bàn, nhưng giá trị mặc định là 60 có thể phù hợp hơn cho các máy chủ. Nói cách khác, swappiness cần được điều chỉnh theo trường hợp sử dụng - máy tính để bàn so với máy chủ, loại ứng dụng, v.v.

Hơn nữa, nhân Linux sử dụng bộ nhớ cho bộ đệm đĩa nếu không RAM sẽ không được sử dụng và điều này không hiệu quả và có chủ đích. Có dữ liệu đĩa trong bộ đệm có nghĩa là nếu một cái gì đó cần lại cùng một dữ liệu, nó có thể sẽ lấy nó từ bộ nhớ. Lấy dữ liệu từ đó nhanh hơn nhiều so với lấy lại từ đĩa. Và tùy chọn swappiness là một cơ chế bao nhiêu nhân Linux thích tráo đổi ra đĩa để thu nhỏ bộ đệm của đĩa. Nó có nên xóa dữ liệu cũ hơn khỏi bộ đệm hay nó nên trao đổi một số trang chương trình?

Bài viết này có thể làm sáng tỏ chủ đề là tốt. Đặc biệt, làm thế nào các xu hướng trao đổi được ước tính.


Tôi không hiểu tại sao 60 phù hợp hơn cho máy chủ. Tôi có máy chủ và một số quy trình được trao đổi ngay cả khi chúng tôi có 40% RAM freem. không có ý nghĩa với tôi.
Hugo

7
Sẽ rất hợp lý khi chuyển các phần của bộ nhớ thành hoán đổi nếu rất khó có khả năng chúng sẽ được truy cập, theo cách đó Linux giữ càng nhiều ram thực tế càng tốt để sẵn sàng cho các tình huống khi nó thực sự cần.
phát lại


Liên kết đến bài viết đã chết nhưng bạn vẫn có thể xem nó từ Wayback Machine
drs

Các bài viết liên kết là thông tin. Cảm ơn đã chia sẻ nó.
Pistos

5

Thêm chi tiết cho các câu trả lời ở trên.
Khi chúng tôi sử dụng VM ngày càng nhiều, máy chủ linux có thể là một vm trên một trong những môi trường đám mây này. Trong cả hai ví dụ 1 & 2, chúng tôi có một ý tưởng tốt về các ứng dụng đang chạy và do đó chúng tiêu thụ bao nhiêu RAM. Trong 3, không quá nhiều

  • Ví dụ 1
    Một đám mây riêng hiệu suất cao (nghĩ rằng hầu hết các ngân hàng sẽ trả hàng triệu đô la), trong đó đĩa được cung cấp bởi một mảng lưu trữ rất đắt tiền với RẤT tốt IO. Một phần của bộ lưu trữ đó có thể nằm trong RAM (trong mảng đĩa) được hỗ trợ bởi các ổ SSD, được hỗ trợ bởi các đĩa thông thường có trục chính. Trong tình huống này, đĩa mà VM nhìn thấy có thể chỉ chậm hơn một chút so với RAM mà nó có thể truy cập. Đối với một vm không có nhiều sự khác biệt giữa trao đổi và ram.
  • Ví dụ 2
    Giống như ví dụ 1 nhưng thay vì một vm duy nhất bạn có hàng trăm, hàng nghìn hoặc nhiều hơn. Trong tình huống này, chúng tôi phát hiện ra rằng RAM của máy chủ (hypanneror) rất rẻ và dồi dào trong đó RAM lưu trữ đắt tiền (tương đối mà nói). Nếu chúng tôi phân chia các yêu cầu RAM giữa Hypervisor RAM và SWAP được cung cấp bởi mảng lưu trữ rất đắt tiền của chúng tôi, chúng tôi thấy rằng chúng tôi nhanh chóng sử dụng tất cả RAM trong mảng lưu trữ, sau đó các khối được phục vụ bởi SSD và cuối cùng là các trục chính. Đột nhiên mọi thứ bắt đầu trở nên rất chậm. Trong trường hợp này, chúng tôi có thể muốn gán nhiều RAM (từ bộ ảo hóa) cho VM và đặt swappiness thành 0 (chỉ trao đổi để tránh ra khỏi điều kiện bộ nhớ) vì hiệu ứng tích lũy của tất cả các vm đó sẽ ảnh hưởng đến hiệu suất của lưu trữ,
  • Ví dụ 3 Một máy tính xách tay hoặc máy tính để bàn hiện đại có thể có ổ SSD. Các yêu cầu bộ nhớ được coi là chưa biết. Người dùng sẽ sử dụng trình duyệt nào, họ sẽ mở bao nhiêu tab, họ cũng sẽ chỉnh sửa tài liệu, hình ảnh RAW hoặc có thể là video, tất cả họ sẽ tiêu thụ RAM. Đặt swappiness thành giá trị thấp và thực hiện các chỉnh sửa hệ thống tệp khác sẽ có nghĩa là có ít ghi vào SSD hơn và do đó nó sẽ tồn tại lâu hơn.

3
SSD ghi mối lo ngại về độ bền cho hệ thống người dùng cuối được đánh giá quá cao. SSD hiện đại thường tồn tại với khối lượng ghi hàng trăm terabyte. Một hệ thống máy tính để bàn điển hình ngay cả với việc sử dụng trao đổi nặng cũng khó có thể sử dụng nhiều trong nhiều năm hoạt động.
Jules
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.