All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: Marc Zyngier <marc.zyngier@arm.com>,
	Christoffer Dall <christoffer.dall@linaro.org>
Cc: David Daney <david.daney@cavium.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Robert Richter <rrichter@cavium.com>,
	Eric Auger <eric.auger@redhat.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org
Subject: Re: [PATCH v2 00/25] arm64: KVM: Mediate access to GICv3 sysregs at EL2
Date: Fri, 2 Jun 2017 09:24:44 -0700	[thread overview]
Message-ID: <c01045ac-10ce-811c-4c60-650db30ef3c8@caviumnetworks.com> (raw)
In-Reply-To: <941a29e4-9652-ee40-1d46-a5f06288cc7b@arm.com>

On 06/02/2017 02:11 AM, Marc Zyngier wrote:
> On 01/06/17 22:00, David Daney wrote:
>> On 06/01/2017 03:20 AM, Marc Zyngier wrote:
>>> Some systems have less than perfect GICv3 implementations, leading to
>>> all kind of ugly issues (guest hanging, host dying). In order to allow
>>> some level of diagnostic, and in some cases implement workarounds,
>>> this series enables the trapping of both Group-0, Group-1 and Common
>>> sysregs. Mediating the access at EL2 allows some form of sanity
>>> checking that the HW is sometimes sorely lacking.
>>>
>>> Instead of fully emulating a GICv3 CPU interface, we still use the
>>> existing HW (list registers, AP registers, VMCR...), which allows the
>>> code to be independent from the rest of the KVM code, and to cope with
>>> partial trapping.
>>>
>>> Of course, trapping has a cost, which is why this must be either
>>> enabled on the command line, or selected by another cpu capability
>>> (see Cavium erratum 30115). A quick test on an A57-based platform
>>> shows a 25% hit when repeatedly banging on the trapped registers,
>>> while normal workloads do not seem to suffer noticeably from such
>>> trapping (hackbench variance is in the usual noise, despite being very
>>> IPI happy).
>>>
>>> This has been tested on a dual socket Thundex-X and a Freescale LS-2085a.
>>>
>>> I've taken the liberty to rebase David Daney's initial Cavium erratum
>>> 30115 workaround on top of this series, and included it here as a
>>> typical use case.
>>
>> I pulled this from:
>>
>>   
>> https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/log/?h=kvm-arm64/gicv3-cpuif-mediated-access
>>
>> this morning at commit	58c1763c5aa6223ab3d04e0c183a31eb0aef832e
>>
>> Entire series tested by and
>>
>> Acked-by: David Daney <david.daney@cavium.com>
> 
> Thanks David. May I ask what particular system this was tested on (just
> so that I have a additional reference point)?

Sure, Unfortunatly I think it doesn't really increase your testing coverage.

I tested on a 2-node NUMA Cavium cn8890 (ThunderX).  This chassis is 
known as CRB-2S.  Running Ubuntu 16.04.2 userspace.

First I verified that a kernel built from clean v4.12-rc3 would fail 
with symptoms of no interrupts being processed while running a heavy KVM 
start/stop workload.  It does, we get a failure in under 5 minutes.

Then I applied your 25 patch set, and retested.  With the patch set 
applied, no failures were observed after more than 4 hours.


> 
> Cheers,
> 
> 	M.
> 

WARNING: multiple messages have this Message-ID (diff)
From: ddaney@caviumnetworks.com (David Daney)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 00/25] arm64: KVM: Mediate access to GICv3 sysregs at EL2
Date: Fri, 2 Jun 2017 09:24:44 -0700	[thread overview]
Message-ID: <c01045ac-10ce-811c-4c60-650db30ef3c8@caviumnetworks.com> (raw)
In-Reply-To: <941a29e4-9652-ee40-1d46-a5f06288cc7b@arm.com>

