From: Leonardo Bras <leo.bras@arm.com>
To: Oliver Upton <oupton@kernel.org>
Cc: Leonardo Bras <leo.bras@arm.com>, Marc Zyngier <maz@kernel.org>,
Fuad Tabba <fuad.tabba@linux.dev>,
Joey Gouly <joey.gouly@arm.com>,
Steffen Eiden <seiden@linux.ibm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Zenghui Yu <yuzenghui@huawei.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Raghavendra Rao Ananta <rananta@google.com>,
Tian Zheng <zhengtian10@huawei.com>,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 5/5] KVM: arm64: Enable HAFDBS for guests not on migration
Date: Wed, 14 Oct 2026 16:56:15 +0100 [thread overview]
Message-ID: <as-mH36YSMxAosND@LeoBrasDK> (raw)
In-Reply-To: <aqvt2gnlBZeNsaf4@LeoBrasDK>
On Thu, Sep 17, 2026 at 02:40:42PM +0100, Leonardo Bras wrote:
> On Wed, Sep 16, 2026 at 04:27:19PM -0700, Oliver Upton wrote:
> > On Wed, Sep 16, 2026 at 03:00:46PM +0100, Leonardo Bras wrote:
> > > On Tue, Sep 15, 2026 at 05:10:02PM -0700, Oliver Upton wrote:
> > > > Hi,
> > > >
> > > > On Tue, Sep 01, 2026 at 06:15:56PM +0100, Leonardo Bras wrote:
> > > > > When dirty-logging is disabled, even non-write faults make a page dirty,
> > > > > which avoids a second fault when the page is actually written to.
> > > > >
> > > > > On dirty-logging enable, this approach causes all (writable) pages on the
> > > > > memslot to be marked clean, even if they were not written to, which can
> > > > > take a lot of time, while holding the MMU lock, doing atomic writes to
> > > > > PTEs.
> > > >
> > > > Do you have any performance numbers for this? Enabling HAFDBS seems a
> > > > bit involved to avoid some stores on the first pass.
> > >
> > > Not yet, but if the idea does not look too crazy I can find hardware and
> > > collect some data :)
> >
> > TBH this looks like a micro-optimization so I'm not expecting the
> > performance gains to justify the behavior change.
> >
>
> Okay then, I will get a machine to figure the performance gains :)
Got the performance numbers here.
I tested both the case where all PTEs are dirty, and the case that 50% of
the PTEs are dirty.
For that test, actually patch #5 could make kvm_pgtable_stage2_wrprotect()
slower, which is counter-intuitive, in all platforms tested:
When we walk the S2 pagetable to wrprotect, using the new walker, the
write to the PTE itself is so cheap* that the cost of the branch
misprediction (write PTE or not) for the 50/50 case is significantly higher
than the cost of the 50% extra writes, which makes the 50/50 up to 60%
slower than the 100% dirty case. It is still slower in the '25% dirty' as
well, and starts to get even at '10% dirty'.
* (non-atomic, everything is in order, walker is small, cpu will probably
bundle it all in a single cacheline write)
Since the idea of patch #5 was to reduce PTE writes in the first wrprotect
walk, it becomes faster only if only a small portion (<10%) of the VM was
write-faulted while the remaining was read-faulted, which seems to be a
really reduced audience.
Since this comes with increased complexity, and also carry costs of
having HAFDBS itself enabled outside dirty-tracking, I don't think it's a
good idea to further pursue patch #5. It's only value is that it served as
a base for HDBSS implementation.
Thanks for reading!
Leo
next prev parent reply other threads:[~2026-10-14 15:56 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-01 17:15 [RFC PATCH 0/5] KVM: arm64: New PTE dirty-page encoding, HAFDBS new usage Leonardo Bras
2026-09-01 17:15 ` [RFC PATCH 1/5] KVM: arm64: pgtables: Change write bit from S2AP_W to DBM Leonardo Bras
2026-09-01 17:30 ` sashiko-bot
2026-09-02 11:07 ` Leonardo Bras
2026-09-13 9:00 ` Marc Zyngier
2026-09-15 17:12 ` Leonardo Bras
2026-09-16 0:37 ` Oliver Upton
2026-09-16 11:22 ` Leonardo Bras
2026-09-16 12:20 ` Marc Zyngier
2026-09-16 13:25 ` Leonardo Bras
2026-09-18 11:43 ` Tian Zheng
2026-09-18 9:39 ` Tian Zheng
2026-09-21 14:15 ` Leonardo Bras
2026-09-29 10:30 ` Tian Zheng
2026-09-16 8:30 ` Marc Zyngier
2026-09-16 13:03 ` Leonardo Bras
2026-09-01 17:15 ` [RFC PATCH 2/5] KVM: arm64: Add KVM_PGTABLE_PROT_DIRTY Leonardo Bras
2026-09-01 17:34 ` sashiko-bot
2026-09-02 11:30 ` Leonardo Bras
2026-09-13 9:09 ` Marc Zyngier
2026-09-15 17:33 ` Leonardo Bras
2026-09-01 17:15 ` [RFC PATCH 3/5] KVM: arm64: Introduce a dedicated walker for stage2 write-protect Leonardo Bras
2026-09-01 17:15 ` [RFC PATCH 4/5] KVM: arm64: Add KVM_REQ_RELOAD_STAGE2 Leonardo Bras
2026-09-02 3:41 ` Tian Zheng
2026-09-02 10:53 ` Leonardo Bras
2026-09-01 17:15 ` [RFC PATCH 5/5] KVM: arm64: Enable HAFDBS for guests not on migration Leonardo Bras
2026-09-01 17:49 ` sashiko-bot
2026-09-02 13:16 ` Leonardo Bras
2026-09-16 0:10 ` Oliver Upton
2026-09-16 14:00 ` Leonardo Bras
2026-09-16 23:27 ` Oliver Upton
2026-09-17 13:40 ` Leonardo Bras
2026-10-14 15:56 ` Leonardo Bras [this message]
2026-09-18 11:58 ` Tian Zheng
2026-09-21 14:28 ` Leonardo Bras
2026-09-29 11:30 ` Tian Zheng
2026-09-12 12:24 ` [RFC PATCH 0/5] KVM: arm64: New PTE dirty-page encoding, HAFDBS new usage Marc Zyngier
2026-09-15 15:31 ` Leonardo Bras
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=as-mH36YSMxAosND@LeoBrasDK \
--to=leo.bras@arm.com \
--cc=catalin.marinas@arm.com \
--cc=fuad.tabba@linux.dev \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=rananta@google.com \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
--cc=zhengtian10@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.