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

Re: [PATCH 3/4] x86/PVH: improve Dom0 memory size calculation


  • To: Jan Beulich <jbeulich@xxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Tue, 31 Aug 2021 15:07:56 +0100
  • 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; bh=oMakH3yRVtDpnZ756uJoJ2MWewMYGLo0j3MwOPAPQdM=; b=ChQXK+TSUVPFSKUnlw00rLp1TWtjJTYWedF9Af0MclzVvQRkDWzyWjxyWW+6ODuzqCxHKpzOJ7Dx62JfHPWM4YcuINb/nE5rkdTenR3BedEPBTwepQUJN/ouBOKvHyTmntRcWG5XdK4uHDdNuT6bSf9rZrdjufUTfRl9c47Kz3CpulSzumve45reYkLZqEVfYZk+7DZl3ZMb6fac4UcVcWA0Mf/BXfV5MVnBgyrbGwxB2mbelnKkTDoBuXYNauzF8JFl5eWLctmBc5WG/7M1mSDOt9/w6bGrEO1jbnlxa8SkG7z7wYsCD9HSOiRis1fOUIPdjkC5xohUDwb+RZ95lg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JQzLTrOUFISskDTtkieFSE6Nexi8DWsZjTVnv7ESCrsgd/4h1Cn9nvIts0XNVW4jXZQ3furitsra3FbhrbOUK1JoYxhvBCsLA5jrpSRtZqlmQGLfxHbV7YpJn42aHPw9Nl6bIqpKgoOQSymP9Zcr6qPTBmKf4dwX8V9hP6irPJFWA4s+oEhW9gRXp2T8lhTM8sph4zrwggpfsKLwYrZdaqE06GcWUgrWxo/0XkdxNFuZU9u3R8Nc1YImGMjMxUjv7hUyrKkmOQxyY/M7pDBlSdULp/61V4MAynlMffD+/vGtGAWdwguYBCSxC4Azpf8dOQ9alt1PjHJIdIxRlVrhKw==
  • Authentication-results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Tue, 31 Aug 2021 14:08:14 +0000
  • Ironport-hdrordr: A9a23:5lgTK6+GyUBAwgB4fJluk+Fddb1zdoMgy1knxilNoENuH/Bwxv rFoB1E73TJYW4qKQkdcKO7SdK9qBLnhNRICOwqUYtKMzOW3FdAQLsC0WKm+UyYJ8SczJ8R6U 4DSdkYNDSYNzET4qjHCUuDYrAdKbK8gcOVbJLlvhJQpHZRGsNdBmlCajqzIwlTfk1rFJA5HJ 2T6o5svDy7Y0kaacy9Gz0sQ/XDj8ejruOoXTc2QzocrCWehzKh77D3VzKC2A0Fbj9JybA+tU DYjg3C4Lm5uf3T8G6T64aT1eUWpDLS8KoBOCW+sLlWFtwqsHfsWG1VYczDgNnympDq1L9lqq iKn/5qBbUI15qYRBDJnfKq4Xit7N9m0Q6f9XaIxXTkusD3XzQ8Fo5Igp9YaALQ7w46sMh7y7 8j5RPui3N7N2K1oM3G3am+a/iqrDvFnVMy1eoIy3BPW4oXb7Fc6YQZ4UNOCZ8FWCb38pouHu ViBNzVoK8+SyLTU1nJ+m10hNC8VHU6GRmLBkAEp8yOyjBT2HR01VERysATlmoJsJg9V55H7e LZNbkArsAGcuYGKaZmQOsRS8q+DWLABRrKLWKJOFziULoKPnrcwqSHlYndJNvaCqDg6aFC06 gpfGkoy1LaSnieevFmhqc7jSwlaF/NLAjQ9g==
  • Ironport-sdr: ENLt0WLIFuMjcYXBySPZsSuPILhu+wGJQbVN8Czjl2c1Zvc0Tu6IHcCQYt4aPfbKoEmAOJAvfU /P87ojQO4jVWU4twiRNEV6BiwP53qSvi2AIhPe7q7o4d/lza/EwmEjnvmdhaMOGWNku2c6egRL 9git0nIZx0Bm4KzHkHDvMAwTTQaZa36EatJk/rM0Rlvq4Ni7JVF8rveyPVthjIeAETlbwD7m0U BHmZC30/X48HkZW+Ko2TbBgY49Z+Q+2bh084EQCr8+TI9HVUi2qsuza+3OK6Ywn71jji+l4Nzi TKcF/CFE9SSEE6Vi9q4Xn2m7
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 30/08/2021 14:03, Jan Beulich wrote:
> Assuming that the accounting for IOMMU page tables will also take care
> of the P2M needs was wrong: dom0_paging_pages() can determine a far
> higher value, high enough for the system to run out of memory while
> setting up Dom0. Hence in the case of shared page tables the larger of
> the two values needs to be used (without shared page tables the sum of
> both continues to be applicable).

