• W
    readahead: enforce full sync mmap readahead size · 7ffc59b4
    Wu Fengguang 提交于
    Now that we do readahead for sequential mmap reads, here is a simple
    evaluation of the impacts, and one further optimization.
    
    It's an NFS-root debian desktop system, readahead size = 60 pages.
    The numbers are grabbed after a fresh boot into console.
    
    approach        pgmajfault      RA miss ratio   mmap IO count   avg IO size(pages)
       A            383             31.6%           383             11
       B            225             32.4%           390             11
       C            224             32.6%           307             13
    
    case A: mmap sync/async readahead disabled
    case B: mmap sync/async readahead enabled, with enforced full async readahead size
    case C: mmap sync/async readahead enabled, with enforced full sync/async readahead size
    or:
    A = vanilla 2.6.30-rc1
    B = A plus mmap readahead
    C = B plus this patch
    
    The numbers show that
    - there are good possibilities for random mmap reads to trigger readahead
    - 'pgmajfault' is reduced by 1/3, due to the _async_ nature of readahead
    - case C can further reduce IO count by 1/4
    - readahead miss ratios are not quite affected
    
    The theory is
    - readahead is _good_ for clustered random reads, and can perform
      _better_ than readaround because they could be _async_.
    - async readahead size is guaranteed to be larger than readaround
      size, and they are _async_, hence will mostly behave better
    However for B
    - sync readahead size could be smaller than readaround size, hence may
      make things worse by produce more smaller IOs
    which will be fixed by this patch.
    
    Final conclusion:
    - mmap readahead reduced major faults by 1/3 and no obvious overheads;
    - mmap io can be further reduced by 1/4 with this patch.
    Signed-off-by: NWu Fengguang <fengguang.wu@intel.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    7ffc59b4
filemap.c 66.4 KB