https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
ในทางทฤษฎีคุณสามารถบรรลุ [
memfd_create()
] พฤติกรรมโดยไม่ต้องแนะนำ syscalls ใหม่เช่นนี้
int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU);
(หมายเหตุเพื่อรับประกัน tmpfs มากขึ้นที่นี่เราสามารถใช้ " /dev/shm
" แทน " /tmp
")
ดังนั้นคำถามที่สำคัญที่สุดคือทำไมเราถึงต้องการวิธีที่สาม?
[ ... ]
- หน่วยความจำสำรองจะถูกประมวลผลโดยกระบวนการที่เป็นเจ้าของไฟล์และไม่อยู่ภายใต้การเมาต์โควต้า
ฉันคิดถูกแล้วว่าส่วนแรกของประโยคนี้ไม่สามารถพึ่งพาได้
รหัสmemfd_create () มีการใช้งานอย่างแท้จริงว่าเป็น " ไฟล์ที่ไม่เชื่อมโยงอยู่ใน [a] tmpfs ซึ่งต้องเป็นเคอร์เนลภายใน " การติดตามรหัสฉันเข้าใจว่ามันไม่ได้มีการใช้การตรวจสอบ LSM แตกต่างกันนอกจากนี้ memfds ยังถูกสร้างขึ้นเพื่อรองรับ "แมวน้ำ" เนื่องจากโพสต์บล็อกอธิบายต่อไป อย่างไรก็ตามฉันสงสัยอย่างมากว่า memfds มีสัดส่วนแตกต่างจาก tmpfile ในหลักการ
โดยเฉพาะอย่างยิ่งเมื่อOOM-killer เข้ามากระแทกฉันไม่คิดว่ามันจะคำนึงถึงหน่วยความจำที่ memfds จัด ซึ่งอาจรวมถึง 50% ของแรม - ค่าของsize = ตัวเลือกสำหรับการ tmpfs เคอร์เนลไม่ได้ตั้งค่าที่แตกต่างกันสำหรับ tmpfs ภายในดังนั้นมันจะใช้ขนาดเริ่มต้น 50%
ดังนั้นฉันคิดว่าโดยทั่วไปเราสามารถคาดหวังได้ว่ากระบวนการที่มีหน่วยความจำขนาดใหญ่ แต่ไม่มีการจัดสรรหน่วยความจำที่สำคัญอื่น ๆ จะไม่ถูก OOM ถูกต้องหรือไม่