lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.21.2003162107580.97351@chino.kir.corp.google.com>
Date:   Mon, 16 Mar 2020 21:09:48 -0700 (PDT)
From:   David Rientjes <rientjes@...gle.com>
To:     Tetsuo Handa <penguin-kernel@...ove.sakura.ne.jp>
cc:     Andrew Morton <akpm@...ux-foundation.org>,
        Vlastimil Babka <vbabka@...e.cz>,
        Michal Hocko <mhocko@...nel.org>, linux-kernel@...r.kernel.org,
        linux-mm@...ck.org
Subject: Re: [patch] mm, oom: prevent soft lockup on memcg oom for UP
 systems

On Tue, 17 Mar 2020, Tetsuo Handa wrote:

> > 	if (!fatal_signal_pending(current))
> > 		schedule_timeout_killable(1);
> > 
> > So we don't have this reliance on all other memory chargers to yield when 
> > their charge fails and there is no delay for victims themselves.
> 
> I see. You want below functions for environments where current thread can
> fail to resume execution for long if current thread once reschedules (e.g.
> UP kernel, many threads contended on one CPU).
> 
> /*
>  * Give other threads CPU time, unless current thread was already killed.
>  * Used when we prefer killed threads to continue execution (in a hope that
>  * killed threads terminate quickly) over giving other threads CPU time.
>  */
> signed long __sched schedule_timeout_killable_expedited(signed long timeout)
> {
> 	if (unlikely(fatal_signal_pending(current)))
> 		return timeout;
> 	return schedule_timeout_killable(timeout);
> }
> 

I simply want the

	if (!fatal_signal_pending(current))
		schedule_timeout_killable(1);

after dropping oom_lock because I don't know that a generic function would 
be useful outside of this single place.  If it becomes a regular pattern, 
for whatever reason, I think we can consider a new schedule_timeout 
variant.

> /*
>  * Latency reduction via explicit rescheduling in places that are safe,
>  * but becomes no-op if current thread was already killed. Used when we
>  * prefer killed threads to continue execution (in a hope that killed
>  * threads terminate quickly) over giving other threads CPU time.
>  */
> int cond_resched_expedited(void)
> {
> 	if (unlikely(fatal_signal_pending(current)))
> 		return 0;
> 	return cond_resched();
> }
> 
> > 
> >  [ I'll still propose my change that adds cond_resched() to 
> >    shrink_node_memcgs() because we can see need_resched set for a 
> >    prolonged period of time without scheduling. ]
> 
> As long as there is schedule_timeout_killable(), I'm fine with adding
> cond_resched() in other places.
> 

Sounds good, thanks Tetsuo.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