mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
xen: credit: 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.
csched_pcpu:
* Before:
size: 88, cachelines: 2, members: 6
sum members: 80, holes: 1, sum holes: 4
padding: 4
paddings: 1, sum paddings: 5
last cacheline: 24 bytes
* After:
size: 80, cachelines: 2, members: 6
paddings: 1, sum paddings: 5
last cacheline: 16 bytes
csched_vcpu:
* Before:
size: 72, cachelines: 2, members: 9
padding: 2
last cacheline: 8 bytes
* After:
same numbers, but move some fields to put
related fields in same cache line.
csched_private:
* Before:
size: 152, cachelines: 3, members: 17
sum members: 140, holes: 2, sum holes: 8
padding: 4
paddings: 1, sum paddings: 5
last cacheline: 24 bytes
* After:
same numbers, but move some fields to put
related fields in same cache line.
Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
1 parent
a2c4e5ab59
commit
e371d3587b
1 file changed
+26
-15
+26
-15
@@ -169,10 +169,12 @@ integer_param("sched_credit_tslice_ms", sched_credit_tslice_ms);
|
||||
struct csched_pcpu {
|
||||
struct list_head runq;
|
||||
uint32_t runq_sort_last;
|
||||
struct timer ticker;
|
||||
unsigned int tick;
|
||||
|
||||
unsigned int idle_bias;
|
||||
unsigned int nr_runnable;
|
||||
|
||||
unsigned int tick;
|
||||
struct timer ticker;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -181,13 +183,18 @@ struct csched_pcpu {
|
||||
struct csched_vcpu {
|
||||
struct list_head runq_elem;
|
||||
struct list_head active_vcpu_elem;
|
||||
|
||||
/* Up-pointers */
|
||||
struct csched_dom *sdom;
|
||||
struct vcpu *vcpu;
|
||||
atomic_t credit;
|
||||
unsigned int residual;
|
||||
|
||||
s_time_t start_time; /* When we were scheduled (used for credit) */
|
||||
unsigned flags;
|
||||
int16_t pri;
|
||||
int pri;
|
||||
|
||||
atomic_t credit;
|
||||
unsigned int residual;
|
||||
|
||||
#ifdef CSCHED_STATS
|
||||
struct {
|
||||
int credit_last;
|
||||
@@ -219,21 +226,25 @@ struct csched_dom {
|
||||
struct csched_private {
|
||||
/* lock for the whole pluggable scheduler, nests inside cpupool_lock */
|
||||
spinlock_t lock;
|
||||
struct list_head active_sdom;
|
||||
uint32_t ncpus;
|
||||
struct timer master_ticker;
|
||||
unsigned int master;
|
||||
|
||||
cpumask_var_t idlers;
|
||||
cpumask_var_t cpus;
|
||||
uint32_t *balance_bias;
|
||||
uint32_t runq_sort;
|
||||
unsigned int ratelimit_us;
|
||||
|
||||
/* Period of master and tick in milliseconds */
|
||||
unsigned int tslice_ms, tick_period_us, ticks_per_tslice;
|
||||
uint32_t ncpus;
|
||||
|
||||
struct list_head active_sdom;
|
||||
uint32_t weight;
|
||||
uint32_t credit;
|
||||
int credit_balance;
|
||||
uint32_t runq_sort;
|
||||
uint32_t *balance_bias;
|
||||
unsigned ratelimit_us;
|
||||
/* Period of master and tick in milliseconds */
|
||||
unsigned tslice_ms, tick_period_us, ticks_per_tslice;
|
||||
unsigned credits_per_tslice;
|
||||
unsigned int credits_per_tslice;
|
||||
|
||||
unsigned int master;
|
||||
struct timer master_ticker;
|
||||
};
|
||||
|
||||
static void csched_tick(void *_cpu);
|
||||
|
||||