Messages in this thread Patch in this message | | | Date | Wed, 24 Nov 2021 15:57:58 +0000 | From | Matthew Wilcox <> | 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)
| |