มีวิธีบอกเคอร์เนล Linux ให้ใช้หน่วยความจำเปอร์เซ็นต์หนึ่งสำหรับแคชบัฟเฟอร์หรือไม่? ฉันรู้ว่า/proc/sys/vm/drop_caches
สามารถใช้ล้างแคชชั่วคราวได้ แต่มีการตั้งค่าถาวรใด ๆ ที่ป้องกันไม่ให้เพิ่มขึ้นเป็นมากกว่า 50% ของหน่วยความจำหลักหรือไม่
เหตุผลที่ฉันต้องการทำเช่นนี้คือฉันมีเซิร์ฟเวอร์ที่ใช้ Ceph OSD ซึ่งให้บริการข้อมูลจากดิสก์อย่างต่อเนื่องและจัดการเพื่อใช้หน่วยความจำกายภาพทั้งหมดเป็นบัฟเฟอร์แคชภายในไม่กี่ชั่วโมง ในเวลาเดียวกันฉันจำเป็นต้องเรียกใช้แอปพลิเคชันที่จะจัดสรรหน่วยความจำกายภาพจำนวนมาก (หลาย 10s of GB) ตรงกันข้ามกับความเชื่อที่ได้รับความนิยม (ดูคำแนะนำในเกือบทุกคำถามเกี่ยวกับบัฟเฟอร์แคช) การเพิ่มหน่วยความจำโดยอัตโนมัติโดยการทิ้งรายการแคชสะอาดไม่ได้เกิดขึ้นทันที: การเริ่มต้นแอปพลิเคชันของฉันอาจใช้เวลาหนึ่งนาทีเมื่อบัฟเฟอร์แคชเต็ม *) ในขณะที่หลังจากล้างแคช (โดยใช้echo 3 > /proc/sys/vm/drop_caches
) แอปพลิเคชันเดียวกันจะเริ่มต้นขึ้นทันที
(*) ในช่วงนาทีของเวลานี้เริ่มต้นโปรแกรมจะ faulting ในหน่วยความจำใหม่ แต่ใช้จ่าย 100% ของเวลาใน kernel ตาม VTune pageblock_pfn_to_page
ในการทำงานที่เรียกว่า ฟังก์ชั่นนี้ดูเหมือนจะเกี่ยวข้องกับการบีบอัดหน่วยความจำที่จำเป็นในการค้นหาหน้าเว็บขนาดใหญ่ซึ่งทำให้ฉันเชื่อว่าการแตกแฟรกเมนต์เป็นปัญหา