2015-05-02 18 views
19

Câu hỏi của tôi là một phần mở rộng của việc này một How to manipulate page cache in Linux?Linux Page Cache - Xóa một trang từ bộ nhớ cache trang trong kernel

Tôi đã cố gắng để làm một dự án nhỏ nhằm hạn chế kích thước của bộ nhớ cache trang sử dụng trên một mỗi cơ sở tệp. Cách tiếp cận tôi đã sử dụng như sau -

  1. Duy trì hàng đợi trang con trỏ khi chúng được thêm vào bộ nhớ cache của trang.
  2. Thêm móc vào add_to_page_cache_lru() và xem kích thước của cây radix (địa chỉ_space) của tệp có lớn hơn kích thước được xác định trước sau đó chọn nạn nhân từ hàng đợi nămo và xóa trang khỏi trang bộ nhớ cache.
  3. tôi đã sử dụng các chức năng delete_from_page_cache()try_to_unmap() để đuổi các trang từ bộ nhớ cache trang, tiếp theo là put_page() để phát hành trang.

Tôi hy vọng mã này sẽ giải phóng các trang và giải phóng bộ nhớ nhưng dường như điều đó không xảy ra. Ví dụ, nếu tôi đọc một tập tin có kích thước 25MB và tôi đã hạn chế kích thước của bộ nhớ cache trang cho tệp này là 512 trang (2MB), thì tôi sẽ thấy thay đổi chỉ 2MB trong bộ nhớ trống (miễn phí -m). Những gì tôi thấy thay vào đó là 25MB đầy đủ được ăn lên và hiển thị trong lệnh miễn phí.

Tôi nên làm gì để đảm bảo rằng các yêu cầu của tôi được đáp ứng? Tôi đã không nghĩ về các trang bẩn như tôi thậm chí không thể làm cho nó hoạt động cho lần đọc (cat các tập tin). Bất kỳ con trỏ nào cũng hữu ích.

P.S. - Tôi đang sử dụng Linux 4.0 cho dự án này.

+2

Trên liên quan lưu ý, làm kiểm tra việc thực hiện 'drop_caches' trong hạt nhân tức là làm thế nào nó hoàn thành một cái gì đó tương tự. http://stackoverflow.com/a/32288932/319204 – TheCodeArtist

+0

@TheCodeArtist Cảm ơn bạn! Tôi chắc chắn sẽ thử cái này. – Singh

+0

Tôi nghi ngờ hệ điều hành có thể đưa ra các giả định về tệp đang mở và đang tự sử dụng bộ nhớ, bất kể bạn yêu cầu gì, chỉ để cải thiện hiệu suất truy cập. Xem những gì nó làm mà không yêu cầu bất kỳ bộ nhớ cache, (chỉ cần mở tập tin) và kiểm tra bộ nhớ miễn phí. Sau đó thử một tập tin hoàn toàn lớn, và xem chỉ có bao nhiêu hệ điều hành đặt sang một bên cho bộ nhớ cache trong trường hợp này. Đó có thể là kích thước phù hợp nhất của bạn để làm việc. Nếu không, bạn có thể phải tạo không gian bộ nhớ riêng của bộ nhớ riêng của mình và sao chép trong một chút nhỏ mà bạn muốn lưu vào bộ nhớ cache, sau đó đóng kết nối tệp. –

Trả lời

Các vấn đề liên quan