User: Password:
Subscribe / Log in / New account

mm: Reimplementation of dynamic per-cpu allocator

From:  Ravikiran G Thirumalai <>
To:  Andrew Morton <>
Subject:  [patch 0/11] mm: Reimplementation of dynamic per-cpu allocator
Date:  Tue, 13 Sep 2005 08:51:12 -0700
Cc:,,,, Rusty Russell <>

I have been maintaining a set of patches based on the reimplemented dynamic
per-cpu allocator.  I would like to have them included in -mm for testing
and maybe merged when the mainline merge window opens  :)...

The reimplementation of the dynamic per-cpu allocator has been published
earlier and discussed, But the re-implementation with the applications and
supporting numbers weren't published earlier.  Here is an attempt towards
the same.

This patchset contains 
a) Reimplementation of alloc_percpu. 
b) Rusty's implementation of distributed reference counters (bigrefs)
c) Code to change struct netdevice.refcnt to bigrefs -- this patch improves
tbench performance by 6% on a 8 way 3.00 GHZ x86 Intel xeon (x445).
d) Code to change struct dst_entry.__refcnt per-cpu.  This patch was
originally submitted sometime back by Christoph.  The reworked patch uses
alloc_percpu, and struct dst_entry does not bloat up now.  This patch along with
the netdevice ref-counter patch above gives a whopping 55 % improvement on
tbench on a 8way x86 xeon (x445).  The same patchset resulted in 30% better
tbench throughput on a x460 (8 way 3.3 Ghz x86_64 xeon).

All tbench numbers were on loopback with 8 clients.

The patches consist of

1. vmalloc_fixup 
(Fix up __get_vm_area to take gfp flags as extra arg -- preparatory for 3.)

2. alloc_percpu 
(Main allocator)

3. alloc_percpu_atomic 
(Add GFP_FLAGS args to alloc_percpu -- for dst_entry.refcount)

(Change  alloc_percpu users to use modified interface (with gfp_flags))

5. add_getcpuptr 
(This is needed for bigrefs)

6. bigrefs 
(Fixed up bigref from rusty)

7. netdev_refcnt_bigref.patch 
(Bigref based netdev refcount)

8. dst_abstraction 
9. dst_alloc_percpu 
(dst_entry.refcount patches)

10. allow_early_mapvmarea 
11. hotplug_alloc_percpu_blocks 
(If alloc_percpu needs to be used real early then these patches will be
needed.  This patch allows us to use bigrefs/alloc_percpu for refcounters 
like struct vfsmount.mnt_count)
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

Copyright © 2005, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds