From: Vincent Donnefort <vdonnefort@google.com>
To: Fuad Tabba <fuad.tabba@linux.dev>
Cc: maz@kernel.org, oupton@kernel.org, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, joey.gouly@arm.com,
seiden@linux.ibm.com, suzuki.poulose@arm.com,
yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org,
kernel-team@android.com, qperret@google.com
Subject: Re: [PATCH v4 10/17] KVM: arm64: Add a shrinker for pKVM
Date: Tue, 25 Aug 2026 09:20:15 +0100 [thread overview]
Message-ID: <ao1QPyLXVGuH1XLn@google.com> (raw)
In-Reply-To: <CA+EHjTz3Fua-vSezqu3ennb1bZpUjCopE0Ud8N3ssFUrRGNZ-A@mail.gmail.com>
On Tue, Aug 25, 2026 at 08:40:03AM +0100, Fuad Tabba wrote:
> On Tue, 25 Aug 2026 at 08:22, Vincent Donnefort <vdonnefort@google.com> wrote:
> ...
> > > > > Nothing marks the pages a top-up just put in allocator->mc as spoken
> > > > > for, and hyp_allocator_reclaim() ends with an unbounded drain of it,
> > > > > so a shrink with target 1 hands back the lot. Land that between a
> > > > > top-up and the retry it was for, and the retry asks again, and
> > > > > pkvm_call_hyp_req() goes round.
> > > >
> > > > Sorry, I am not sure I follow here.
> > > >
> > > > IIRC, the shrinker will only reclaim half of what is available. So the pressure
> > > > should be proportional to what is available and limit races with topup!
> > >
> > > It's the ordering, not the amount.
> >
> > Do you think we should first try to reclaim from the mapped pages before
> > draining the allocator->mc?
> >
> > Mapped pages are more valuable hence why I have started with allocator->mc.
> >
> > But, it is true it might make sense. It is unlikely to have pages left unused
> > into that mc. If that mc has been topped-up that's because it is about to be
> > allocated from...
>
> I think that would work, as long as the ULONG_MAX drain at the tail of
> hyp_allocator_reclaim() is bounded too. The memcache is LIFO, so the
> pages hyp_allocator_unmap() stages sit on top of the top-up ones, and
> draining just what the chunk loop reclaimed leaves the rest alone.
>
> It would still fall through to the top-up pages once the chunks run
> out, which is where your last point comes in. hyp_allocator_map() only
> raises a request when it finds the mc empty, so pages sitting in there
> are ones a top-up just put there for a retry. Could the reclaim leave
> them alone altogether, and drop the mc.nr_pages term v4 added to
> hyp_allocator_reclaimable(), which is what advertises them to the
> shrinker?
There's nothing that prevents a users from topping-up the allocator mc... but to
never actually use the memory. That's why I think it is better to drain it.
>
> > >
> > > topup and its retry are separate hypercalls, lock dropped between
> > > them, so a shrink on another CPU can slip in, right? .
> > > hyp_allocator_reclaim() drains allocator->mc, where the topup pages
> > > sit, before any chunk, so half still comes out of them first: a target
> > > of 1 fails the retry.
> >
> > I do not see where a target == 1 fails.
>
> It's the retry that fails, not the reclaim. With target == 1,
> hyp_allocator_drain_memcache() pops one page and target is done, so
> the chunk loop never runs. But the top-up was sized to the exact
> shortfall, so the retry now runs the mc dry one page early, sets
> topup_needed = 1, returns -ENOMEM again, and pkvm_call_hyp_req() goes
> round for another top-up.
>
> Nothing errors out, it just doesn't converge for as long as the
> shrinker keeps pace.
>
> Keep in mind, I am not as familiar with this code as you are. So I
> might be completely off here :)
Ha yes, a concurrent topup with shrinking wouldn't cooperate well and I am not
sure how better we can do. But note the shrinker always "scans" half of the
reclaimable memory. So it is unlikely a user needs to top it up during
shrinking: if we reclaim hyp allocator memory that's because there's plenty
unused!
But I am happy to start with the memory mapped into the allocator and then if
necessary finish with the allocator->mc: if there are memory in allocator->mc
that's probably because a topup is pending.
--
Vincent
>
> Cheers,
> /fuad
>
> > >
> > > >
> > > > However now looking at it. I wonder if I don't want to ratelimit here the number
> > > > of pages reclaimed in one go to limit the time spent at EL2. Especially we do
> > > > all that with the allocator lock taken...
> > >
> > > Ratelimiting would cap the time under the lock, but it wouldn't stop a
> > > concurrent shrink from taking the topup pages, would it?
> >
> > Yes, my only intent is to avoid blocking at EL2 for too long.
> >
> > --
> > Vincent
> >
> > >
> > > Cheers,
> > > /fuad
> > >
> > >
> > > >
> >
> > [...]
next prev parent reply other threads:[~2026-08-25 8:20 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 14:35 [PATCH v4 00/17] KVM: arm64: Introduce pKVM hypervisor heap allocator Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 01/17] KVM: arm64: Add pkvm_private_va_range_pa Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 02/17] KVM: arm64: Add pkvm_remove_mappings Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 03/17] KVM: arm64: Add pkvm_map_private_va_range Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 04/17] KVM: arm64: Add a heap allocator for the pKVM hyp Vincent Donnefort
2026-08-18 14:22 ` Fuad Tabba
2026-08-24 15:19 ` Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 05/17] KVM: arm64: Allow kvm_hyp_memcache usage outside of stage-2 Vincent Donnefort
2026-07-31 14:51 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 06/17] KVM: arm64: Add pkvm_hyp_req infrastructure Vincent Donnefort
2026-07-31 14:45 ` sashiko-bot
2026-08-18 15:33 ` Fuad Tabba
2026-08-25 7:41 ` Aneesh Kumar K.V
2026-08-25 8:10 ` Vincent Donnefort
2026-08-25 8:51 ` Fuad Tabba
2026-08-25 13:28 ` Aneesh Kumar K.V
2026-07-31 14:35 ` [PATCH v4 07/17] KVM: arm64: Add PKVM_HYP_REQ_HYP_ALLOC request Vincent Donnefort
2026-07-31 14:52 ` sashiko-bot
2026-08-18 15:11 ` Fuad Tabba
2026-08-18 15:12 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 08/17] KVM: arm64: Add reclaim interface for the pKVM heap alloc Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 09/17] KVM: arm64: Add selftests for the pKVM heap allocator Vincent Donnefort
2026-07-31 15:03 ` sashiko-bot
2026-08-18 15:43 ` Fuad Tabba
2026-08-24 16:23 ` Vincent Donnefort
2026-08-24 18:15 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 10/17] KVM: arm64: Add a shrinker for pKVM Vincent Donnefort
2026-08-18 15:28 ` Fuad Tabba
2026-08-24 16:38 ` Vincent Donnefort
2026-08-24 18:10 ` Fuad Tabba
2026-08-25 7:22 ` Vincent Donnefort
2026-08-25 7:40 ` Fuad Tabba
2026-08-25 8:20 ` Vincent Donnefort [this message]
2026-08-25 8:38 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 11/17] KVM: arm64: Filter out non-kernel addresses in kern_hyp_va Vincent Donnefort
2026-08-18 14:45 ` Fuad Tabba
2026-08-25 9:34 ` Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 12/17] KVM: arm64: Move hyp_vm refcount into the structure Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 13/17] KVM: arm64: Alloc pkvm_hyp_vm using pKVM heap allocator Vincent Donnefort
2026-07-31 15:06 ` sashiko-bot
2026-08-17 13:38 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 14/17] KVM: arm64: Alloc pkvm_hyp_vcpu " Vincent Donnefort
2026-07-31 15:04 ` sashiko-bot
2026-08-17 13:39 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 15/17] KVM: arm64: Reject hyp trace descriptors with fewer CPUs than hyp_nr_cpus Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 16/17] KVM: arm64: Reject hyp trace descriptors with fewer than 3 pages Vincent Donnefort
2026-08-17 14:00 ` Fuad Tabba
2026-07-31 14:35 ` [PATCH v4 17/17] KVM: arm64: Alloc simple_buffer_page using pKVM hyp allocator Vincent Donnefort
2026-08-17 14:16 ` Fuad Tabba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ao1QPyLXVGuH1XLn@google.com \
--to=vdonnefort@google.com \
--cc=catalin.marinas@arm.com \
--cc=fuad.tabba@linux.dev \
--cc=joey.gouly@arm.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=qperret@google.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.