From: Marc Zyngier <marc.zyngier@arm.com>
To: <linux-arm-kernel@lists.infradead.org>,
<kvmarm@lists.cs.columbia.edu>, <kvm@vger.kernel.org>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>,
"Raslan, KarimAllah" <karahmed@amazon.de>,
Andre Przywara <Andre.Przywara@arm.com>,
Christoffer Dall <christoffer.dall@arm.com>,
Eric Auger <eric.auger@redhat.com>,
James Morse <james.morse@arm.com>,
"Saidi, Ali" <alisaidi@amazon.com>,
Zenghui Yu <yuzenghui@huawei.com>,
Julien Thierry <julien.thierry.kdev@gmail.com>
Subject: Re: [PATCH v3 00/10] KVM: arm/arm64: vgic: ITS translation cache
Date: Sun, 18 Aug 2019 18:55:37 +0100 [thread overview]
Message-ID: <20190818185537.234ad680@why> (raw)
In-Reply-To: <20190725153543.24386-1-maz@kernel.org>
On Thu, 25 Jul 2019 16:35:33 +0100
Marc Zyngier <maz@kernel.org> wrote:
> From: Marc Zyngier <marc.zyngier@arm.com>
>
> It recently became apparent[1] that our LPI injection path is not as
> efficient as it could be when injecting interrupts coming from a VFIO
> assigned device.
>
> Although the proposed patch wasn't 100% correct, it outlined at least
> two issues:
>
> (1) Injecting an LPI from VFIO always results in a context switch to a
> worker thread: no good
>
> (2) We have no way of amortising the cost of translating a DID+EID pair
> to an LPI number
>
> The reason for (1) is that we may sleep when translating an LPI, so we
> do need a context process. A way to fix that is to implement a small
> LPI translation cache that could be looked up from an atomic
> context. It would also solve (2).
>
> This is what this small series proposes. It implements a very basic
> LRU cache of pre-translated LPIs, which gets used to implement
> kvm_arch_set_irq_inatomic. The size of the cache is currently
> hard-coded at 16 times the number of vcpus, a number I have picked
> under the influence of Ali Saidi. If that's not enough for you, blame
> me, though.
>
> Does it work? well, it doesn't crash, and is thus perfect. More
> seriously, I don't really have a way to benchmark it directly, so my
> observations are only indirect:
>
> On a TX2 system, I run a 4 vcpu VM with an Ethernet interface passed
> to it directly. From the host, I inject interrupts using debugfs. In
> parallel, I look at the number of context switch, and the number of
> interrupts on the host. Without this series, I get the same number for
> both IRQ and CS (about half a million of each per second is pretty
> easy to reach). With this series, the number of context switches drops
> to something pretty small (in the low 2k), while the number of
> interrupts stays the same.
>
> Yes, this is a pretty rubbish benchmark, what did you expect? ;-)
>
> Andre did run some benchmarks of his own, with some rather positive
> results[2]. So I'm putting this out for people with real workloads to
> try out and report what they see.
>
> [1] https://lore.kernel.org/lkml/1552833373-19828-1-git-send-email-yuzenghui@huawei.com/
> [2] https://www.spinics.net/lists/arm-kernel/msg742655.html
>
> * From v2:
>
> - Added invalidation on turning the ITS off
> - Added invalidation on MAPC with V=0
> - Added Rb's from Eric
>
> * From v1:
>
> - Fixed race on allocation, where the same LPI could be cached multiple times
> - Now invalidate the cache on vgic teardown, avoiding memory leaks
> - Change patch split slightly, general reshuffling
> - Small cleanups here and there
> - Rebased on 5.2-rc4
>
> Marc Zyngier (10):
> KVM: arm/arm64: vgic: Add LPI translation cache definition
> KVM: arm/arm64: vgic: Add __vgic_put_lpi_locked primitive
> KVM: arm/arm64: vgic-its: Add MSI-LPI translation cache invalidation
> KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on
> specific commands
> KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on
> disabling LPIs
> KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on ITS
> disable
> KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on vgic
> teardown
> KVM: arm/arm64: vgic-its: Cache successful MSI->LPI translation
> KVM: arm/arm64: vgic-its: Check the LPI translation cache on MSI
> injection
> KVM: arm/arm64: vgic-irqfd: Implement kvm_arch_set_irq_inatomic
>
> include/kvm/arm_vgic.h | 3 +
> virt/kvm/arm/vgic/vgic-init.c | 5 +
> virt/kvm/arm/vgic/vgic-irqfd.c | 36 +++++-
> virt/kvm/arm/vgic/vgic-its.c | 207 +++++++++++++++++++++++++++++++
> virt/kvm/arm/vgic/vgic-mmio-v3.c | 4 +-
> virt/kvm/arm/vgic/vgic.c | 26 ++--
> virt/kvm/arm/vgic/vgic.h | 5 +
> 7 files changed, 270 insertions(+), 16 deletions(-)
>
FWIW, I've now queued this for 5.4, with Eric's RBs and Andre's TBs.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
prev parent reply other threads:[~2019-08-18 17:55 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-25 15:35 [PATCH v3 00/10] KVM: arm/arm64: vgic: ITS translation cache Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 01/10] KVM: arm/arm64: vgic: Add LPI translation cache definition Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 02/10] KVM: arm/arm64: vgic: Add __vgic_put_lpi_locked primitive Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 03/10] KVM: arm/arm64: vgic-its: Add MSI-LPI translation cache invalidation Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 04/10] KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on specific commands Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 05/10] KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on disabling LPIs Marc Zyngier
2019-07-25 16:38 ` Auger Eric
2019-07-25 15:35 ` [PATCH v3 06/10] KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on ITS disable Marc Zyngier
2019-07-25 16:38 ` Auger Eric
2019-07-25 15:35 ` [PATCH v3 07/10] KVM: arm/arm64: vgic-its: Invalidate MSI-LPI translation cache on vgic teardown Marc Zyngier
2019-07-25 16:37 ` Auger Eric
2019-07-25 15:35 ` [PATCH v3 08/10] KVM: arm/arm64: vgic-its: Cache successful MSI->LPI translation Marc Zyngier
2019-07-25 15:35 ` [PATCH v3 09/10] KVM: arm/arm64: vgic-its: Check the LPI translation cache on MSI injection Marc Zyngier
2019-07-25 16:38 ` Auger Eric
2019-07-25 15:35 ` [PATCH v3 10/10] KVM: arm/arm64: vgic-irqfd: Implement kvm_arch_set_irq_inatomic Marc Zyngier
2019-07-30 17:04 ` [PATCH v3 00/10] KVM: arm/arm64: vgic: ITS translation cache Andre Przywara
2019-08-18 17:55 ` Marc Zyngier [this message]
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=20190818185537.234ad680@why \
--to=marc.zyngier@arm.com \
--cc=Andre.Przywara@arm.com \
--cc=alisaidi@amazon.com \
--cc=christoffer.dall@arm.com \
--cc=eric.auger@redhat.com \
--cc=james.morse@arm.com \
--cc=julien.thierry.kdev@gmail.com \
--cc=karahmed@amazon.de \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=suzuki.poulose@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).