From: Christian Brauner <christian.brauner@ubuntu.com>
To: Michal Hocko <mhocko@suse.com>
Cc: Suren Baghdasaryan <surenb@google.com>,
mingo@kernel.org, peterz@infradead.org, tglx@linutronix.de,
esyr@redhat.com, christian@kellner.me, areber@redhat.com,
shakeelb@google.com, cyphar@cyphar.com, oleg@redhat.com,
adobriyan@gmail.com, akpm@linux-foundation.org,
ebiederm@xmission.com, gladkov.alexey@gmail.com,
walken@google.com, daniel.m.jordan@oracle.com, avagin@gmail.com,
bernd.edlinger@hotmail.de, john.johansen@canonical.com,
laoar.shao@gmail.com, timmurray@google.com, minchan@kernel.org,
kernel-team@android.com, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org, stable@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH v3 1/1] mm, oom_adj: don't loop through tasks in __set_oom_adj when not necessary
Date: Wed, 2 Sep 2020 10:52:19 +0200 [thread overview]
Message-ID: <20200902085219.7nvp2wml4wh2dojv@wittgenstein> (raw)
In-Reply-To: <20200902055302.GA6363@dhcp22.suse.cz>
On Wed, Sep 02, 2020 at 07:53:02AM +0200, Michal Hocko wrote:
> On Tue 01-09-20 18:25:58, Suren Baghdasaryan wrote:
> > Currently __set_oom_adj loops through all processes in the system to
> > keep oom_score_adj and oom_score_adj_min in sync between processes
> > sharing their mm. This is done for any task with more that one mm_users,
> > which includes processes with multiple threads (sharing mm and signals).
> > However for such processes the loop is unnecessary because their signal
> > structure is shared as well.
> > Android updates oom_score_adj whenever a tasks changes its role
> > (background/foreground/...) or binds to/unbinds from a service, making
> > it more/less important. Such operation can happen frequently.
> > We noticed that updates to oom_score_adj became more expensive and after
> > further investigation found out that the patch mentioned in "Fixes"
> > introduced a regression. Using Pixel 4 with a typical Android workload,
> > write time to oom_score_adj increased from ~3.57us to ~362us. Moreover
> > this regression linearly depends on the number of multi-threaded
> > processes running on the system.
> > Mark the mm with a new MMF_MULTIPROCESS flag bit when task is created with
> > (CLONE_VM && !CLONE_THREAD && !CLONE_VFORK). Change __set_oom_adj to use
> > MMF_MULTIPROCESS instead of mm_users to decide whether oom_score_adj
> > update should be synchronized between multiple processes. To prevent
> > races between clone() and __set_oom_adj(), when oom_score_adj of the
> > process being cloned might be modified from userspace, we use
> > oom_adj_mutex. Its scope is changed to global. The combination of
> > (CLONE_VM && !CLONE_THREAD) is rarely used except for the case of vfork().
> > To prevent performance regressions of vfork(), we skip taking oom_adj_mutex
> > and setting MMF_MULTIPROCESS when CLONE_VFORK is specified. Clearing the
> > MMF_MULTIPROCESS flag (when the last process sharing the mm exits) is left
> > out of this patch to keep it simple and because it is believed that this
> > threading model is rare. Should there ever be a need for optimizing that
> > case as well, it can be done by hooking into the exit path, likely
> > following the mm_update_next_owner pattern.
> > With the combination of (CLONE_VM && !CLONE_THREAD && !CLONE_VFORK) being
> > quite rare, the regression is gone after the change is applied.
> >
> > Fixes: 44a70adec910 ("mm, oom_adj: make sure processes sharing mm have same view of oom_score_adj")
> > Reported-by: Tim Murray <timmurray@google.com>
> > Debugged-by: Minchan Kim <minchan@kernel.org>
> > Suggested-by: Michal Hocko <mhocko@kernel.org>
> > Signed-off-by: Suren Baghdasaryan <surenb@google.com>
>
> Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
next prev parent reply other threads:[~2020-09-02 8:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-02 1:25 Suren Baghdasaryan
2020-09-02 5:53 ` Michal Hocko
2020-09-02 8:52 ` Christian Brauner [this message]
2020-09-03 14:03 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200902085219.7nvp2wml4wh2dojv@wittgenstein \
--to=christian.brauner@ubuntu.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=areber@redhat.com \
--cc=avagin@gmail.com \
--cc=bernd.edlinger@hotmail.de \
--cc=christian@kellner.me \
--cc=cyphar@cyphar.com \
--cc=daniel.m.jordan@oracle.com \
--cc=ebiederm@xmission.com \
--cc=esyr@redhat.com \
--cc=gladkov.alexey@gmail.com \
--cc=john.johansen@canonical.com \
--cc=kernel-team@android.com \
--cc=laoar.shao@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=minchan@kernel.org \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=shakeelb@google.com \
--cc=stable@vger.kernel.org \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=timmurray@google.com \
--cc=walken@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox