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

RE: [PATCH 2/2] xen/arm: Handle reserved heap pages in boot and heap allocator


  • To: Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: Henry Wang <Henry.Wang@xxxxxxx>
  • Date: Wed, 31 Aug 2022 01:24:00 +0000
  • Accept-language: zh-CN, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • 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=2; 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=O3hBU/xgD1n/onMg022a0kkz+wuI8MEKgZkKup2h7dg=; b=nz852n5BkDwFhoWuV3ebg9abhwj7e+YAmQfW1sqy2yh4BRBpsVCzzlVL374LdiUYnBFKLfVEWRqFZOCXkUhDQt9ElE0Rb7cEKtTwcgi2/Jbj7avB7Cw9Y8EUFsx0LdXBCk3D613s8eZS3FPc7vzbpwAje6pN7el8fdj6Mpx6DKi877AnFrnvnjTSnLJZ2gyiwXqRC7/xN3jak5F0dgpzhIbiuq76D7X+bvYU2Yjes8g/7pWL9UJjhnEayEusoiWdlJ0vXHvQqOoVbCxUO38KVIGedZGQjgB3yLkiLKe+8atD+EvSzCnW9IUzitnsi96xQB0EuUN+6451lwwirt4nbQ==
  • 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=O3hBU/xgD1n/onMg022a0kkz+wuI8MEKgZkKup2h7dg=; b=QsO5jFt0ejkdwk8NHp2rKiv7+dZQOzr2m8KQg+5Nvp5XJLd/wtKVPPaqI2g1ERN331QGfRit7/l3Uc88wLVvc7Y/FpqFA6iNcx93MFxNSY/1mcm9AHPvOyyw/ed5QVe47grA/gkpWvk6I52KOkfB4XVu85fle55lLykHfY9uABmJCwP5ttnJjvgBUiR9Aimjm5rmuWAyZWWiS/Nq5hZj1wLLuQhnRR/Bt4qPTXyp1Bz93YSOkccR9kXBSNDdJRMU3cL17MvegUZETZc6T990IC1mLw/uqmg/XG8YcV20gB7RKAF2bVt4JozrIzxRT5Fi0mmwXe/jEs6Efz2Jh0pcuQ==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=gtUqO1dke/xMBgIATmmwa0xBDzRb3T/TJ1J/n1/LpmaW7MKullYa61o5y0ap0EAN23sDofkPiPrLnrFp9NC7l44whgEJ83yvsQClkglTC0KcKGuhxtuI2v3jAOOYJj4qeOab7n/bCCiDQOQ0KfBngpvg/JGJzg5HL30OPMTylZyKRLKipagjqQU8+PK66T/O5KsdjzfDaYnxmcYuWxWpSKBoX3QTxSgkgO4itFqUri+ZA4Gg60l5n9svWHLlV5TyxuqlcLu6GpWVFrEv4U3TNemVWJUdnBnoxc1h27GgkDL1+2W2Ai0E3tabrsX5FPjs7pCWs5f1LW626w4FSp8SkQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hwHcBjvm6kMQquLO37vDrO2GyKPnIDrF2tu9lnXjYs1aqYYLSKkKvgjHarjhYsFPUeAnWV7QVHPSazfkDmKpBvDs+m3VaNDb5yuR4gv5NIYqnHm1Ug+zu9Sp7gN9iRy/oM2PnhUt9U2Vmf891+m4nJwblD7vybAGA8ZOsX+dqmJTpfaeWq2CVpUwWOB+E7d4EW7Nn1xRgfQnyrmjHqoFuKoX4mDSIwWGIbsfCgQC6djOeQHc4spyiJUqfYKDbxiuvzjdqBnmuadzVPtihEGfB5jj1aYAz6+pjl3nZ/c3j9f6ESAG2Y2hvlzi0MO0IeRk9iNbt+kqIeg19fjR3UPiaA==
  • 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>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 31 Aug 2022 01:24: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: AQHYt4ugTfbCAM/WyEil7pMplK0r3q3GqcQAgABmBoCAAKwSgIAAgPtw
  • Thread-topic: [PATCH 2/2] xen/arm: Handle reserved heap pages in boot and heap allocator

Hi Stefano,

> -----Original Message-----
> From: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> > > and we can automatically calculate xenheap_pages in a single line.
> >
> > Here I am a little bit confused. Sorry to ask but could you please explain
> > a little bit more about why we can calculate the xenheap_pages in a single
> > line? Below is the code snippet in my mind, is this correct?
> >
> > if (reserved_heap)
> 
> coding style
> 
> >     e = reserved_heap_end;
> > else
> > {
> >     do
> >     {
> >         e = consider_modules(ram_start, ram_end,
> >                              pfn_to_paddr(xenheap_pages),
> >                              32<<20, 0);
> >         if ( e )
> >             break;
> >
> >         xenheap_pages >>= 1;
> >     } while ( !opt_xenheap_megabytes && xenheap_pages > 32<<(20-
> PAGE_SHIFT) );
> > }
> 
> Yes, this is what I meant.

Thank you very much for your detailed explanation below!
[...]

> 
> But also, here the loop is also for adjusting xenheap_pages, and
> xenheap_pages is initialized as follows:
> 
> 
>     if ( opt_xenheap_megabytes )
>         xenheap_pages = opt_xenheap_megabytes << (20-PAGE_SHIFT);
>     else
>     {
>         xenheap_pages = (heap_pages/32 + 0x1fffUL) & ~0x1fffUL;
>         xenheap_pages = max(xenheap_pages, 32UL<<(20-PAGE_SHIFT));
>         xenheap_pages = min(xenheap_pages, 1UL<<(30-PAGE_SHIFT));
>     }
> 
> 
> In the reserved_heap case, it doesn't make sense to initialize
> xenheap_pages like that, right? It should be something like:

I am not sure about that, since we already have
heap_pages = reserved_heap ? reserved_heap_pages : ram_pages;

the heap_pages is supposed to contain domheap_pages + xenheap_pages
based on the reserved heap definition discussed in the RFC.

from the code in...

> 
>     if ( opt_xenheap_megabytes )
>         xenheap_pages = opt_xenheap_megabytes << (20-PAGE_SHIFT);
>     else if ( reserved_heap )
>         xenheap_pages = heap_pages;

...here, setting xenheap_pages to heap_pages makes me a little bit
confused.

>     else
>     {
>         xenheap_pages = (heap_pages/32 + 0x1fffUL) & ~0x1fffUL;
>         xenheap_pages = max(xenheap_pages, 32UL<<(20-PAGE_SHIFT));
>         xenheap_pages = min(xenheap_pages, 1UL<<(30-PAGE_SHIFT));
>     }

If we keep this logic as this patch does, we can have the requirements...

> 
> But also it looks like that on arm32 we have specific requirements for
> Xen heap:
> 
>      *  - must be 32 MiB aligned
>      *  - must not include Xen itself or the boot modules
>      *  - must be at most 1GB or 1/32 the total RAM in the system if less
>      *  - must be at least 32M

...here, with the "1/32 the total RAM" now being "1/32 of the total reserved
heap region", since heap_pages is now reserved_heap_pages.

> 
> I think we should check at least the 32MB alignment and 32MB minimum
> size before using the xen_heap bank.
> 
> 
> In short I think this patch should:
> 
> - add a check for 32MB alignment and size of the xen_heap memory bank
> - if reserved_heap, set xenheap_pages = heap_pages
> - if reserved_heap, skip the consider_modules do/while
> 
> Does it make sense?

I left some of my thoughts above to explain my understanding, but I might
be wrong, thank you for your patience!

Kind regards,
Henry



 


Rackspace

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