Thread (18 messages) 18 messages, 3 authors, 2021-11-29

Re: [PATCH] mm: reduce spinlock contention in release_pages()

From: Hao Lee <hidden>
Date: 2021-11-26 06:59:55
Also in: linux-mm, lkml

On Fri, Nov 26, 2021 at 2:04 AM Matthew Wilcox [off-list ref] wrote:
On Thu, Nov 25, 2021 at 08:02:38AM +0000, Hao Lee wrote:
quoted
On Thu, Nov 25, 2021 at 03:30:44AM +0000, Matthew Wilcox wrote:
quoted
On Thu, Nov 25, 2021 at 11:24:02AM +0800, Hao Lee wrote:
quoted
On Thu, Nov 25, 2021 at 12:31 AM Michal Hocko [off-list ref] wrote:
quoted
We do batch currently so no single task should be
able to monopolize the cpu for too long. Why this is not sufficient?
uncharge and unref indeed take advantage of the batch process, but
del_from_lru needs more time to complete. Several tasks will contend
spinlock in the loop if nr is very large.
Is SWAP_CLUSTER_MAX too large?  Or does your architecture's spinlock
implementation need to be fixed?
My testing server is x86_64 with 5.16-rc2. The spinlock should be normal.

I think lock_batch is not the point. lock_batch only break spinning time
into small parts, but it doesn't reduce spinning time. The thing may get
worse if lock_batch is very small.
OK.  So if I understand right, you've got a lot of processes all
calling exit_mmap() at the same time, which eventually becomes calls to
unmap_vmas(), unmap_single_vma(), unmap_page_range(), zap_pte_range(),
tlb_flush_mmu(), tlb_batch_pages_flush(), free_pages_and_swap_cache(),
release_pages(), and then you see high contention on the LRU lock.
Exactly.
Your use-case doesn't seem to mind sleeping (after all, these processes
are exiting).
Yes!
 So we could put a semaphore in exit_mmap() to limit the
number of simultaneous callers to unmap_vmas().  Do you want to try
that out and see if it solves your problem?  You might want to make it
a counting semaphore (eg permit two tasks to exit at once) rather than
a mutex.  But maybe a mutex is just fine.
This is really a good idea. My train of thought was trapped in reducing the
lock contention. I will try to implement this idea and see if the service
stability will be improved much. Thanks for your help!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help