[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 4/6] xen: credit2: rearrange members of control structures
With the aim of improving memory size and layout, and at the same time trying to put related fields reside in the same cacheline. Here's a summary of the output of `pahole`, with and without this patch, for the affected data structures. csched2_runqueue_data: * Before: size: 216, cachelines: 4, members: 14 sum members: 208, holes: 2, sum holes: 8 last cacheline: 24 bytes * After: size: 208, cachelines: 4, members: 14 last cacheline: 16 bytes csched2_private: * Before: size: 120, cachelines: 2, members: 8 sum members: 112, holes: 1, sum holes: 4 padding: 4 last cacheline: 56 bytes * After: size: 112, cachelines: 2, members: 8 last cacheline: 48 bytes csched2_vcpu: * Before: size: 112, cachelines: 2, members: 14 sum members: 108, holes: 1, sum holes: 4 last cacheline: 48 bytes * After: size: 112, cachelines: 2, members: 14 padding: 4 last cacheline: 48 bytes While there, improve the wording, style and alignment of comments too. Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --- Cc: George Dunlap <george.dunlap@xxxxxxxxxx> Cc: Anshul Makkar <anshulmakkar@xxxxxxxxx> --- xen/common/sched_credit2.c | 102 ++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c index 15862f2..9814072 100644 --- a/xen/common/sched_credit2.c +++ b/xen/common/sched_credit2.c @@ -355,40 +355,41 @@ custom_param("credit2_runqueue", parse_credit2_runqueue); * Per-runqueue data */ struct csched2_runqueue_data { - int id; - - spinlock_t lock; /* Lock for this runqueue. */ - cpumask_t active; /* CPUs enabled for this runqueue */ - - struct list_head runq; /* Ordered list of runnable vms */ - struct list_head svc; /* List of all vcpus assigned to this runqueue */ - unsigned int max_weight; - unsigned int pick_bias;/* Last CPU we picked. Start from it next time */ - - cpumask_t idle, /* Currently idle pcpus */ - smt_idle, /* Fully idle-and-untickled cores (see below) */ - tickled; /* Have been asked to go through schedule */ - int load; /* Instantaneous load: Length of queue + num non-idle threads */ - s_time_t load_last_update; /* Last time average was updated */ - s_time_t avgload; /* Decaying queue load */ - s_time_t b_avgload; /* Decaying queue load modified by balancing */ + spinlock_t lock; /* Lock for this runqueue */ + + struct list_head runq; /* Ordered list of runnable vms */ + int id; /* ID of this runqueue (-1 if invalid) */ + + int load; /* Instantaneous load (num of non-idle vcpus) */ + s_time_t load_last_update; /* Last time average was updated */ + s_time_t avgload; /* Decaying queue load */ + s_time_t b_avgload; /* Decaying queue load modified by balancing */ + + cpumask_t active, /* CPUs enabled for this runqueue */ + smt_idle, /* Fully idle-and-untickled cores (see below) */ + tickled, /* Have been asked to go through schedule */ + idle; /* Currently idle pcpus */ + + struct list_head svc; /* List of all vcpus assigned to the runqueue */ + unsigned int max_weight; /* Max weight of the vcpus in this runqueue */ + unsigned int pick_bias; /* Last picked pcpu. Start from it next time */ }; /* * System-wide private data */ struct csched2_private { - rwlock_t lock; - cpumask_t initialized; /* CPU is initialized for this pool */ - - struct list_head sdom; /* Used mostly for dump keyhandler. */ + rwlock_t lock; /* Private scheduler lock */ - cpumask_t active_queues; /* Queues which may have active cpus */ - struct csched2_runqueue_data *rqd; + unsigned int load_precision_shift; /* Precision of load calculations */ + unsigned int load_window_shift; /* Lenght of load decaying window */ + unsigned int ratelimit_us; /* Rate limiting for this scheduler */ + + cpumask_t active_queues; /* Runqueues with (maybe) active cpus */ + struct csched2_runqueue_data *rqd; /* Data of the various runqueues */ - unsigned int load_precision_shift; - unsigned int load_window_shift; - unsigned ratelimit_us; /* each cpupool can have its own ratelimit */ + cpumask_t initialized; /* CPUs part of this scheduler */ + struct list_head sdom; /* List of domains (for debug key) */ }; /* @@ -403,37 +404,36 @@ static DEFINE_PER_CPU(int, runq_map); * Virtual CPU */ struct csched2_vcpu { - struct list_head rqd_elem; /* On the runqueue data list */ - struct list_head runq_elem; /* On the runqueue */ - struct csched2_runqueue_data *rqd; /* Up-pointer to the runqueue */ - - /* Up-pointers */ - struct csched2_dom *sdom; - struct vcpu *vcpu; - - unsigned int weight; - unsigned int residual; - - int credit; - s_time_t start_time; /* When we were scheduled (used for credit) */ - unsigned flags; /* 16 bits doesn't seem to play well with clear_bit() */ - int tickled_cpu; /* cpu tickled for picking us up (-1 if none) */ - - /* Individual contribution to load */ - s_time_t load_last_update; /* Last time average was updated */ - s_time_t avgload; /* Decaying queue load */ - - struct csched2_runqueue_data *migrate_rqd; /* Pre-determined rqd to which to migrate */ + struct list_head rqd_elem; /* On csched2_runqueue_data's svc list */ + struct csched2_runqueue_data *rqd; /* Up-pointer to the runqueue */ + + int credit; /* Current amount of credit */ + unsigned int weight; /* Weight of this vcpu */ + unsigned int residual; /* Reminder of div(max_weight/weight) */ + unsigned flags; /* Status flags (16 bits would be ok, */ + /* but clear_bit() does not like that) */ + s_time_t start_time; /* Time we were scheduled (for credit) */ + + /* Individual contribution to load */ + s_time_t load_last_update; /* Last time average was updated */ + s_time_t avgload; /* Decaying queue load */ + + struct list_head runq_elem; /* On the runqueue (rqd->runq) */ + struct csched2_dom *sdom; /* Up-pointer to domain */ + struct vcpu *vcpu; /* Up-pointer, to vcpu */ + + struct csched2_runqueue_data *migrate_rqd; /* Pre-determined migr. target */ + int tickled_cpu; /* Cpu that will pick us (-1 if none) */ }; /* * Domain */ struct csched2_dom { - struct list_head sdom_elem; - struct domain *dom; - uint16_t weight; - uint16_t nr_vcpus; + struct list_head sdom_elem; /* On csched2_runqueue_data's sdom list */ + struct domain *dom; /* Up-pointer to domain */ + uint16_t weight; /* User specified weight */ + uint16_t nr_vcpus; /* Number of vcpus of this domain */ }; /* _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |