DragonFly commits List (threaded) for 2010-08
git: kernel - revamp cluster_read API and improve performance
Author: Matthew Dillon <email@example.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(-)
DragonFly BSD source repository