On Wed, Nov 27, 2013 at 01:38:59PM -0800, David Rientjes wrote: > On Wed, 27 Nov 2013, Johannes Weiner wrote: > > > > Ah, this is because of 3168ecbe1c04 ("mm: memcg: use proper memcg in limit > > > bypass") which just bypasses all of these allocations and charges the root > > > memcg. So if allocations want to bypass memcg isolation they just have to > > > be __GFP_NOFAIL? > > > > I don't think we have another option. > > > > We don't give __GFP_NOFAIL allocations access to memory reserves in the > page allocator and we do call the oom killer for them so that a process is > killed so that memory is freed. Why do we have a different policy for > memcg? Oh boy, that's the epic story we dealt with all throughout the last merge window... ;-) __GFP_NOFAIL allocations might come in with various filesystem locks held that could prevent an OOM victim from exiting, so a loop around the OOM killer in an allocation context is prone to loop endlessly. Because of this, I changed memcg to never invoke OOM kills from the allocation context anymore but save it for the end of the page fault handler. __GFP_NOFAIL allocations can not fail and thus do not reach the end of the page fault, so no OOM kill invocation possible. Arguably, the page allocator should also just return NULL and leave OOM killing to pagefault_out_of_memory(), but it's much less likely to get stuck since the overall system has more chances of producing free memory even without an OOM kill than a memcg with a single process and no swap for example. -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html