summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Morton <akpm@zip.com.au>2002-06-17 20:21:21 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-06-17 20:21:21 -0700
commitdf01cd1777d43744c13ba18ce48739185d20103a (patch)
tree4946438c394ee1e9de794fba5b4956435920dbe7 /lib
parent3fb3b749ba712dd4197b585d654d233d3487d9d4 (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.c2
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)