On 10/5/21 4:52 PM, Vasily Averin wrote: > Huge vmalloc allocation on heavy loaded node can lead to a global > memory shortage. Task called vmalloc can have worst badness and > be selected by OOM-killer, however taken fatal signal does not > interrupt allocation cycle. Vmalloc repeat page allocaions > again and again, exacerbating the crisis and consuming the memory > freed up by another killed tasks. > > After a successful completion of the allocation procedure, a fatal > signal will be processed and task will be destroyed finally. > However it may not release the consumed memory, since the allocated > object may have a lifetime unrelated to the completed task. > In the worst case, this can lead to the host will panic > due to "Out of memory and no killable processes..." > > This patch allows OOM-killer to break vmalloc cycle, makes OOM more > effective and avoid host panic. It does not check oom condition directly, > however, and breaks page allocation cycle when fatal signal was received. > > This may trigger some hidden problems, when caller does not handle > vmalloc failures, or when rollaback after failed vmalloc calls own > vmallocs inside. However all of these scenarios are incorrect: > vmalloc does not guarantee successful allocation, it has never been called > with __GFP_NOFAIL and threfore either should not be used for any rollbacks > or should handle such errors correctly and not lead to critical > failures. I briefly checked this patch together with v3 memcg: prohibit unconditional exceeding the limit of dying tasks over v5.15-rc4. I executed LTP on host, all oom, cgroup and memcg tests was successfully finished. and then experimented with memcg limited LXC containers. I did not noticed any troubles on my test node. Thank you, Vasily Averin