Justus Winter, le Mon 06 Jan 2014 00:34:55 +0100, a écrit : > * kern/slab.h (struct kmem_cache): Reorder the fields so that all hot > fields are within the first cache line.
Did you try to benchmark this a bit? I'm unsure about all movements: nr_free_slabs, for instance, should probably really go along nr_slabs, as well as nr_objs, etc. > --- > kern/slab.h | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/kern/slab.h b/kern/slab.h > index fd65893..457dee4 100644 > --- a/kern/slab.h > +++ b/kern/slab.h > @@ -157,6 +157,10 @@ typedef void (*kmem_slab_free_fn_t)(vm_offset_t, > vm_size_t); > * Cache of objects. > * > * Locking order : cpu_pool -> cache. CPU pools locking is ordered by CPU ID. > + * > + * Currently, SLAB_USE_CPU_POOLS is not defined. KMEM_CACHE_NAME_SIZE > + * is chosen so that the struct fits into two cache lines. The first > + * cache line contains all hot fields. > */ > struct kmem_cache { > #if SLAB_USE_CPU_POOLS > @@ -172,19 +176,21 @@ struct kmem_cache { > struct list free_slabs; > struct rbtree active_slabs; > int flags; > + size_t bufctl_dist; /* Distance from buffer to bufctl */ > + size_t slab_size; > + unsigned long bufs_per_slab; > + unsigned long nr_objs; /* Number of allocated objects */ > + unsigned long nr_free_slabs; > + kmem_cache_ctor_t ctor; > + /* All fields below are cold */ > size_t obj_size; /* User-provided size */ > + /* Assuming ! SLAB_USE_CPU_POOLS, here is the cacheline boundary */ > size_t align; > size_t buf_size; /* Aligned object size */ > - size_t bufctl_dist; /* Distance from buffer to bufctl */ > - size_t slab_size; > size_t color; > size_t color_max; > - unsigned long bufs_per_slab; > - unsigned long nr_objs; /* Number of allocated objects */ > unsigned long nr_bufs; /* Total number of buffers */ > unsigned long nr_slabs; > - unsigned long nr_free_slabs; > - kmem_cache_ctor_t ctor; > kmem_slab_alloc_fn_t slab_alloc_fn; > kmem_slab_free_fn_t slab_free_fn; > char name[KMEM_CACHE_NAME_SIZE]; > -- > 1.8.5.2 > -- Samuel <N> (* If you have a precise idea of the intended use of the following code, please <N> write to eduardo.gime...@inria.fr and ask for the prize :-) <N> -- Eduardo (11/8/97) *) -+- N sur #ens-mim - et c'était un des développeurs -+-