Thuật toán thay thế trang nào được sử dụng trong nhân Linux cho bộ đệm tệp hệ điều hành?


9

Linux sử dụng các phần bộ nhớ không được sử dụng để lưu trữ tệp và nó dọn sạch không gian khi cần.

Câu hỏi của tôi là về cách nó chọn một trang nạn nhân để thay thế? Có nhiều thuật toán khác nhau (LRU, FIFO, LFU và thay thế ngẫu nhiên)

Tôi muốn biết 1) Thuật toán thay thế trang nào được sử dụng trong nhân Linux cho bộ đệm tệp hệ điều hành?

2) Nếu có thể, tôi muốn biết nó đã phát triển theo thời gian như thế nào trong nhân Linux. Tôi giả định rằng thuật toán và cách triển khai của nó có thể thay đổi theo thời gian khi xem xét các thay đổi "hợp lý" trong các xu hướng. Làm thế nào tôi có thể tìm thấy những? Tôi có cần đọc mã nguồn kernel không?

Câu trả lời:


10

Quản lý bộ nhớ Linux ("MM") dường như hơi phức tạp và khó theo dõi.

Tài liệu Linux làm cho đề cập nhiều đến LRU (Least Recent used), trong bối cảnh quản lý bộ nhớ. Tôi đã không nhận thấy bất kỳ điều khoản khác đang được đề cập.

Tôi tìm thấy một giới thiệu thú vị (bốn đoạn đầu tiên) trong bài viết này trên LWN.net không thể so sánh được. Nó giải thích làm thế nào LRU cơ bản có thể được thực hiện trong thực tế cho bộ nhớ ảo. Đọc nó.

Sự thay thế True LFU (Ít sử dụng thường xuyên nhất) không được coi là thiết thực cho bộ nhớ ảo. Hạt nhân không thể đếm từng lần đọc của một trang, khi mmap()được sử dụng để truy cập các trang bộ đệm của tệp - ví dụ: đây là cách hầu hết các chương trình được tải trong bộ nhớ. Chi phí hoạt động sẽ quá cao.


Để vượt ra ngoài khái niệm đơn giản đó, có một phác thảo thiết kế xung quanh phiên bản Linux 2.6.28-32 tại đây:

http://linux-mm.org/PageReplocationDesign

Nó cho thấy Clock-PRO được sử dụng cho các trang tập tin. Có một bài báo gốc có sẵn trên đó. Có một mô tảvề Clock-PRO trên LWN.net, một lần nữa bao gồm một số chi tiết triển khai thực tế. Rõ ràng Clock-PRO "cố gắng vượt ra ngoài phương pháp LRU", một biến thể của "được sử dụng trong hầu hết các hệ thống". Nó dường như đặt trọng lượng nhiều hơn về tần số.

Linux-mm có một tài liệu thiết kế khác để triển khai Clock-PRO trong Linux. Điều này không nói về nó được sáp nhập; nó đã được viết một vài tháng trước khi bài báo của LWN về nó. http://linux-mm.org/ClockProAppro xấp xỉ

Các mô tả gần đây hơn là Linux chỉ "sử dụng một số ý tưởng" từ Clock-PRO và thực sự là "sự kết hợp của một số thuật toán khác nhau với một số sửa đổi để nắm bắt các trường hợp góc và tối ưu hóa khác nhau" .

Các trích dẫn ở trên đã được trả lời một câu hỏi của Adrian McMenamin . McMenamin đã tiếp tục hoàn thành một dự án MSc vào năm 2011, thử nghiệm sửa đổi để thay thế trang Linux dựa trên "mô hình tập làm việc". Nó bao gồm một mô tả ngắn gọn về thay thế trang Linux. "Biến thể của LRU" được đặt tên là "cách tiếp cận 2Q [hai hàng đợi] để quản lý cơ sở dữ liệu", một số tài liệu tham khảo được cung cấp và có một sơ đồ minh họa chuyển động giữa hai hàng đợi và các chuyển trạng thái khác. Ông cũng mô tả Linux là sử dụng một phần triển khai CLOCK-PRO.

Tôi hy vọng khái niệm LRU, trái ngược với các khả năng khác mà bạn đề cập, đã được thiết lập ngay từ đầu. Và thay đổi đáng kể nhất là việc giới thiệu các tính năng dựa trên Clock-PRO, tức là tăng thêm tần suất.

Trong năm 2013, Linux đã đạt được "kích thước bộ đệm bộ đệm dựa trên phát hiện". Điều này có lẽ cũng liên quan đến câu hỏi.


Rất cảm ơn bạn! bạn đã hướng dẫn tôi thông qua điều này. Tôi sẽ bắt đầu từ trang 'PageReplocationDesign'. 'Kích thước bộ đệm bộ đệm dựa trên phát hiện thrash' trông cũng rất thú vị.
syko
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.