2010-01-08 16 views
5

Máy chủ của tôi có 8Gigs RAM và 8Gigs được định cấu hình cho tệp hoán đổi. Tôi có các ứng dụng chuyên sâu về bộ nhớ đang chạy. Các ứng dụng này có tải cao điểm trong thời gian đó chúng tôi thấy tăng sử dụng swap. Khoảng 1 Gig của swap được sử dụng.Điều kiện chính xác dựa trên đó Linux hoán đổi (các) bộ xử lý từ RAM sang một tệp hoán đổi là gì?

Tôi có một máy chủ khác có 4GG RAM và 8 Gigs của các ứng dụng trao đổi và bộ nhớ tương tự đang chạy trên đó. Nhưng ở đây trao đổi sử dụng là rất không đáng kể. Khoảng 100 MB.

tôi đã tự hỏi những chính xác điều kiện hoặc một thức thô trên cơ sở đó Linux sẽ làm một swapout của một ký ức quá trình trong RAM đến tập tin hoán đổi là gì. Tôi biết dựa trên yếu tố trao đổi. Điều gì khác là nó dựa trên? Trao đổi kích thước tệp? Bất kỳ con trỏ đến tài liệu hạt nhân Linux/mã nguồn giải thích điều này sẽ là tuyệt vời.

Trả lời

8

Tôi đã nhìn thấy rất nhiều người đăng giải thích chủ quan của điều này không. Đây là hy vọng một câu trả lời đầy đủ hơn.

Trong LRU phân chia trên bài đăng 2.6.28 Biến đổi Linux là một hệ số được sử dụng để tùy ý sửa đổi phần được tính toán xác định áp suất được xây dựng trong cả hai LRU.Vì vậy, ví dụ trên một hệ thống không có bộ nhớ trống còn lại - giá trị của bộ nhớ hiện tại mà bạn có được đo dựa trên tỷ lệ bao nhiêu bộ nhớ được liệt kê là 'Hoạt động' và tỷ lệ các trang thường xuyên là bao nhiêu được khuyến khích hoạt động sau khi rơi vào danh sách không hoạt động.

LRU có nhiều chương trình khuyến mãi/giảm hạng trang giữa hoạt động và không hoạt động được sử dụng nhiều.

