> On 30 Oct 2014, at 07:52, Ted Unangst <t...@tedunangst.com> wrote:
> 
> On Wed, Oct 29, 2014 at 07:25, David Gwynne wrote:
> 
> 
>> i dunno. im fine with either removing colouring altogether or setting it
>> from something else completely. i just want a decision to be made cos
>> right now ph_color isnt set, which is a bug.
> 
> there. i fixed it.

looks like we were both ignorant and wrong. mikeb@ points out this from the 
original slab paper:

4.1. Impact of Buffer Address Distribution on Cache
Utilization

The address distribution of mid-size buffers can
affect the system’s overall cache utilization. In par-
ticular, power-of-two allocators - where all buffers
are 2 n bytes and are 2 n -byte aligned - are pes-
simal.* Suppose, for example, that every inode
(∼ 300 bytes) is assigned a 512-byte buffer, 512-byte
aligned, and that only the first dozen fields of an
inode (48 bytes) are frequently referenced. Then
the majority of inode-related memory traffic will be
at addresses between 0 and 47 modulo 512. Thus
the cache lines near 512-byte boundaries will be
heavily loaded while the rest lie fallow. In effect
only 9% (48/512) of the cache will be usable by
inodes. Fully-associative caches would not suffer
this problem, but current hardware trends are toward
simpler rather than more complex caches.

4.3. Slab Coloring

The slab allocator incorporates a simple coloring
scheme that distributes buffers evenly throughout
the cache, resulting in excellent cache utilization
and bus balance. The concept is simple: each time
a new slab is created, the buffer addresses start at a
slightly different offset (color) from the slab base
(which is always page-aligned). For example, for a
cache of 200-byte objects with 8-byte alignment, the
first slab’s buffers would be at addresses 0, 200,
400, ... relative to the slab base. The next slab’s
buffers would be at offsets 8, 208, 408, ... and so
on. The maximum slab color is determined by the
amount of unused space in the slab.


we run on enough different machines that i think we should consider this.

so the question is if we do bring colouring back, how do we calculate it? 
arc4random? mask bits off ph_magic? atomic_inc something in the pool? read a 
counter from the pool? shift bits off the page address?

Reply via email to