From: Marc Zyngier <maz@kernel.org>
To: "yezhenyu (A)" <yezhenyu2@huawei.com>
Cc: "rananta@google.com" <rananta@google.com>,
"will@kernel.org" <will@kernel.org>,
"oliver.upton@linux.dev" <oliver.upton@linux.dev>,
"catalin.marinas@arm.com" <catalin.marinas@arm.com>,
"dmatlack@google.com" <dmatlack@google.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"kvmarm@lists.linux.dev" <kvmarm@lists.linux.dev>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
zhengchuan <zhengchuan@huawei.com>,
Xiexiangyou <xiexiangyou@huawei.com>,
"guoqixin (A)" <guoqixin2@huawei.com>,
"Mawen (Wayne)" <wayne.ma@huawei.com>
Subject: Re: [RFC][PATCH] arm64: tlb: call kvm_call_hyp once during kvm_tlb_flush_vmid_range
Date: Mon, 16 Feb 2026 13:05:08 +0000 [thread overview]
Message-ID: <86cy24bzzv.wl-maz@kernel.org> (raw)
In-Reply-To: <2b29bbc8-c588-4ce0-b249-5cc544338ec1@huawei.com>
On Thu, 12 Feb 2026 12:02:33 +0000,
"yezhenyu (A)" <yezhenyu2@huawei.com> wrote:
>
> Thanks for your review.
>
> On 2026/2/9 22:35, Marc Zyngier wrote:
> > On Mon, 09 Feb 2026 13:14:07 +0000,
> > "yezhenyu (A)" <yezhenyu2@huawei.com> wrote:
> >>
> >> From 9982be89f55bd99b3683337223284f0011ed248e Mon Sep 17 00:00:00 2001
> >> From: eillon <yezhenyu2@huawei.com>
> >> Date: Mon, 9 Feb 2026 19:48:46 +0800
> >> Subject: [RFC][PATCH v1] arm64: tlb: call kvm_call_hyp once during
> >> kvm_tlb_flush_vmid_range
> >>
> >> The kvm_tlb_flush_vmid_range() function is performance-critical
> >> during live migration, but there is a while loop when the system
> >> support flush tlb by range when the size is larger than MAX_TLBI_RANGE_PAGES.
> >>
> >> This results in frequent entry to kvm_call_hyp() and then a large
> >
> > What is the cost of kvm_call_hyp()?
> >
>
> Most cost of kvm_tlb_flush_vmid_range() is __tlb_switch_to_host(), which
> is called in every __kvm_tlb_flush_vmid/__kvm_tlb_flush_vmid_range.
That was not my question: you indicate that frequent calls to
kvm_call_hyp() are making things costly. I find this assertion
surprising, given that on a VHE system, this is exactly *nothing*.
>
> >> amount of time is spent in kvm_clear_dirty_log_protect() during
> >> migration(more than 50%).
> >
> > 50% of what time? The guest's run-time? The time spent doing TLBIs
> > compared to the time spent in kvm_clear_dirty_log_protect()?
> >
>
> kvm_clear_dirty_log_protect() cost more than 50% time during
> ram_find_and_save_block(), but not every time.
> I captured the flame graph during the live migration, and the
> distribution of several key functions is as follows(sorry I
> cannot transfer the SVG files outside my company):
>
> ram_find_and_save_block(): 84.01%
> memory_region_clear_dirty_bitmap(): 33.40%
> kvm_clear_dirty_log_protect(): 26.74%
> kvm_arch_flush_remote_tlbs_range(): 9.67%
> __tlb_switch_to_host(): 9.51%
> kvm_arch_mmu_enable_log_dirty_pt_masked(): 9.38%
> ram_save_target_page_legacy(): 43.41%
>
> The memory_region_clear_dirty_bitmap() cost about 40% of
> ram_find_and_save_block(), and the kvm_arch_flush_remote_tlbs_range()
> cost about 29% of memory_region_clear_dirty_bitmap().
>
> And after the patch apply, the distribution of several key functions is
> as follows:
>
> ram_find_and_save_block(): 53.84%
> memory_region_clear_dirty_bitmap(): 2.28%
> kvm_clear_dirty_log_protect(): 1.75%
> kvm_arch_flush_remote_tlbs_range(): 0.03%
> __tlb_switch_to_host(): 0.03%
> kvm_arch_mmu_enable_log_dirty_pt_masked(): 0.96%
> ram_save_target_page_legacy(): 38.97%
>
>
> The memory_region_clear_dirty_bitmap() cost about 4% of
> ram_find_and_save_block(), and the kvm_arch_flush_remote_tlbs_range()
> cost about 1% of memory_region_clear_dirty_bitmap().
What is ram_find_and_save_block()? userspace code?
>
> >> So, when the address range is large than
> >> MAX_TLBI_RANGE_PAGES, directly call __kvm_tlb_flush_vmid to
> >> optimize performance.
> >
> > Multiple things here:
> >
> > - there is no SoB, which means that patch cannot be considered for
> > merging
> >
> If there are no other issues with this patch, I can resend it with the
> SoB (Signed-off-by) tag.
>
>
> > - there is no data showing how this change improves the situation for
> > a large enough set of workloads
> >
> > - there is no description of a test that could be run on multiple
> > implementations to check whether this change has a positive or
> > negative impact
>
> This patch affected the migration bandwidth during the live migration.
> With the same physical bandwidth, the optimization effect of this patch
> can be observed by monitoring the real live migration bandwidth.
>
> I have test this in an RDMA-like environment, the physical bandwidth is
> about 100GBps; without this patch, the migration bandwidth is below 10
> GBps, and after this patch apply, the migration bandwidth can reach 50
> GBps.
Again: how can other people reproduce your findings? Please provide a
test, and its exact configuration. If this truly results in a 5x
improvement, it shouldn't be hard to reproduce.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2026-02-16 13:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-09 13:14 [RFC][PATCH] arm64: tlb: call kvm_call_hyp once during kvm_tlb_flush_vmid_range yezhenyu (A)
2026-02-09 14:35 ` Marc Zyngier
2026-02-12 12:02 ` yezhenyu (A)
2026-02-16 13:05 ` Marc Zyngier [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-02-12 11:54 yezhenyu (A)
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=86cy24bzzv.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dmatlack@google.com \
--cc=guoqixin2@huawei.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oliver.upton@linux.dev \
--cc=rananta@google.com \
--cc=wayne.ma@huawei.com \
--cc=will@kernel.org \
--cc=xiexiangyou@huawei.com \
--cc=yezhenyu2@huawei.com \
--cc=zhengchuan@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox