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

Re: [PATCH v2] x86/mem_sharing: support forks with active vPMU state


  • To: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <Andrew.Cooper3@xxxxxxxxxx>
  • Date: Thu, 21 Jul 2022 12:03:26 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.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=9/cjYmO/D1diyqQ8GoCBUNEW51CV5dQxoRAoxdm4Nzw=; b=bQ45y7TZqDo9vT1FDehaqekIXqZlG/jfJB4j+pPTuE4scbzaR8OByyI9DgVy5LHVqb3GqocMhTe/mzQMWJ9NhI0RqYiY1HemdhAx6nRj7kB6ZLCDF4+nnld3+kxvTKBbRyM6SFYT4FUj+EsHI6opS6WvBakOMsGdgBNyYP+/jF1bxMNibr6cPw1iNKbncfiQ6TlMjD7lYki2pu4FIhq9INJrWdO0537S+aNOaZepWW4SoB/gJhhUtfqXGfzReZpyn0v1QWimJZzmh6EeB4Pot1hpKIYkE8/l0osmnKE6v9ZD2+VOOir3UeYspVIWjo7FplG+BXoDJF8z9oVSvlTLmw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IUFInXPNVKnFZs82GbF3/6xKsQTDZmB+BBSZEPrmvR0+DKWwuh32CpSCmTlzWm923ArvD0x0MXEnjfarG1fec2nFhHKnMpLYXmSlSWG8TlLGXp1EzspAeGYCb5CoLgvD3vFhFmgka2FWlEi5AqobVkq8dGb97DYOr43ijmM7oG66b16r7xYrKi1PR8plik3gsSTOPVIL7abycMM2mo9ZIOfyZmwwWe1ksrehu9tR06dThtEEVYsDBTqjDeCye4ViPcZMDZ8ltIjRwC4tKhZ9pFCFY5iRU6QK5onViDVZe6vCC1oLdxo62JusAJzbClublPcDagEJnbfVJ/FjXUuCVQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Jan Beulich <jbeulich@xxxxxxxx>, Roger Pau Monne <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Jun Nakajima <jun.nakajima@xxxxxxxxx>, Kevin Tian <kevin.tian@xxxxxxxxx>, Tamas K Lengyel <tamas@xxxxxxxxxxxxx>, George Dunlap <George.Dunlap@xxxxxxxxxx>
  • Delivery-date: Thu, 21 Jul 2022 12:03:54 +0000
  • Ironport-data: A9a23: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
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHYnGkyeHzLfYftlkqMXoeeKAYG062IuvCA
  • Thread-topic: [PATCH v2] x86/mem_sharing: support forks with active vPMU state

On 20/07/2022 19:47, Tamas K Lengyel wrote:
> diff --git a/xen/arch/x86/cpu/vpmu_amd.c b/xen/arch/x86/cpu/vpmu_amd.c
> index 9bacc02ec1..4c76e24551 100644
> --- a/xen/arch/x86/cpu/vpmu_amd.c
> +++ b/xen/arch/x86/cpu/vpmu_amd.c
> @@ -518,6 +518,14 @@ static int cf_check svm_vpmu_initialise(struct vcpu *v)
>      return 0;
>  }
>  
> +#ifdef CONFIG_MEM_SHARING
> +static int cf_check amd_allocate_context(struct vcpu *v)
> +{
> +    ASSERT_UNREACHABLE();

What makes this unreachable?

I know none of this is tested on AMD, but it is in principle reachable I
think.

I'd just leave this as return 0.  It will be slightly less rude to
whomever adds forking support on AMD.

> +    return 0;
> +}
> +#endif
> +
>  static const struct arch_vpmu_ops __initconst_cf_clobber amd_vpmu_ops = {
>      .initialise = svm_vpmu_initialise,
>      .do_wrmsr = amd_vpmu_do_wrmsr,
> @@ -527,6 +535,10 @@ static const struct arch_vpmu_ops __initconst_cf_clobber 
> amd_vpmu_ops = {
>      .arch_vpmu_save = amd_vpmu_save,
>      .arch_vpmu_load = amd_vpmu_load,
>      .arch_vpmu_dump = amd_vpmu_dump,
> +
> +#ifdef CONFIG_MEM_SHARING
> +    .allocate_context = amd_allocate_context

Trailing comma please, and in the Intel structure.

> +#endif
>  };
>  
>  static const struct arch_vpmu_ops *__init common_init(void)
> diff --git a/xen/arch/x86/cpu/vpmu_intel.c b/xen/arch/x86/cpu/vpmu_intel.c
> index 8612f46973..01d4296485 100644
> --- a/xen/arch/x86/cpu/vpmu_intel.c
> +++ b/xen/arch/x86/cpu/vpmu_intel.c
> @@ -282,10 +282,17 @@ static inline void __core2_vpmu_save(struct vcpu *v)
>      for ( i = 0; i < fixed_pmc_cnt; i++ )
>          rdmsrl(MSR_CORE_PERF_FIXED_CTR0 + i, fixed_counters[i]);
>      for ( i = 0; i < arch_pmc_cnt; i++ )
> +    {
>          rdmsrl(MSR_IA32_PERFCTR0 + i, xen_pmu_cntr_pair[i].counter);
> +        rdmsrl(MSR_P6_EVNTSEL(i), xen_pmu_cntr_pair[i].control);
> +    }
>  
>      if ( !is_hvm_vcpu(v) )
>          rdmsrl(MSR_CORE_PERF_GLOBAL_STATUS, core2_vpmu_cxt->global_status);
> +    /* Save MSR to private context to make it fork-friendly */
> +    else if ( mem_sharing_enabled(v->domain) )
> +        vmx_read_guest_msr(v, MSR_CORE_PERF_GLOBAL_CTRL,
> +                           &core2_vpmu_cxt->global_ctrl);

/sigh.  So we're also not using the VMCS perf controls either.

That wants fixing too, but isn't a task for now.

Everything else LGTM.

~Andrew

 


Rackspace

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