On Wed 27-01-21 12:08:50, Christian König wrote:
Am 27.01.21 um 12:02 schrieb Michal Hocko:
quoted
On Wed 27-01-21 11:53:55, Christian König wrote:
[...]
quoted
In general processes are currently not held accountable for memory they
reference through their file descriptors. DMA-buf is just one special case.
True
quoted
In other words you can currently do something like this
fd = memfd_create("test", 0);
while (1)
write(fd, buf, 1024);
and the OOM killer will terminate random processes, but never the one
holding the memfd reference.
memfd is just shmem under cover, no? And that means that the memory gets
accounted to MM_SHMEMPAGES. But you are right that this in its own
doesn't help much if the fd is shared and the memory stays behind a
killed victim.
I think so, yes. But I just tested this and it doesn't seem to work
correctly.
When I run the few lines above the OOM killer starts to terminate processes,
but since my small test program uses very very little memory basically
everything else gets terminated (including X, desktop, sshd etc..) before it
is terminated as well.
Something worth looking into. Maybe those pages are not really accounted
properly after all. Can you send a separate email about details with oom
reports please?
--
Michal Hocko
SUSE Labs