Thông thường, Nhân Linux sẽ xóa bộ đệm ghi nếu vượt quá giới hạn thời gian đã chỉ định hoặc bộ đệm đầy. Điều này dẫn đến việc bị đình trệ với ổ cứng vì quá trình ghi khiến quá trình đọc chậm hơn nhiều.
Đó là lý do tại sao tôi muốn tránh xóa bộ đệm ghi nếu chỉ có một chút hoạt động đọc.
Vì tôi có 40 GB RAM nên đây không phải là vấn đề. Suy nghĩ của tôi về điều đó sẽ là đặt giới hạn thời gian thành năm phút, điều chỉnh kích thước bộ đệm ghi theo nhu cầu của bạn và viết một tập lệnh CHỈ xóa bộ đệm nếu có 0 hoạt động đọc. Tôi không biết làm thế nào, lệnh shell sẽ đồng bộ hóa
cung cấp hiệu suất đủ tốt?
Mục tiêu của tôi là có bộ đệm ghi với kích thước như 1, 2 GB. Việc xả nước này sẽ mất nhiều thời gian. Có bất cứ điều gì có thể dừng lại ngay khi có hoạt động đọc lại hoặc PSI đĩa cao hơn (liệu điều đó có phản ứng đủ nhanh không ??)
Tôi có hai ổ đĩa Seagate (không phải smr?): ST1000DM010-2EP102 - nhưng tôi đoán thông tin đó là không cần thiết.
Với dirty_ratio
Tôi hiện đang đặt kích thước bộ đệm động.
tiếng vang 360000 > /proc/sys/vm/dirty_expire_centisecs
tiếng vang 360000 > /proc/sys/vm/dirty_writeback_centisecs
Điều này sẽ đặt thời gian tối đa để bắt đầu xóa bộ đệm ghi thành 1 giờ.
Thẩm quyền giải quyết: https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching
Các lệnh hữu ích:
Với lệnh sau, bạn có thể thấy có bao nhiêu trong bộ đệm ghi:
mèo /proc/meminfo | grep Bẩn thỉu
Đầu ra:
Bẩn: 104 kB
Nhưng điều này không quan trọng lắm..
Tôi đang mắc kẹt ở đâu?
Tôi muốn có thể hủy gần như ngay lập tức lệnh đồng bộ hóa (điều này thậm chí có thể thực hiện được không) và tôi muốn biết liệu có quá trình đọc hay không. Đó là tất cả những gì tôi cần để viết kịch bản.
Tôi đã tìm thấy một tập lệnh cũ có thể giám sát hoạt động đọc: awk '{in $1}' /sys/block/sdb/stat
Làm thế nào để sử dụng cái này?
nếu [ $old-value -lt $new-value ];thì LỆNH;fi