[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+PpKPm4nfFM1XNifQoQT6Q_f3hQ6gSNnCgUumLDnruaLaUgvQ@mail.gmail.com>
Date: Thu, 25 Nov 2021 11:13:54 +0800
From: Hao Lee <haolee.swjtu@...il.com>
To: Matthew Wilcox <willy@...radead.org>
Cc: Linux MM <linux-mm@...ck.org>,
Johannes Weiner <hannes@...xchg.org>, mhocko@...nel.org,
vdavydov.dev@...il.com, Shakeel Butt <shakeelb@...gle.com>,
cgroups@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] mm: reduce spinlock contention in release_pages()
On Wed, Nov 24, 2021 at 11:58 PM Matthew Wilcox <willy@...radead.org> wrote:
>
> On Wed, Nov 24, 2021 at 03:19:15PM +0000, Hao Lee wrote:
> > When several tasks are terminated simultaneously, lots of pages will be
> > released, which can cause severe spinlock contention. Other tasks which
> > are running on the same core will be seriously affected. We can yield
> > cpu to fix this problem.
>
> The realtime people will eat you alive for this suggestion.
Thanks for pointing out this.
>
> > +++ b/mm/swap.c
> > @@ -960,8 +960,14 @@ void release_pages(struct page **pages, int nr)
> > if (PageLRU(page)) {
> > struct lruvec *prev_lruvec = lruvec;
> >
> > - lruvec = folio_lruvec_relock_irqsave(folio, lruvec,
> > +retry:
> > + lruvec = folio_lruvec_tryrelock_irqsave(folio, lruvec,
> > &flags);
> > + if (!lruvec) {
> > + cond_resched();
> > + goto retry;
> > + }
> > +
> > if (prev_lruvec != lruvec)
Powered by blists - more mailing lists