|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCHv3 3/4] xen: use ticket locks for spin locks
At 00:56 +0100 on 30 Apr (1430355366), Jan Beulich wrote:
> >>> David Vrabel <david.vrabel@xxxxxxxxxx> 04/29/15 5:28 PM >>>
> >On 29/04/15 00:15, Jan Beulich wrote:
> >>>>> David Vrabel <david.vrabel@xxxxxxxxxx> 04/28/15 6:16 PM >>>
> >>> Are there any structures whose size you're particularly concerned about?
> >>
> >> No specific ones (but of course structures with an inherent size constraint
> >> - like struct domain and struct vcpu - are, with all of their
> >> sub-structures,
> >> primary candidates). I just recall that in some cases (and this may no
> >> longer
> >> apply due to later additions) structures got arranged specifically taking
> >> in
> >> mind the 2-byte size of the locks, and the growth here may thus mean a
> >> structure size growth of more than just two bytes.
> >
> >Spin locks are currently 4 bytes (2 bytes for the lock, plus 2 bytes for
> >the recurse_{cnt,cpu}), and ticket locks are now 8 bytes (an increase in
> >4 bytes).
> >
> >struct vcpu does not increase in size (there is 56, now 48 bytes, of
> >padding before the arch field).
> >
> >struct domain increases from 3480 to 3544 bytes.
>
> Odd - this suggests there's still some 64-byte alignment somewhere, but I
> can't immediately spot it. Only struct vcpu has an obvious 64-byte aligned
> field (struct pi_desc) afaics.
I got slightly different numbers to David (I suspect just starting
from a different baseline) but the biggest hole came from struct
arch_domain being __cacheline_aligned (i.e. 128-byte aligned).
There are some holes above it in struct domain which should pack in
nicely to counteract the larger spinlocks, e.g. this was enough to
naturally align arch_domain again in my tree:
@@ -334,9 +334,9 @@ struct domain
spinlock_t rangesets_lock;
/* Event channel information. */
+ unsigned int max_evtchns;
struct evtchn *evtchn; /* first bucket only */
struct evtchn **evtchn_group[NR_EVTCHN_GROUPS]; /* all other buckets */
- unsigned int max_evtchns;
unsigned int max_evtchn_port;
spinlock_t event_lock;
const struct evtchn_port_ops *evtchn_port_ops;
Cheers,
Tim.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |