เรามีระบบลินุกซ์ในตัว (yocto 1.8) ที่ทำงานบนบอร์ด i.MX6 พร้อม RAM ขนาด 1GB เคอร์เนลถูกกำหนดค่าให้มี CMA สงวนไว้ 320MByte และไม่มีการสลับ เคอร์เนล 3.10.53
เมื่อเรารันแอปพลิเคชันทดสอบขนาดเล็กเพียงเพื่อกินหน่วยความจำเราจะเห็นพฤติกรรมแปลก ๆ เมื่อเราเข้าถึงฟรีประมาณ 250MByte บัฟเฟอร์ / แคชเริ่มลดลงและหน่วยความจำว่างจะอยู่ที่ประมาณ 250MByte หากเราจัดสรรหน่วยความจำไว้เรื่อย ๆ ระบบก็จะเฉื่อยมากขึ้นเรื่อย ๆ จนกว่ามันจะหยุดชะงักอย่างสมบูรณ์หรือ OOM killer kicks
ฉันคิดว่าสิ่งที่ฉันสงสัยคือวิธีการทำงานของ CMA จริงเพราะเราปิดการใช้งาน CMA เราจะเห็นพฤติกรรมเช่นเดียวกับข้างต้น แต่มันเกิดขึ้นเมื่อเรามีประมาณ 40-50MBytes และฉันเชื่อว่าเป็นที่คาดหวัง หลังจากอ่านเกี่ยวกับ CMA ฉันเชื่อว่าสระไม่ควรถูกระงับอย่างสมบูรณ์จากระบบมันควรจะยังคงทำงานได้สำหรับแคช ฯลฯ แต่ในกรณีของเราดูเหมือนว่าระบบจะทิ้งแคชในขณะที่หน่วยความจำเหลืออยู่มากมาย
ไม่มีใครรู้ว่านี่เป็นพฤติกรรมที่คาดหวังหรือหากมีสถานที่ที่ดีกว่าที่จะวางคำถามนี้
แก้ไข: ดูเหมือนว่าเราได้เปลี่ยนค่าของ vm.min_free_kbytes เป็น 32MBytes การเปลี่ยนกลับเป็นค่าเริ่มต้นดูเหมือนจะช่วยให้เราสามารถใช้หน่วยความจำทั้งหมด
เรายังไม่แน่ใจว่า CMA นั้นมีผลกระทบต่อระบบอย่างไร แต่อาจไม่สำคัญอีกต่อไป