diff options
| author | Andrew Morton <akpm@zip.com.au> | 2002-06-17 20:21:21 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-06-17 20:21:21 -0700 |
| commit | df01cd1777d43744c13ba18ce48739185d20103a (patch) | |
| tree | 4946438c394ee1e9de794fba5b4956435920dbe7 | |
| parent | 3fb3b749ba712dd4197b585d654d233d3487d9d4 (diff) | |
[PATCH] Reduce the radix tree nodes to 64 slots
Reduce the radix tree nodes from 128 slots to 64.
- The main reason for this is that on 64-bit/4k page machines, the
slab allocator has decided that radix tree nodes will require an
order-1 allocation. Shrinking the nodes to 64 slots pulls that back
to an order-0 allocation.
- On x86 we get fifteen 64-slot nodes per page rather than seven
129-slot nodes, for a modest memory saving.
- Halving the node size will approximately halve the memory use in
the worrisome really-large, really-sparse file case.
Of course, the downside is longer tree walks. Each level of the tree
covers six bits of pagecache index rather than seven. As ever, I am
guided by Anton's profiling on the 12- and 32-way PPC boxes.
radix_tree_lookup() is currently down in the noise floor.
Now, there is one special case: one file which is really big and which
is accessed in a random manner and which is accessed very heavily: the
blockdev mapping. We _are_ showing some locking cost in
__find_get_block (used to be __get_hash_table) and in its call to
find_get_page(). I have a bunch of patches which introduce a generic
per-cpu buffer LRU, and which remove ext2's private bitmap buffer LRUs.
I expect these patches to wipe the blockdev mapping lookup lock contention
off the map, but I'm awaiting test results from Anton before deciding
whether those patches are worth submitting.
| -rw-r--r-- | lib/radix-tree.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 689a5448ea31..e17cd888fc3d 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c @@ -29,7 +29,7 @@ /* * Radix tree node definition. */ -#define RADIX_TREE_MAP_SHIFT 7 +#define RADIX_TREE_MAP_SHIFT 6 #define RADIX_TREE_MAP_SIZE (1UL << RADIX_TREE_MAP_SHIFT) #define RADIX_TREE_MAP_MASK (RADIX_TREE_MAP_SIZE-1) |
