Có cách nào để nói với nhân Linux chỉ sử dụng một tỷ lệ bộ nhớ nhất định cho bộ đệm bộ đệm không? Tôi biết /proc/sys/vm/drop_caches
có thể được sử dụng để xóa bộ nhớ cache tạm thời, nhưng có bất kỳ cài đặt cố định nào ngăn nó phát triển lên hơn 50% bộ nhớ chính không?
Lý do tôi muốn làm điều này là vì tôi có một máy chủ chạy Ceph OSD liên tục phục vụ dữ liệu từ đĩa và quản lý để sử dụng toàn bộ bộ nhớ vật lý làm bộ đệm bộ đệm trong vài giờ. Đồng thời, tôi cần chạy các ứng dụng sẽ phân bổ một lượng lớn (vài 10 GB GB) bộ nhớ vật lý. Trái với suy nghĩ phổ biến (xem lời khuyên đưa ra gần như tất cả các câu hỏi liên quan đến bộ đệm bộ đệm), việc tự động giải phóng bộ nhớ bằng cách loại bỏ các mục bộ nhớ cache sạch không phải là ngay lập tức: bắt đầu ứng dụng của tôi có thể mất đến một phút khi bộ đệm bộ đệm đầy ( *), trong khi sau khi xóa bộ đệm (sử dụng echo 3 > /proc/sys/vm/drop_caches
), cùng một ứng dụng bắt đầu gần như ngay lập tức.
(*) Trong thời gian khởi động này, ứng dụng bị lỗi trong bộ nhớ mới nhưng dành 100% thời gian cho kernel, theo Vtune trong một chức năng được gọi pageblock_pfn_to_page
. Chức năng này dường như có liên quan đến việc nén bộ nhớ cần thiết để tìm các trang lớn, điều này khiến tôi tin rằng thực sự sự phân mảnh là vấn đề.