288,7 → 288,7 |
<section id="frame_allocator"> |
<title>Frame allocator</title> |
|
<para><mediaobject id="frame_alloc"> |
<figure><mediaobject id="frame_alloc"> |
<imageobject role="html"> |
<imagedata fileref="images/frame_alloc.png" format="PNG" /> |
</imageobject> |
296,7 → 296,9 |
<imageobject role="fop"> |
<imagedata fileref="images.vector/frame_alloc.svg" format="SVG" /> |
</imageobject> |
</mediaobject></para> |
</mediaobject> |
<title>Frame allocator scheme.</title> |
</figure> |
|
<formalpara> |
<title>Overview</title> |
339,7 → 341,7 |
<section> |
<title>Overview</title> |
|
<para><mediaobject id="buddy_alloc"> |
<figure><mediaobject id="buddy_alloc"> |
<imageobject role="html"> |
<imagedata fileref="images/buddy_alloc.png" format="PNG" /> |
</imageobject> |
347,7 → 349,9 |
<imageobject role="fop"> |
<imagedata fileref="images.vector/buddy_alloc.svg" format="SVG" /> |
</imageobject> |
</mediaobject></para> |
</mediaobject> |
<title>Buddy system scheme.</title> |
</figure> |
|
<para>In the buddy allocator, the memory is broken down into |
power-of-two sized naturally aligned blocks. These blocks are |
483,7 → 487,7 |
<section> |
<title>Implementation</title> |
|
<para><mediaobject id="slab_alloc"> |
<figure><mediaobject id="slab_alloc"> |
<imageobject role="html"> |
<imagedata fileref="images/slab_alloc.png" format="PNG" /> |
</imageobject> |
491,14 → 495,16 |
<imageobject role="fop"> |
<imagedata fileref="images.vector/slab_alloc.svg" format="SVG" /> |
</imageobject> |
</mediaobject></para> |
</mediaobject> |
<title>Slab allocator scheme.</title> |
</figure> |
|
<para>The SLAB allocator is closely modelled after <ulink |
<para>The slab allocator is closely modelled after <ulink |
url="http://www.usenix.org/events/usenix01/full_papers/bonwick/bonwick_html/"> |
OpenSolaris SLAB allocator by Jeff Bonwick and Jonathan Adams </ulink> |
OpenSolaris slab allocator by Jeff Bonwick and Jonathan Adams </ulink> |
with the following exceptions: <itemizedlist> |
<listitem> |
empty SLABS are deallocated immediately (in Linux they are kept in linked list, in Solaris ???) |
empty slabs are deallocated immediately (in Linux they are kept in linked list, in Solaris ???) |
</listitem> |
|
<listitem> |
519,7 → 525,7 |
<title>Magazine layer</title> |
|
<para>Due to the extensive bottleneck on SMP architures, caused by |
global SLAB locking mechanism, making processing of all slab |
global slab locking mechanism, making processing of all slab |
allocation requests serialized, a new layer was introduced to the |
classic slab allocator design. Slab allocator was extended to |
support per-CPU caches 'magazines' to achieve good SMP scaling. |