• F
    Btrfs: optimize key searches in btrfs_search_slot · d7396f07
    Filipe David Borba Manana 提交于
    When the binary search returns 0 (exact match), the target key
    will necessarily be at slot 0 of all nodes below the current one,
    so in this case the binary search is not needed because it will
    always return 0, and we waste time doing it, holding node locks
    for longer than necessary, etc.
    
    Below follow histograms with the times spent on the current approach of
    doing a binary search when the previous binary search returned 0, and
    times for the new approach, which directly picks the first item/child
    node in the leaf/node.
    
    Current approach:
    
    Count: 6682
    Range: 35.000 - 8370.000; Mean: 85.837; Median: 75.000; Stddev: 106.429
    Percentiles:  90th: 124.000; 95th: 145.000; 99th: 206.000
      35.000 -   61.080:  1235 ################
      61.080 -  106.053:  4207 #####################################################
     106.053 -  183.606:  1122 ##############
     183.606 -  317.341:   111 #
     317.341 -  547.959:     6 |
     547.959 - 8370.000:     1 |
    
    Approach proposed by this patch:
    
    Count: 6682
    Range:  6.000 - 135.000; Mean: 16.690; Median: 16.000; Stddev:  7.160
    Percentiles:  90th: 23.000; 95th: 27.000; 99th: 40.000
       6.000 -    8.418:    58 #
       8.418 -   11.670:  1149 #########################
      11.670 -   16.046:  2418 #####################################################
      16.046 -   21.934:  2098 ##############################################
      21.934 -   29.854:   744 ################
      29.854 -   40.511:   154 ###
      40.511 -   54.848:    41 #
      54.848 -   74.136:     5 |
      74.136 -  100.087:     9 |
     100.087 -  135.000:     6 |
    
    These samples were captured during a run of the btrfs tests 001, 002 and
    004 in the xfstests, with a leaf/node size of 4Kb.
    Signed-off-by: NFilipe David Borba Manana <fdmanana@gmail.com>
    Signed-off-by: NJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: NChris Mason <chris.mason@fusionio.com>
    d7396f07
ctree.c 147.2 KB