Re: [PATCH] mm/mmu_notifier: Remove non_block_start/end() from notifier invocation
David Woodhouse <[email protected]>
| Newsgroups | dev.linux.lists.linux-rt-devel,org.kernel.vger.kvm,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On Tue, 2026-08-11 at 13:24 -0300, Jason Gunthorpe wrote: > To be clear you should not be using any synchronize_[s]rcu() primitive > inside the invalidation callbacks. These are well known to have > multi-second delays on loaded systems which are a completely > inappropriate performance characteristic for these mm callbacks. > > This statement has nothing to do with deadlock. > > RCU is always a trade off, you can make the read side run really fast > and the write side is ghastly slow. If you can't handle the slow write > you shouldn't use RCU techniques. The multi-second horror stories are about the *global* RCU/SRCU domains, where the grace period has to wait out arbitrary readers all over the kernel. This is not that. It is a dedicated srcu_struct, private to one VM, and its entire reader population is a handful of KVM fast paths that until now were under irqsave rwlocks. Each of those read-side sections is a few hundred instructions over a single page of guest memory — they never allocate, never take a lock, never sleep. The number of readers in existence at any instant is bounded by the number of vCPUs plus a few interrupt contexts, and the grace period is bounded by the longest of those sections. I should actually change to synchronize_srcu_expedited() — and perhaps we could ponder an even more expedited mode which does the first check directly and in the common case doesn't even *use* the workqueue — but even without doing that, the write side is never going to be as "ghastly slow" as you seem to think, *even* for the tiny handful of virtual addresses for which it even kicks in at all.
smime.p7s
(application/pkcs7-signature, 6 KB) - not displayed