• Andrew Morton's avatar
    [PATCH] Reduce the radix tree nodes to 64 slots · df01cd17
    Andrew Morton authored
    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.
    df01cd17
radix-tree.c 7.17 KB