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 /lib | |
| 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.
Diffstat (limited to 'lib')
| -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) |