I'm afraid that I can't follow this at all.

What causes the system to run out of RAM while constructing dom0?

>
> While there also account for two further aspects in the PV case: With
> "iommu=dom0-passthrough" no IOMMU page tables would get allocated, so
> none need accounting for. And if shadow mode is to be enabled, setting
> aside a suitable amount for the P2M pool to get populated is also
> necessary (i.e. similar to the non-shared-page-tables case of PVH).
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> --- a/xen/arch/x86/dom0_build.c
> +++ b/xen/arch/x86/dom0_build.c
> @@ -318,7 +318,7 @@ unsigned long __init dom0_compute_nr_pag
>      struct domain *d, struct elf_dom_parms *parms, unsigned long initrd_len)
>  {
>      nodeid_t node;
> -    unsigned long avail = 0, nr_pages, min_pages, max_pages;
> +    unsigned long avail = 0, nr_pages, min_pages, max_pages, iommu_pages = 0;
>      bool need_paging;
>  
>      /* The ordering of operands is to work around a clang5 issue. */
> @@ -337,18 +337,23 @@ unsigned long __init dom0_compute_nr_pag
>          avail -= d->max_vcpus - 1;
>  
>      /* Reserve memory for iommu_dom0_init() (rough estimate). */
> -    if ( is_iommu_enabled(d) )
> +    if ( is_iommu_enabled(d) && !iommu_hwdom_passthrough )
>      {
>          unsigned int s;
>  
>          for ( s = 9; s < BITS_PER_LONG; s += 9 )
> -            avail -= max_pdx >> s;
> +            iommu_pages += max_pdx >> s;
> +
> +        avail -= iommu_pages;
>      }
>  
> -    need_paging = is_hvm_domain(d) &&
> -        (!iommu_use_hap_pt(d) || !paging_mode_hap(d));
> +    need_paging = is_hvm_domain(d)
> +                  ? !iommu_use_hap_pt(d) || !paging_mode_hap(d)
> +                  : opt_dom0_shadow;

As per patch 4, this condition needs adjusting.

~Andrew

>      for ( ; ; need_paging = false )
>      {
> +        unsigned long paging_pages;
> +
>          nr_pages = get_memsize(&dom0_size, avail);
>          min_pages = get_memsize(&dom0_min_size, avail);
>          max_pages = get_memsize(&dom0_max_size, avail);
> @@ -377,11 +382,20 @@ unsigned long __init dom0_compute_nr_pag
>          nr_pages = min(nr_pages, max_pages);
>          nr_pages = min(nr_pages, avail);
>  
> -        if ( !need_paging )
> -            break;
> +        paging_pages = paging_mode_enabled(d) || need_paging
> +                       ? dom0_paging_pages(d, nr_pages) : 0;
>  
>          /* Reserve memory for shadow or HAP. */
> -        avail -= dom0_paging_pages(d, nr_pages);
> +        if ( !need_paging )
> +        {
> +            if ( paging_pages <= iommu_pages )
> +                break;
> +
> +            avail -= paging_pages - iommu_pages;
> +        }
> +        else
> +            avail -= paging_pages;
> +        iommu_pages = paging_pages;
>      }
>  
>      if ( is_pv_domain(d) &&
>





 


Rackspace

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