git: kernel - revamp cluster_read API and improve performance

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Aug 15 17:28:22 PDT 2010


commit 364c022c7c967c27285b70d069fc14df03ffe267
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Aug 15 17:20:48 2010 -0700

    kernel - revamp cluster_read API and improve performance
    
    * Revamp the API to be much less confusing.  Pass a minimum read ahead
      based on the higher level uio length, and a maximum read ahead
      based on the sequential heuristic.  These combine together to determine
      how much read-ahead to do.
    
      For example if a program is doing random-reads with 1MB read() requests
      the minreq will take precedence, whereas if the program is doing
      sequential-reads of 8K the maxreq will take precedence.
    
      The sequential heuristic currently maxes out at 128 * 16384 = 2MB.
    
    * Introduce sysctl vfs.max_readahead instead of hardwiring the maximum
      read-ahead.  This defaults to 2MB which is big enough for just about
      anything.  Generally speaking this value should be larger than
      your stripe width.
    
      Note that currently the sequential heuristic also maxes out at 2MB so
      you cannot go larger than 2MB.
    
    * Also correct bugs that existed in the old cluster_read(), dramatically
      improving performance on striped volumes with large chunk sizes (128K+)
      and a large number of drives (3+).
    
    * No change here but note that HAMMER will currently issue a minimum of
      64K worth of read-ahead when accessing meta-data.

Summary of changes:
 sys/kern/vfs_cluster.c              |  157 +++++++++++++++++++++--------------
 sys/sys/buf.h                       |    2 +-
 sys/vfs/gnu/ext2fs/ext2_readwrite.c |    3 +-
 sys/vfs/hammer/hammer_io.c          |    9 +-
 sys/vfs/hammer/hammer_vnops.c       |    4 +-
 sys/vfs/isofs/cd9660/cd9660_vnops.c |    3 +-
 sys/vfs/ufs/ffs_balloc.c            |    7 +-
 sys/vfs/ufs/ffs_subr.c              |    2 +-
 8 files changed, 113 insertions(+), 74 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/364c022c7c967c27285b70d069fc14df03ffe267


-- 
DragonFly BSD source repository





More information about the Commits mailing list