|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v1 01/13] xen/arm: re-arrange the static shared memory region
> -----Original Message-----
> From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
> Sent: Wednesday, February 8, 2023 4:55 AM
> To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Wei Chen <Wei.Chen@xxxxxxx>; Stefano Stabellini
> <sstabellini@xxxxxxxxxx>; Julien Grall <julien@xxxxxxx>; Bertrand Marquis
> <Bertrand.Marquis@xxxxxxx>; Volodymyr Babchuk
> <Volodymyr_Babchuk@xxxxxxxx>
> Subject: Re: [PATCH v1 01/13] xen/arm: re-arrange the static shared memory
> region
>
> Hi Penny,
>
Hi, Stewart
Sorry for the late response, got sidetracked by a few internal projects
> On 11/14/22 21:52, Penny Zheng wrote:
> > ...
> > diff --git a/xen/arch/arm/include/asm/setup.h
> > b/xen/arch/arm/include/asm/setup.h
> > index fdbf68aadc..2d4ae0f00a 100644
> > --- a/xen/arch/arm/include/asm/setup.h
> > +++ b/xen/arch/arm/include/asm/setup.h
> > @@ -50,10 +50,6 @@ struct membank {
> > paddr_t start;
> > paddr_t size;
> > enum membank_type type;
> > -#ifdef CONFIG_STATIC_SHM
> > - char shm_id[MAX_SHM_ID_LENGTH];
> > - unsigned int nr_shm_borrowers;
> > -#endif
> > };
> >
> > struct meminfo {
> > @@ -61,6 +57,17 @@ struct meminfo {
> > struct membank bank[NR_MEM_BANKS]; };
> >
> > +struct shm_membank {
> > + char shm_id[MAX_SHM_ID_LENGTH];
> > + unsigned int nr_shm_borrowers;
> > + struct membank *membank;
> > +};
> > +
> > +struct shm_meminfo {
> > + unsigned int nr_banks;
> > + struct shm_membank bank[NR_MEM_BANKS]; };
> > +
> > /*
> > * The domU flag is set for kernels and ramdisks of "xen,domain" nodes.
> > * The purpose of the domU flag is to avoid getting confused in @@
> > -105,6 +112,7 @@ struct bootinfo {
> > struct meminfo acpi;
> > #endif
> > bool static_heap;
> > + struct shm_meminfo shm_mem;
> > };
> >
> > struct map_range_data
>
> The reduction in the sizeof struct membank is a welcome improvement, in
> my opinion, because it is multiplied by NR_MEM_BANKS, and IIRC we only
> have 32k of boot stack to play with.
>
> Before this patch:
> sizeof(struct kernel_info): 20648
> sizeof(struct meminfo): 10248
> sizeof(struct shm_meminfo): 10248
>
> When building with EXTRA_CFLAGS_XEN_CORE="Wstack-usage=4096 -Wno-
> error=stack-usage=":
Learnt! Thx!
> arch/arm/domain_build.c: In function ‘construct_domU’:
> arch/arm/domain_build.c:3747:19: warning: stack usage is 20720 bytes [-
> Wstack-usage=]
> 3747 | static int __init construct_domU(struct domain *d,
> | ^~~~~~~~~~~~~~
> arch/arm/domain_build.c: In function ‘construct_dom0’:
> arch/arm/domain_build.c:3979:19: warning: stack usage is 20688 bytes [-
> Wstack-usage=]
> 3979 | static int __init construct_dom0(struct domain *d)
> | ^~~~~~~~~~~~~~
>
>
>
> After this patch:
> sizeof(struct kernel_info): 14504
> sizeof(struct meminfo): 6152
> sizeof(struct shm_meminfo): 8200
>
> arch/arm/domain_build.c: In function ‘construct_domU’:
> arch/arm/domain_build.c:3754:19: warning: stack usage is 14576 bytes [-
> Wstack-usage=]
> 3754 | static int __init construct_domU(struct domain *d,
> | ^~~~~~~~~~~~~~
> arch/arm/domain_build.c: In function ‘construct_dom0’:
> arch/arm/domain_build.c:3986:19: warning: stack usage is 14544 bytes [-
> Wstack-usage=]
> 3986 | static int __init construct_dom0(struct domain *d)
> | ^~~~~~~~~~~~~~
>
> A later patch in this series will increase it again slightly. Note that I'm
> not
> expecting this series to address these particular warnings, I'm merely
> pointing out the (positive) impact of the change.
I agreed that NR_MEM_BANKS could be a large multiplier, and if we make
"struct shm_meminfo" like "struct meminfo", to have a array of NR_MEM_BANKS
items, it will make Xen binary exceed 20MB... We have discussed it here[1].
However, I'm afraid that dynamic allocation is also not a preferred option here,
where to free the data could be a problem.
So in next serie, which will come very soon, I'll introduce:
```
#define NR_SHM_BANKS 16
/*
* A static shared memory node could be banked with a statically
* configured host memory bank, or a set of arbitrary host memory
* banks allocated from heap.
*/
struct shm_meminfo {
unsigned int nr_banks;
struct membank bank[NR_SHM_BANKS];
paddr_t tot_size;
};
```
Taking your previous instructions, compiling with
"EXTRA_CFLAGS_XEN_CORE="-Wstack-usage=4096 -Wno-error=stack-usage=",
boot stack usage for "construct_domU" and " construct_dom0" will be like:
"
arch/arm/domain_build.c: In function ‘construct_domU’:
arch/arm/domain_build.c:4127:19: warning: stack usage is 16800 bytes
[-Wstack-usage=]
4127 | static int __init construct_domU(struct domain *d,
| ^~~~~~~~~~~~~~
arch/arm/domain_build.c: In function ‘construct_dom0’:
arch/arm/domain_build.c:4359:19: warning: stack usage is 16640 bytes
[-Wstack-usage=]
4359 | static int __init construct_dom0(struct domain *d)
| ^~~~~~~~~~~~~~
"
[1] https://lists.xenproject.org/archives/html/xen-devel/2023-01/msg00449.html
Cheers,
---
Penny Zheng
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |