On 14.03.2025 18:24, Alejandro Vallejo wrote: > --- a/xen/common/page_alloc.c > +++ b/xen/common/page_alloc.c > @@ -485,6 +485,9 @@ static unsigned long node_need_scrub[MAX_NUMNODES]; > static unsigned long *avail[MAX_NUMNODES]; > static long total_avail_pages; > > +/* Per-node counts of free pages */ > +static unsigned long pernode_avail_pages[MAX_NUMNODES];
Performance-wise I find concerning any addition of yet another array like this one, which - unlike e.g. avail[] - is randomly written from all nodes. I think we either need to introduce per_node() paralleling per_cpu(), or (less desirable, but perhaps easier to carry out) data structures need to be introduced to make sure one particular cache line would only ever be written from a single node. As it's visible from patch context: node_need_scrub[] could/should move there, too, for example. Jan