From: Mark Hemment <markhe@veritas.com>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: Q: explicit alignment control for the slab allocator
Date: Thu, 1 Mar 2001 20:28:35 +0000 (GMT) [thread overview]
Message-ID: <Pine.LNX.4.21.0103012011160.11260-100000@alloc> (raw)
In-Reply-To: <3A9EA940.CB82665C@colorfullife.com>
On Thu, 1 Mar 2001, Manfred Spraul wrote:
> Mark Hemment wrote:
> >
> > The original idea behind offset was for objects with a "hot" area
> > greater than a single L1 cache line. By using offset correctly (and to my
> > knowledge it has never been used anywhere in the Linux kernel), a SLAB
> > cache creator (caller of kmem_cache_create()) could ask the SLAB for more
> > than one colour (space/L1 cache lines) offset between objects.
> >
>
> What's the difference between this definition of 'offset' and alignment?
The positioning of the first object within a slab (at least that is how
it is suppose to work).
The distance between all objects within a slab is constant, so the
colouring of objects depends upon the cache line (offset) the first object
is placed on.
The alignment is the boundary objects fall upon within a slab. This may
require 'padding' between the objects so they fall on the correct
boundaries (ie. they aren't a 'natural' size).
For kmem_cache_create(), a zero offset means the offset is the same as
the alignment.
Take the case of offset being 64, and alignment being 32.
Here, the allocator attempts to place the first object on a 64byte
boundary (say, at offset 0), and all subsequent objects (within the same
cache) on a 32byte boundary.
Now, when it comes to construct the next slab, it tries to place the
first object 64bytes offset from the first object in the previous
slab (say, at offset 64). The distance between the objects is still the
same - ie. they fall on 32byte boundaries.
See the difference?
> alignment means that (addr%alignment==0)
> offset means that (addr1-addr2 == n*offset)
>
> Isn't the only difference the alignment of the first object in a slab?
Yes (as explained above). It is important.
> Some hardware drivers use HW_CACHEALIGN and assume certain byte
> alignments, and arm needs 1024 byte aligned blocks.
I should have put a big comment in the allocator, saying aligment/offset
are only hints to the allocator and not guarantees.
Unfortunately, the allocator was always returning L1 aligned objects
with HW_CACHEALIGN, so folks started to depend on it. Too late to break
that now.
It sounds as if HW_CACHEALIGN has been broken by a config option, and
this needs to be fixed.
But leave 'offset' alone?! If it isn't working as described above, then
it needs fixing, but don't change its definition.
Mark
next prev parent reply other threads:[~2001-03-01 20:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-03-01 17:26 Manfred Spraul
2001-03-01 18:09 ` Mark Hemment
2001-03-01 19:55 ` Manfred Spraul
2001-03-01 20:28 ` Mark Hemment [this message]
2001-03-01 21:55 ` Manfred Spraul
2001-03-02 10:59 ` Mark Hemment
2001-03-02 11:51 ` Manfred Spraul
2001-03-02 12:39 ` Mark Hemment
2001-03-02 13:22 ` Manfred Spraul
2001-03-07 20:02 ` Jes Sorensen
2001-03-07 20:32 ` Manfred Spraul
2001-03-08 17:30 ` Jes Sorensen
2001-03-01 19:22 ` David S. Miller
2001-03-01 19:47 ` Manfred Spraul
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.21.0103012011160.11260-100000@alloc \
--to=markhe@veritas.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®