On 06/02/2017 02:11 AM, Marc Zyngier wrote:
> On 01/06/17 22:00, David Daney wrote:
>> On 06/01/2017 03:20 AM, Marc Zyngier wrote:
>>> Some systems have less than perfect GICv3 implementations, leading to
>>> all kind of ugly issues (guest hanging, host dying). In order to allow
>>> some level of diagnostic, and in some cases implement workarounds,
>>> this series enables the trapping of both Group-0, Group-1 and Common
>>> sysregs. Mediating the access at EL2 allows some form of sanity
>>> checking that the HW is sometimes sorely lacking.
>>>
>>> Instead of fully emulating a GICv3 CPU interface, we still use the
>>> existing HW (list registers, AP registers, VMCR...), which allows the
>>> code to be independent from the rest of the KVM code, and to cope with
>>> partial trapping.
>>>
>>> Of course, trapping has a cost, which is why this must be either
>>> enabled on the command line, or selected by another cpu capability
>>> (see Cavium erratum 30115). A quick test on an A57-based platform
>>> shows a 25% hit when repeatedly banging on the trapped registers,
>>> while normal workloads do not seem to suffer noticeably from such
>>> trapping (hackbench variance is in the usual noise, despite being very
>>> IPI happy).
>>>
>>> This has been tested on a dual socket Thundex-X and a Freescale LS-2085a.
>>>
>>> I've taken the liberty to rebase David Daney's initial Cavium erratum
>>> 30115 workaround on top of this series, and included it here as a
>>> typical use case.
>>
>> I pulled this from:
>>
>>   
>> https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/log/?h=kvm-arm64/gicv3-cpuif-mediated-access
>>
>> this morning at commit	58c1763c5aa6223ab3d04e0c183a31eb0aef832e
>>
>> Entire series tested by and
>>
>> Acked-by: David Daney <david.daney@cavium.com>
> 
> Thanks David. May I ask what particular system this was tested on (just
> so that I have a additional reference point)?

Sure, Unfortunatly I think it doesn't really increase your testing coverage.

I tested on a 2-node NUMA Cavium cn8890 (ThunderX).  This chassis is 
known as CRB-2S.  Running Ubuntu 16.04.2 userspace.

First I verified that a kernel built from clean v4.12-rc3 would fail 
with symptoms of no interrupts being processed while running a heavy KVM 
start/stop workload.  It does, we get a failure in under 5 minutes.

Then I applied your 25 patch set, and retested.  With the patch set 
applied, no failures were observed after more than 4 hours.


