• C
    Btrfs: Add a stripe cache to raid56 · 4ae10b3a
    Chris Mason 提交于
    The stripe cache allows us to avoid extra read/modify/write cycles
    by caching the pages we read off the disk.  Pages are cached when:
    
    * They are read in during a read/modify/write cycle
    
    * They are written during a read/modify/write cycle
    
    * They are involved in a parity rebuild
    
    Pages are not cached if we're doing a full stripe write.  We're
    assuming that a full stripe write won't be followed by another
    partial stripe write any time soon.
    
    This provides a substantial boost in performance for workloads that
    synchronously modify adjacent offsets in the file, and for the parity
    rebuild use case in general.
    
    The size of the stripe cache isn't tunable (yet) and is set at 1024
    entries.
    
    Example on flash: dd if=/dev/zero of=/mnt/xxx bs=4K oflag=direct
    
    Without the stripe cache  -- 2.1MB/s
    With the stripe cache 21MB/s
    Signed-off-by: NChris Mason <chris.mason@fusionio.com>
    4ae10b3a
raid56.c 47.0 KB