Re: [patch] memcg: give current access to memory reserves if it's trying to die

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 17 Mar 2011, Andrew Morton wrote:

> > diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> > --- a/mm/oom_kill.c
> > +++ b/mm/oom_kill.c
> > @@ -537,6 +537,17 @@ void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask)
> >  	unsigned int points = 0;
> >  	struct task_struct *p;
> >  
> > +	/*
> > +	 * If current has a pending SIGKILL, then automatically select it.  The
> > +	 * goal is to allow it to allocate so that it may quickly exit and free
> > +	 * its memory.
> > +	 */
> > +	if (fatal_signal_pending(current)) {
> > +		set_thread_flag(TIF_MEMDIE);
> > +		boost_dying_task_prio(current, NULL);
> > +		return;
> > +	}
> > +
> >  	check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, 0, NULL);
> >  	limit = mem_cgroup_get_limit(mem) >> PAGE_SHIFT;
> >  	read_lock(&tasklist_lock);
> 
> The code duplication seems a bit gratuitous.
> 

I thought it was small enough to appear in two functions as opposed to 
doing something like

	static bool oom_current_has_sigkill(void)
	{
		if (fatal_signal_pending(current)) {
			set_thread_flag(TIF_MEMDIE);
			boost_dying_task_prio(current, NULL);
			return true;
		}
		return false;
	}

then doing

	if (oom_current_has_sigkill())
		return;

in mem_cgroup_out_of_memory() and out_of_memory().  If you'd prefer 
oom_current_has_sigkill(), let me know and I'll propose an alternate 
version.

> Was it deliberate that mem_cgroup_out_of_memory() ignores the oom
> notifier callbacks?
> 

Yes, the memory controller requires that something be killed (or, in the 
above case, simply allowing something to exit) to return under the hard 
limit; that's why we automatically kill current if nothing else eligible 
is found in select_bad_process().  Using oom notifier callbacks wouldn't 
guarantee there was freeing that would impact this memcg anyway.

> (Why does that notifier list exist at all?  Wouldn't it be better to do
> this via a vmscan shrinker?  Perhaps altered to be passed the scanning
> priority?)
> 

A vmscan shrinker seems more appropriate in the page allocator and not the 
oom killer before we call out_of_memory() and, as already mentioned, 
oom_notify_list doesn't do much at all (and is the wrong thing to do for 
cpusets or mempolicy ooms).  I've been reluctant to remove it because it 
doesn't have any impact for our systems but was obviously introduced for 
somebody's advantage in a rather unintrusive way. 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]