Trốn bộ nhớ cache Linux


8

Nhìn vào cách bộ đệm VFS trên máy Linux của tôi hoạt động, tôi có thể thấy rằng ngay cả khi nhàn rỗi một cách hiệu quả (crond và hầu hết các trình tiện ích khác đã dừng, giao diện giảm), lượng bộ nhớ trống tăng dần ngụ ý rằng các mục đang bị đuổi khỏi bộ đệm.

Tôi đã làm rất nhiều việc nhưng không thể tìm thấy bất kỳ tài liệu tham khảo nào về cách điều khiển nó (trừ khi đó là tác dụng phụ của vm_swappiness). Bất cứ ai cũng có thể đưa tôi đi đúng hướng để hiểu lý do tại sao các mục bị đuổi khỏi bộ đệm khi không có nhu cầu cấp phát bộ nhớ mới?


«Ngụ ý rằng các mục đang bị đuổi khỏi bộ đệm» - tốt, trong trường hợp vmstatđó sẽ hiển thị kích thước bộ đệm tăng lên, - chúng có thực sự không?
poige

giảm chắc chắn. Có, họ đang (giảm)
symcbean

Vì vậy, bạn nói rằng mem tăng miễn phí và kích thước cache / buf đang giảm cùng một lúc, phải không?
poige

Câu trả lời:


1

swappiness chỉ ảnh hưởng đến việc bộ nhớ ứng dụng được phân bổ có bị tráo đổi để nhường chỗ cho bộ đệm hay không. vfs_cache_pressure là sysctl kiểm soát những gì bạn đang thấy.


1
Không - vfs_cache_pressure kiểm soát tỷ lệ của dữ liệu meta so với lưu giữ pagecache (ít nhất là theo các tài liệu tôi đã đọc và các thử nghiệm tôi đã chạy)
symcbean

1
Đủ công bằng. Tôi đã nghiên cứu thêm một chút và từ những gì tôi có thể thấy mọi thứ được sắp xếp vào danh sách thứ tự LRU và chỉ xem xét khi một số ngưỡng (nhân tạo hoặc vật lý) được đáp ứng hoặc vượt qua. Cho rằng, tôi cho rằng một cái gì đó vẫn đang xảy ra (như một chuỗi hạt nhân thức dậy hoặc một cái gì đó). Nếu nó cực kỳ quan trọng với bạn để tìm ra điều này thì có vẻ như có một tập lệnh systemtap được viết sẵn có tên là "mmreclaim.stp" để theo dõi các tuyên bố của người quản lý bộ nhớ. Tôi cũng chắc chắn rằng nó sẽ không thực sự hoán đổi khi sử dụng "sar -A."
Bratchley

1

Linux xóa dữ liệu từ bộ đệm trang bằng cách sử dụng một quá trình gọi là pdflush

pdflush được kiểm soát bởi các tham số từ / Proc / sys / vm

#/proc/sys/vm/dirty_expire_centisecs
The hundredth of the second after which data will be considered to be expired from the page cache and will be written at the next opportunity.

#/proc/sys/vm/dirty_writeback_centisecs`    
The hundredth of a second after which the pdflush wakes up to write data to disk.

#/proc/sys/vm/vfs_cache_pressure`    
This will reclaim dentries and inodes which are also part of the cache.

Bạn có thể kiểm tra các chủ đề sau để biết thêm thông tin:

Trình nền pdflush
Lý thuyết vận hành và điều chỉnh để tải nặng
Bộ nhớ cache Linux


Cảm ơn Joe, tuy nhiên, 2 tùy chọn đầu tiên liên quan cụ thể đến dữ liệu cần được ghi lại vào hệ thống tập tin (tức là bộ đệm ghi) không phải là dữ liệu đã được đọc và không bị thay đổi (bộ đệm đọc). Vfs_cache_pressure kiểm soát tùy chọn để loại bỏ siêu dữ liệu tệp liên quan đến nội dung tệp.
symcbean

@symcbean Bạn nói đúng. Câu trả lời nói nhiều hơn về ghi cache. Bộ đệm đọc được xóa dựa trên LRU. Tuy nhiên, Linux sử dụng Chiến lược hai danh sách dựa trên đó bộ đệm đọc đang bị xóa. Bạn có thể đọc thêm về Two-List Stragety và cách linux xóa bộ đệm đọc ở đây . Hãy cho tôi biết nếu điều này có ý nghĩa. Trong trường hợp của bạn, tôi cho rằng sau khi tất cả các quy trình bị dừng, các bộ đệm đọc này sẽ chuyển sang danh sách không hoạt động và bị xóa
Joe

cảm ơn, bài viết hay Bất kỳ ý tưởng những gì cuốn sách chương đến từ? Tuy nhiên, mặc dù nó giải thích cách một trang cụ thể được ưu tiên cho việc trục xuất, nhưng nó không thực sự giải thích lý do tại sao các trang bị đuổi khi không có nhu cầu rõ ràng về bộ nhớ. Điều gì kiểm soát quá trình "thu nhỏ bộ đệm để cung cấp thêm RAM cho các mục đích sử dụng khác"? Nó thay thế những thứ này bằng gì?
symcbean

@symcbean Việc xóa bộ nhớ cache không hoạt động ngay lập tức khi có nhu cầu về bộ nhớ. Tuy nhiên, sẽ không có ý nghĩa khi có nó trong bộ đệm khi không có ai chủ động sử dụng nó. Ở đó bởi các trang hoạt động trở thành các trang không hoạt động và cuối cùng bị đuổi. Tôi cho rằng câu hỏi của bạn bắt nguồn từ việc việc trục xuất chỉ xảy ra khi có nhu cầu về bộ nhớ. Linux sẽ xóa mọi trang không hoạt động và khi chúng có sẵn. Như [đã lưu ý trong bài viết] [ jothirams.com/linux-cached-memory/] nếu mọi thứ đang hoạt động, bạn sẽ hết bộ nhớ và OOM sẽ được gọi.
Joe
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.