https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
Teorik olarak,
memfd_create()
yeni sistem çağrıları yapmadan [ ] davranışını şu şekilde başarabilirsiniz :
int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU);
(Bir tmpfs'yi daha portatif olarak garanti etmek için " /dev/shm
" yerine " /tmp
" kullanabiliriz).
Bu nedenle, en önemli soru neden üçüncü bir cehenneme ihtiyacımız var?
[...]
- Yedekleme belleği, dosyanın sahibi olan ve mount-kotalara tabi olmayan işleme göre hesaplanır.
^ Bu cümlenin ilk kısmına güvenilemeyeceğini düşünmekte haklı mıyım?
Memfd_create () kodu anlamıyla bir "olarak uygulanmaktadır çekirdek iç olmalıdır [a] tmpfs içinde bağlantısız dosya yaşayan ". Kod izleme, ben LSM kontrolleri uygulamak farklı olduğunu anlıyorum, ayrıca blog yazısı açıklamaya devam gibi memfds "mühürler" desteklemek için oluşturulur. Ancak, ben memfds olduğunu son derece şüpheci hesaba prensipte bir tmpfile farklı şekilde.
Özellikle, OOM katili vurma geldiğinde, memfds tarafından tutulan hafızayı açıklayacağını sanmıyorum. Bu, RAM'in% 50'sine kadar çıkabilir - tmpfs için size = seçeneğinin değeri . Çekirdek, dahili tmpfs için farklı bir değer ayarlamaz, bu nedenle varsayılan% 50 boyutunu kullanır.
Bu yüzden genel olarak büyük bir memfd içeren süreçler bekleyebiliriz, ancak başka önemli bellek ayırma işlemleri OOM tarafından öldürülmeyecektir. Bu doğru mu?