Thông thường lưu trữ tệp được sao lưu rẻ hơn và an toàn hơn khi bạn hết bộ nhớ và tự động được sửa đổi 200 (điều này làm cho bộ nhớ được sao lưu gấp 200 lần bộ nhớ được hoán đổi (có giá trị bằng 0) Khi nó nhân phần này

Điều gì làm thay đổi giá trị này bằng cách trừ số swappiness bạn đã cung cấp (mặc định 60) vào bộ nhớ tệp và thêm giá trị swappiness bạn đã cung cấp như một số nhân vào bộ nhớ anon. bạn với bộ nhớ ẩn danh có giá trị gấp 80 lần so với bộ nhớ tệp (200-60 cho tệp, 0 + 60 cho anon) .Vì vậy, trên một hệ thống Linux điển hình đã sử dụng hết bộ nhớ của nó, bộ nhớ cache trang sẽ phải là 80 TIMES hơn hoạt động hơn bộ nhớ ẩn danh để ẩn danh tôi mory được hoán đổi để ủng hộ bộ đệm trang.

Nếu bạn đặt swappiness thành 100, điều này cho anon một công cụ sửa đổi 100 và bộ nhớ tệp là công cụ sửa đổi 100 (200 - 100) để cả hai LRU đều có trọng số như nhau. Do đó trên một hệ thống tập tin nặng mà muốn bộ đệm trang cung cấp bộ nhớ anon không hoạt động như bộ đệm trang thì bộ nhớ anon sẽ được hoán đổi vào đĩa để tạo không gian cho bộ đệm trang bổ sung.

+0

Rất nhiều thông tin. Cảm ơn. – Zenil

+1

Đối với hồ sơ, số lượng trao đổi bạn không có mang về mức độ thường xuyên bạn sử dụng nó để trao đổi. –

5

Linux (hoặc bất kỳ hệ điều hành nào khác) chia bộ nhớ thành các trang (thường là 4Kb). Mỗi trang trong số này đại diện cho một đoạn bộ nhớ. Thông tin sử dụng cho các trang này được duy trì, về cơ bản có chứa thông tin về việc trang đó có miễn phí hay không (một phần của một số quy trình), cho dù nó đã được truy cập gần đây hay không, loại dữ liệu nào chứa (dữ liệu quá trình, mã thực thi, v.v. Các trang này cũng có thể được chia thành hai loại - các trang hệ thống tập tin hoặc bộ đệm trang (trong đó tất cả dữ liệu đọc/ghi vào hệ thống tập tin của bạn cư trú) và các trang thuộc về các tiến trình.

Khi hệ thống sắp hết bộ nhớ, hạt nhân bắt đầu trao đổi các trang dựa trên mức sử dụng của chúng. Sử dụng một danh sách các trang được sắp xếp truy cập w.r.t truy cập là phổ biến để xác định trang nào có thể được hoán đổi (hạt nhân Linux cũng có danh sách như vậy).

Trong khi hoán đổi, hạt nhân Linux cần phải quyết định điều gì sẽ xảy ra khi các trang nuking trong bộ nhớ và gửi chúng sang trao đổi. Nếu nó hoán đổi các trang hệ thống tập tin quá mạnh, nhiều lần đọc được yêu cầu từ hệ thống tập tin để đọc các trang đó khi cần. Tuy nhiên, nếu nó hoán đổi các trang quy trình mạnh hơn, nó có thể làm tổn thương tương tác, bởi vì khi người dùng cố gắng sử dụng các quy trình được hoán đổi, chúng sẽ phải được đọc lại từ đĩa. Xem một cuộc thảo luận tốt đẹp here về điều này.

Bằng cách đặt swappiness = 0, bạn đang yêu cầu hạt nhân Linux không trao đổi các trang thuộc về quy trình. Khi thiết lập swappiness = 100 thay vào đó, bạn yêu cầu hạt nhân hoán đổi các trang thuộc về các tiến trình tích cực hơn. Để điều chỉnh hệ thống của bạn, hãy thử thay đổi tham số swappiness ở các bước 10, theo dõi hiệu suất và các trang được hoán đổi vào/ra tại mỗi cài đặt bằng cách sử dụng lệnh "vmstat". Giữ cài đặt cung cấp cho bạn kết quả tốt nhất. Hãy nhớ làm thử nghiệm này trong giờ cao điểm. :)

Đối với các ứng dụng cơ sở dữ liệu, swappiness = 0 thường được khuyến nghị. (Ngay cả khi đó, hãy kiểm tra các cài đặt khác nhau trên hệ thống của bạn để đạt được giá trị tốt).

Tài liệu tham khảo:
http://www.linuxvox.com/2009/10/what-is-the-linux-kernel-parameter-vm-swappiness/
http://www.pythian.com/news/1913/

+1

Thuật ngữ có thể đã thay đổi nhưng trong những ngày xa xưa "hoán đổi" có nghĩa là hoán đổi toàn bộ quy trình trong khi "phân trang" có nghĩa là hoán đổi các trang bộ nhớ riêng lẻ. Hầu hết các hệ điều hành làm phân trang, hệ điều hành duy nhất tôi có thể gọi lại rằng "trao đổi" thực sự là UNICOS. –

+1

Tôi vẫn gặp phải một số máy tính cũ, người duy trì định nghĩa cũ về trao đổi, nhưng bây giờ nó rất hiếm. Hoán đổi toàn bộ quá trình là một kỹ thuật không phổ biến trong các hệ thống hiện tại mà "trao đổi" bắt đầu bị thối định nghĩa và trở thành một thuật ngữ vô dụng, được định nghĩa lại là hữu ích một lần nữa sao cho về cơ bản có nghĩa là "phân trang". Thỉnh thoảng tôi chạy vào ý thức hoán đổi cũ gọi là "phân trang toàn bộ quá trình", đó là một biến quay của bánh xe có định nghĩa lại vui nhộn nhưng có xu hướng được hiểu. – wrosecrans

+0

Với thư viện được chia sẻ, bản sao chép trên máy ghi, v.v., chính xác điều gì có nghĩa là bằng cách hoán đổi toàn bộ quá trình trở nên mờ nhạt một chút. –