Re: [RFC] KVM: x86/mmu: Prefetch forward run of pages on TDP page faults

"Marangoni, Marco" <[email protected]>
Newsgroups org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <GV2PR06MB10711C9FE46F33B0613DCB66FB9AF2@GV2PR06MB10711.eurprd06.prod.outlook.com>
Thanks for the replies!

On Tue, Aug 25, 2026, Sean Christopherson <[email protected]> wrote:
>
> On Tue, Aug 25, 2026, Marco Marangoni wrote:
> > It's worth mentioning that I also evaluated using the existing
> > KVM_PRE_FAULT_MEMORY ioctl, but this doesn't work well for our use-case, as
> > it requires the vCPU to be paused.
>
> What about if/when KVM Userfault[*] comes along?  I.e. pre-fault memory when the
> vCPU exits to userspace.

KVM Userfault + KVM_PRE_FAULT_MEMORY is a valid suggestion, however if possible we'd like to have _both_ async page faults and prefetching.
I haven't tested async PF together with prefetching, but tested separately, both improvements yield great results, so it would be a shame to have to choose.

On Tue, Aug 25, 2026, James Houghton <[email protected]> wrote:
> I think part of the problem in this case is that UFFDIO_COPY will
> install 4K pages (IIRC), I think a more natural way to fix this
> problem is to:
> 
> 1. MADV_COLLAPSE after doing UFFDIO_COPY.
> 2. Make UFFDIO_COPY install PMDs when it is able to do so.
> 
> These don't solve the exact same problem, but really userfaultfd
> should already try to install PMDs when it can (#2). If we have #2, #1
> is mostly a no-op.
> 
> What do you think?

Directly installing PMDs after an UFFD_COPY is something I already investigated. I didn't mention it originally, since it touches exclusively the MM module.
For some context, with that approach, in the same benchmarks, fault latency on nested is reduced by 92%, and by 44% on metal, which is significantly better than my proposal (which "only" improves by 75% and 22% respectively).
However, that approach only works when the copy is done in multiples of 2MiB, and for some Firecracker use-cases, that's a no-go (I can elaborate further if necessary, but the main problem is an explosion in incremental snapshots size when managing memory in big chunks).
I might pursue this proposal in a separate patch, however I'd love to work out a solution that can be applied when userfaultfd works with smaller chunk sizes.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.