โดยปกติแล้ว Linux Kernel จะล้างแคชการเขียนหากมีการดำเนินการเกินเวลาที่กำหนดหรือแคชเต็ม สิ่งนี้นำไปสู่การหยุดชะงักของ HDD เนื่องจากกระบวนการเขียนทำให้กระบวนการอ่านช้าลงมาก
นั่นเป็นเหตุผลที่ฉันต้องการหลีกเลี่ยงการล้างแคชการเขียนหากมีกิจกรรมการอ่านเพียงเล็กน้อย
เนื่องจากฉันมี RAM 40 GB จึงไม่น่ามีปัญหา ความคิดของฉันคือตั้งเวลาจำกัดเป็นห้านาที ปรับขนาดแคชการเขียนตามความต้องการของคุณ และเขียนสคริปต์ที่ล้างแคชเฉพาะในกรณีที่มีกิจกรรมการอ่านเป็น 0 ฉันไม่รู้ว่าจะทำอย่างไรเชลล์จะสั่ง ซิงค์
ให้ประสิทธิภาพที่ดีเพียงพอ?
เป้าหมายของฉันคือการมีแคชเขียนที่มีขนาด 1, 2 GB การล้างนี้จะใช้เวลานาน มีอะไรที่สามารถหยุดได้ทันทีที่มีการอ่านกิจกรรมอีกครั้งหรือ PSI ของดิสก์ที่สูงขึ้น (นั่นจะตอบสนองเร็วพอไหม??)
ฉันมีไดรฟ์ Seagate (ไม่ใช่ smr?) สองตัว: ST1000DM010-2EP102 - แต่ฉันเดาว่าข้อมูลนั้นไม่จำเป็น
กับ อัตราส่วนสกปรก
ขณะนี้ฉันตั้งค่าขนาดแคชแบบไดนามิก
เสียงสะท้อน 360000 > /proc/sys/vm/dirty_expire_centisecs
เสียงสะท้อน 360000 > /proc/sys/vm/dirty_writeback_centisecs
สิ่งนี้จะกำหนดเวลาสูงสุดในการเริ่มล้างแคชการเขียนเป็น 1 ชั่วโมง
อ้างอิง: https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching
คำสั่งที่เป็นประโยชน์:
ด้วยคำสั่งต่อไปนี้ คุณสามารถดูจำนวนแคชการเขียน:
แมว /proc/meminfo | สกปรก
เอาท์พุต:
สกปรก: 104 กิโลไบต์
แต่ก็ไม่สำคัญมาก..
ฉันติดอยู่ตรงไหน?
ฉันต้องการที่จะสามารถยกเลิกคำสั่งซิงค์ได้เกือบจะทันที (เป็นไปได้ไหม) และฉันต้องการทราบว่ามีการอ่านกระบวนการหรือไม่ นั่นคือทั้งหมดที่ฉันต้องเขียนสคริปต์
ฉันพบสคริปต์เก่าที่สามารถตรวจสอบกิจกรรมการอ่าน: awk '{พิมพ์ $1}' /sys/block/sdb/stat
วิธีการใช้นี้?
ถ้า [ $old-value -lt $new-value ];แล้ว COMMAND;fi