Adjust the size of struct ucq (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 19 Aug 2015 14:09:27 +0000 (10:09 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
The old one was taking up three cachelines.  A large part of it was the
u_lock, which was two cache lines on its own.  It used to be used for an MCS-PDR
lock, and very old versions of those were two cache lines.  Now it's a
spin-pdr lock.  Note that the size of spin-pdr depends on whether or not
CAS is supported.  We'll see how long that lasts (it was a RISC-V thing).

Reinstall your kernel headers and rebuild busybox.  The size change of
UCQ changed the size of the mbox and I needed to rebuild.  You probably
don't need to rebuild the toolchain.

kern/include/ros/ucq.h

index 940b37e..bdaf147 100644 (file)
  * etc. */
 struct ucq {
        atomic_t                                        prod_idx;               /* both pg and slot nr */
-       bool                                            prod_overflow;  /* flag to prevent wraparound */
        atomic_t                                        spare_pg;               /* mmaped, unused page */
        atomic_t                                        nr_extra_pgs;   /* nr pages mmaped */
        atomic_t                                        cons_idx;               /* cons pg and slot nr */
+       bool                                            prod_overflow;  /* flag to prevent wraparound */
        bool                                            ucq_ready;              /* ucq is ready to be used */
        /* Userspace lock for modifying the UCQ */
-       uint64_t                                        u_lock[2 * ARCH_CL_SIZE / 8];
+       uint32_t                                        u_lock[2];
 };
 
 /* Struct at the beginning of every page/buffer, tracking consumers and