[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/6] xen: credit2: allocate runqueue data structure dynamically
On 06/23/2017 11:54 AM, Dario Faggioli wrote: > Instead of keeping an NR_CPUS big array of csched2_runqueue_data > elements, directly inside the csched2_private structure, allocate > it dynamically. > > This has two positive effects: > - reduces the size of csched2_private sensibly, which is > especially good in case there are more instance of Credit2 > (in different cpupools), and is also good from the point > of view of fitting the struct into CPU caches; > - we can use nr_cpu_ids as array size, which may be sensibly > smaller than NR_CPUS > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> Looks good, thanks: Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx> > --- > Cc: George Dunlap <george.dunlap@xxxxxxxxxx> > Cc: Anshul Makkar <anshulmakkar@xxxxxxxxx> > --- > xen/common/sched_credit2.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c > index 126417c..10d9488 100644 > --- a/xen/common/sched_credit2.c > +++ b/xen/common/sched_credit2.c > @@ -385,7 +385,7 @@ struct csched2_private { > > int runq_map[NR_CPUS]; > cpumask_t active_queues; /* Queues which may have active cpus */ > - struct csched2_runqueue_data rqd[NR_CPUS]; > + struct csched2_runqueue_data *rqd; > > unsigned int load_precision_shift; > unsigned int load_window_shift; > @@ -3099,9 +3099,11 @@ csched2_init(struct scheduler *ops) > printk(XENLOG_INFO "load tracking window length %llu ns\n", > 1ULL << opt_load_window_shift); > > - /* Basically no CPU information is available at this point; just > + /* > + * Basically no CPU information is available at this point; just > * set up basic structures, and a callback when the CPU info is > - * available. */ > + * available. > + */ > > prv = xzalloc(struct csched2_private); > if ( prv == NULL ) > @@ -3111,7 +3113,13 @@ csched2_init(struct scheduler *ops) > rwlock_init(&prv->lock); > INIT_LIST_HEAD(&prv->sdom); > > - /* But un-initialize all runqueues */ > + /* Allocate all runqueues and mark them as un-initialized */ > + prv->rqd = xzalloc_array(struct csched2_runqueue_data, nr_cpu_ids); > + if ( !prv->rqd ) > + { > + xfree(prv); > + return -ENOMEM; > + } > for ( i = 0; i < nr_cpu_ids; i++ ) > { > prv->runq_map[i] = -1; > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |