https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
从理论上讲,您可以在
memfd_create()
不引入新系统调用的情况下实现[ ]行为,如下所示:
int fd = open("/tmp", O_RDWR | O_TMPFILE | O_EXCL, S_IRWXU);
(请注意,为了在此处更方便地保证tmpfs,我们可以使用“ /dev/shm
”代替“ /tmp
”)。
因此,最重要的问题是为什么我们到底需要第三种方式?
[...]
- 后备内存用于拥有文件且不受安装配额限制的进程。
^我认为这句话的第一部分不值得依靠吗?
所述memfd_create()的代码被作为“的字面实施链接的文件居住在[α] TMPFS必须是内核内部 ”。跟踪代码,我知道它与不实施LSM检查有所不同,正如博客文章继续说明的那样,它还创建了memfds以支持“密封”。但是,我非常怀疑memfds正在考虑不同的,以原则上TMPFILE。
具体来说,当OOM杀手敲门时,我认为它不会解决memfds持有的内存问题。这可能总计高达RAM的50%-tmpfs的size = option的值。内核不会为内部tmpfs设置其他值,因此它将使用默认大小50%。
因此,我认为我们通常可以期望拥有大memfd的进程,但是没有其他重要的内存分配不会被OOM杀死。那是对的吗?