On 5 November 2014 00:38, David Gwynne <da...@gwynne.id.au> wrote:
>
>> 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.
>

well, first of all, right now this is a rather theoretical gain.  we
need to test it
to understand if it makes things easier.  to see cache statistics we can use
performance counters, however current pctr code might be a bit out of date.

> 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?

the way i read it is that you have a per-pool running value pr_color that you
increment by the item alignment or native cache line size modulo space
available for every page you are getting from uvm.  however i can see that
it might entail a problem by locating a page header (or was it page boundary?
don't have the code at hand) using simple math.

Reply via email to