summaryrefslogtreecommitdiff
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
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.
-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)