> 
> Cheers,
> 
> 	M.
> 

  reply	other threads:[~2017-06-02 16:24 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-01 10:20 [PATCH v2 00/25] arm64: KVM: Mediate access to GICv3 sysregs at EL2 Marc Zyngier
2017-06-01 10:20 ` Marc Zyngier
2017-06-01 10:20 ` [PATCH v2 01/25] arm64: Add a facility to turn an ESR syndrome into a sysreg encoding Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-01 10:20 ` [PATCH v2 02/25] KVM: arm/arm64: vgic-v3: Add accessors for the ICH_APxRn_EL2 registers Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-01 10:20 ` [PATCH v2 03/25] KVM: arm64: Make kvm_condition_valid32() accessible from EL2 Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-04 12:11   ` Christoffer Dall
2017-06-04 12:11     ` Christoffer Dall
2017-06-05  8:13     ` Marc Zyngier
2017-06-05  8:13       ` Marc Zyngier
2017-06-05  8:23       ` Christoffer Dall
2017-06-05  8:23         ` Christoffer Dall
2017-06-05  9:10         ` Marc Zyngier
2017-06-05  9:10           ` Marc Zyngier
2017-06-01 10:20 ` [PATCH v2 04/25] KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at EL2 Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-04 14:59   ` Christoffer Dall
2017-06-04 14:59     ` Christoffer Dall
2017-06-01 10:20 ` [PATCH v2 05/25] KVM: arm64: vgic-v3: Add ICV_BPR1_EL1 handler Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-04 20:25   ` Christoffer Dall
2017-06-04 20:25     ` Christoffer Dall
2017-06-05  9:58     ` Marc Zyngier
2017-06-05  9:58       ` Marc Zyngier
2017-06-05 10:16       ` Christoffer Dall
2017-06-05 10:16         ` Christoffer Dall
2017-06-05 10:27         ` Peter Maydell
2017-06-05 10:27           ` Peter Maydell
2017-06-06  9:41       ` Christoffer Dall
2017-06-06  9:41         ` Christoffer Dall
2017-06-01 10:20 ` [PATCH v2 06/25] KVM: arm64: vgic-v3: Add ICV_IGRPEN1_EL1 handler Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:20 ` [PATCH v2 07/25] KVM: arm64: vgic-v3: Add ICV_IAR1_EL1 handler Marc Zyngier
2017-06-01 10:20   ` Marc Zyngier
2017-06-05  9:21   ` Christoffer Dall
2017-06-05  9:21     ` Christoffer Dall
2017-06-05 10:33     ` Marc Zyngier
2017-06-05 10:33       ` Marc Zyngier
2017-06-06 11:09       ` Christoffer Dall
2017-06-06 11:09         ` Christoffer Dall
2017-06-06 13:35         ` Marc Zyngier
2017-06-06 13:35           ` Marc Zyngier
2017-06-06 13:50           ` Christoffer Dall
2017-06-06 13:50             ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 08/25] KVM: arm64: vgic-v3: Add ICV_EOIR1_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-05 10:32   ` Christoffer Dall
2017-06-05 10:32     ` Christoffer Dall
2017-06-05 11:00     ` Marc Zyngier
2017-06-05 11:00       ` Marc Zyngier
2017-06-06 13:19       ` Christoffer Dall
2017-06-06 13:19         ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 09/25] KVM: arm64: vgic-v3: Add ICV_AP1Rn_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 10/25] KVM: arm64: vgic-v3: Add ICV_HPPIR1_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 11:51   ` Christoffer Dall
2017-06-06 11:51     ` Christoffer Dall
2017-06-06 13:57     ` Marc Zyngier
2017-06-06 13:57       ` Marc Zyngier
2017-06-06 14:41       ` Christoffer Dall
2017-06-06 14:41         ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 11/25] KVM: arm64: vgic-v3: Enable trapping of Group-1 system registers Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 12/25] KVM: arm64: Enable GICv3 Group-1 sysreg trapping via command-line Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 12:06   ` Christoffer Dall
2017-06-06 12:06     ` Christoffer Dall
2017-06-06 13:59     ` Marc Zyngier
2017-06-06 13:59       ` Marc Zyngier
2017-06-06 14:42       ` Christoffer Dall
2017-06-06 14:42         ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 13/25] KVM: arm64: vgic-v3: Add ICV_BPR0_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 12:11   ` Christoffer Dall
2017-06-06 12:11     ` Christoffer Dall
2017-06-06 15:15     ` Marc Zyngier
2017-06-06 15:15       ` Marc Zyngier
2017-06-06 15:46       ` Christoffer Dall
2017-06-06 15:46         ` Christoffer Dall
2017-06-06 15:56         ` Peter Maydell
2017-06-06 15:56           ` Peter Maydell
2017-06-06 16:56           ` Marc Zyngier
2017-06-06 16:56             ` Marc Zyngier
2017-06-06 17:23           ` Christoffer Dall
2017-06-06 17:23             ` Christoffer Dall
2017-06-06 17:36             ` Peter Maydell
2017-06-06 17:36               ` Peter Maydell
2017-06-01 10:21 ` [PATCH v2 14/25] KVM: arm64: vgic-v3: Add ICV_IGNREN0_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 15/25] KVM: arm64: vgic-v3: Add misc Group-0 handlers Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 16/25] KVM: arm64: vgic-v3: Enable trapping of Group-0 system registers Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:22   ` Christoffer Dall
2017-06-06 13:22     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 17/25] KVM: arm64: Enable GICv3 Group-0 sysreg trapping via command-line Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 12:44   ` Christoffer Dall
2017-06-06 12:44     ` Christoffer Dall
2017-06-06 15:15     ` Marc Zyngier
2017-06-06 15:15       ` Marc Zyngier
2017-06-01 10:21 ` [PATCH v2 18/25] arm64: Add MIDR values for Cavium cn83XX SoCs Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-01 10:21 ` [PATCH v2 19/25] arm64: Add workaround for Cavium Thunder erratum 30115 Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 12:48   ` Christoffer Dall
2017-06-06 12:48     ` Christoffer Dall
2017-06-06 15:18     ` Marc Zyngier
2017-06-06 15:18       ` Marc Zyngier
2017-06-01 10:21 ` [PATCH v2 20/25] KVM: arm64: vgic-v3: Add ICV_DIR_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 12:59   ` Christoffer Dall
2017-06-06 12:59     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 21/25] KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:23   ` Christoffer Dall
2017-06-06 13:23     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 22/25] KVM: arm64: vgic-v3: Add ICV_CTLR_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:23   ` Christoffer Dall
2017-06-06 13:23     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 23/25] KVM: arm64: vgic-v3: Add ICV_PMR_EL1 handler Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:23   ` Christoffer Dall
2017-06-06 13:23     ` Christoffer Dall
2017-06-01 10:21 ` [PATCH v2 24/25] KVM: arm64: Enable GICv3 common sysreg trapping via command-line Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-01 10:21 ` [PATCH v2 25/25] KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped Marc Zyngier
2017-06-01 10:21   ` Marc Zyngier
2017-06-06 13:23   ` Christoffer Dall
2017-06-06 13:23     ` Christoffer Dall
2017-06-01 21:00 ` [PATCH v2 00/25] arm64: KVM: Mediate access to GICv3 sysregs at EL2 David Daney
2017-06-01 21:00   ` David Daney
2017-06-02  9:11   ` Marc Zyngier
2017-06-02  9:11     ` Marc Zyngier
2017-06-02 16:24     ` David Daney [this message]
2017-06-02 16:24       ` David Daney
2017-06-08 14:35 ` Alexander Graf
2017-06-08 14:35   ` Alexander Graf

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=c01045ac-10ce-811c-4c60-650db30ef3c8@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=david.daney@cavium.com \
    --cc=eric.auger@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=rrichter@cavium.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.