[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Proposal for Porting Xen to Armv8-R64 - DraftA


  • To: Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: Wei Chen <Wei.Chen@xxxxxxx>
  • Date: Wed, 2 Mar 2022 06:43:06 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=d99pwRro3QOML7H0OZ9ZmZKoZLCKgq75MfxSO1ypTIc=; b=Taa62mw1uAvC6djQ5JTvbH6wAGy4uIZyptOkjVWs1Q7OFds+NwX1ZMp1PaH/aRVpcnKG0oDm/VuHnkMtT/iUiNYCoz9qZ/fpwmUy4sFNXlhUVITm9edbGut+cj5PnOZ3AhCF2sk80KfyCDNo2CN+vYvpFPWZfJ9M0ctGzzdc/dnKIltB1HtjIsXuO8x74lEXXnHQ4URjBZhsOBzY992j+TWbSyktZ3P/xoiegyrUsZN+Efn7I6nazeCSpxba8BzLxjM16efZZr5VqPlPoOMbe75fRzqpA1jc0JIMUmfTrjHi+34leS/wzgw6FCQKaVHe9HcmM602XMltf7q+/rMrXA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mJ31Zr5tlO4GjpLCRY0MG43XWDBc5Rm+yZ7qYHTzAbtGG3Sx+s40oroxIYC5B/NcvBBopuIGEEBYCrMEs9q0ATwQ9PWavK5B+uTePAqLY9qHdM+vcdJPfchxhJodnN7MfRelV35oz9H0XG2BpmaMy/iqbgcDZSAE0iXn+JVQ7Uf0IT1AHxALK6aFC3GJVpO2UmRR2N3xVm90O6lYAurX3dqZ4CZ9yFCo/63xI7GtFx2l3zG49yqfAaOUpS8A1CdNIRYtiTaMH5wnQRR3g+CArYm2lU/7jeVtVRw3KrwYS4PXJ0TP726zdU05dnf3oGcRTcltTU6wzqFIr3n602kWIg==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Penny Zheng <Penny.Zheng@xxxxxxx>, Henry Wang <Henry.Wang@xxxxxxx>, nd <nd@xxxxxxx>
  • Delivery-date: Wed, 02 Mar 2022 06:43:37 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AdgpQxtXwh7LkfydTgiYk9bhMgU+ogAn0mUAABEK2UAAF1ylAACsO9YwAA5uZgAAI3g7sA==
  • Thread-topic: Proposal for Porting Xen to Armv8-R64 - DraftA

Hi Julien,

> -----Original Message-----
> From: Julien Grall <julien@xxxxxxx>
> Sent: 2022年3月1日 21:17
> To: Wei Chen <Wei.Chen@xxxxxxx>; Stefano Stabellini
> <sstabellini@xxxxxxxxxx>
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; Bertrand Marquis
> <Bertrand.Marquis@xxxxxxx>; Penny Zheng <Penny.Zheng@xxxxxxx>; Henry Wang
> <Henry.Wang@xxxxxxx>; nd <nd@xxxxxxx>
> Subject: Re: Proposal for Porting Xen to Armv8-R64 - DraftA
> 
> On 01/03/2022 06:29, Wei Chen wrote:
> > Hi Julien,
> 
> Hi,
> 
> >> -----Original Message-----
> >> From: Julien Grall <julien@xxxxxxx>
> >> Sent: 2022年2月26日 4:12
> >> To: Wei Chen <Wei.Chen@xxxxxxx>; Stefano Stabellini
> >> <sstabellini@xxxxxxxxxx>
> >> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; Bertrand Marquis
> >> <Bertrand.Marquis@xxxxxxx>; Penny Zheng <Penny.Zheng@xxxxxxx>; Henry
> Wang
> >> <Henry.Wang@xxxxxxx>; nd <nd@xxxxxxx>
> >> Subject: Re: Proposal for Porting Xen to Armv8-R64 - DraftA
> >>
> >> Hi Wei,
> >>
> >> On 25/02/2022 10:48, Wei Chen wrote:
> >>>>>       Armv8-R64 can support max to 256 MPU regions. But that's just
> >>>> theoretical.
> >>>>>       So we don't want to define `pr_t mpu_regions[256]`, this is a
> >> memory
> >>>> waste
> >>>>>       in most of time. So we decided to let the user specify through
> a
> >>>> Kconfig
> >>>>>       option. `CONFIG_ARM_MPU_EL1_PROTECTION_REGIONS` default value
> can
> >> be
> >>>> `32`,
> >>>>>       it's a typical implementation on Armv8-R64. Users will
> recompile
> >> Xen
> >>>> when
> >>>>>       their platform changes. So when the MPU changes, respecifying
> the
> >>>> MPU
> >>>>>       protection regions number will not cause additional problems.
> >>>>
> >>>> I wonder if we could probe the number of MPU regions at runtime and
> >>>> dynamically allocate the memory needed to store them in arch_vcpu.
> >>>>
> >>>
> >>> We have considered to used a pr_t mpu_regions[0] in arch_vcpu. But it
> >> seems
> >>> we will encounter some static allocated arch_vcpu problems and sizeof
> >> issue.
> >>
> >> Does it need to be embedded in arch_vcpu? If not, then we could
> allocate
> >> memory outside and add a pointer in arch_vcpu.
> >>
> >
> > We had thought to use a pointer in arch_vcpu instead of embedding
> mpu_regions
> > into arch_vcpu. But we noticed that arch_vcpu has a __cacheline_aligned
> > attribute, this may be because of arch_vcpu will be used very frequently
> > in some critical path. So if we use the pointer for mpu_regions, may
> cause
> > some cache miss in these critical path, for example, in context_swtich.
> 
>  From my understanding, the idea behind ``cacheline_aligned`` is to
> avoid the struct vcpu to be shared with other datastructure. Otherwise
> you may end up to have two pCPUs to frequently write the same cacheline
> which is not ideal.
> 
> arch_vcpu should embbed anything that will be accessed often (e.g.
> entry/exit) to certain point. For instance, not everything related to
> the vGIC are embbed in the vCPU/Domain structure.
> 
> I am a bit split regarding the mpu_regions. If they are mainly used in
> the context_switch() then I would argue this is a premature optimization
> because the scheduling decision is probably going to take a lot more
> time than the context switch itself.

mpu_regions in arch_vcpu are used to save guest's EL1 MPU context. So, yes,
they are mainly used in context_switch. In terms of the number of registers,
it will save/restore more work than the original V8A. And on V8R we also need
to keep most of the original V8A save/restore work. So it will take longer
than the original V8A context_switch. And I think this is due to architecture's
difference. So it's impossible for us not to save/restore EL1 MPU region
registers in context_switch. And we have done some optimization for EL1 MPU
save/restore:
1. Assembly code for EL1 MPU context_switch
2. Use real MPU regions number instead of CONFIG_ARM_MPU_EL1_PROTECTION_REGIONS
   in context_switch. CONFIG_ARM_MPU_EL1_PROTECTION_REGIONS is defined the Max
   supported EL1 MPU regions for this Xen image. All platforms that implement
   EL1 MPU regions in this range can work well with this Xen Image. But if the
   implemented EL1 MPU region number exceeds 
CONFIG_ARM_MPU_EL1_PROTECTION_REGIONS,
   this Xen image could not work well on this platform.
  
> 
> Note that for the P2M we already have that indirection because it is
> embbed in the struct domain.

It's different with V8A P2M case. In V8A context_switch we just need to
save/restore VTTBR, we don't need to do P2M table walk. But on V8R, we
need to access valid mpu_regions for save/restore.

> 
> This raises one question, why is the MPUs regions will be per-vCPU
> rather per domain?
> 

Because there is a EL1 MPU component for each pCPU. We can't assume guest
to use the same EL1 MPU configuration for all vCPU.

> Cheers,
> 
> --
> Julien Grall

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.