[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YZ5hBtWPBpHDWzE4@casper.infradead.org>
Date: Wed, 24 Nov 2021 15:57:58 +0000
From: Matthew Wilcox <willy@...radead.org>
To: Hao Lee <haolee.swjtu@...il.com>
Cc: linux-mm@...ck.org, hannes@...xchg.org, mhocko@...nel.org,
vdavydov.dev@...il.com, shakeelb@...gle.com,
cgroups@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] mm: reduce spinlock contention in release_pages()
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.
> +++ 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