• Jan Kara's avatar
    md/raid5: Improve performance for sequential IO · fc05e06e
    Jan Kara authored
    Commit 7e55c60a ("md/raid5: Pivot raid5_make_request()") changed the
    order in which requests for underlying disks are created. Since for
    large sequential IO adding of requests frequently races with md_raid5
    thread submitting bios to underlying disks, this results in a change in
    IO pattern because intermediate states of new order of request creation
    result in more smaller discontiguous requests. For RAID5 on top of three
    rotational disks our performance testing revealed this results in
    regression in write throughput:
    
    iozone -a -s 131072000 -y 4 -q 8 -i 0 -i 1 -R
    
    before 7e55c60a:
                  KB  reclen   write rewrite    read    reread
           131072000       4  493670  525964   524575   513384
           131072000       8  540467  532880   512028   513703
    
    after 7e55c60a:
                  KB  reclen   write rewrite    read    reread
           131072000       4  421785  456184   531278   509248
           131072000       8  459283  456354   528449   543834
    
    To reduce the amount of discontiguous requests we can start generating
    requests with the stripe with the lowest chunk offset as that has the
    best chance of being adjacent to IO queued previously. This improves the
    performance to:
                  KB  reclen   write rewrite    read    reread
           131072000       4  497682  506317   518043   514559
           131072000       8  514048  501886   506453   504319
    
    restoring big part of the regression.
    
    Fixes: 7e55c60a ("md/raid5: Pivot raid5_make_request()")
    Cc: stable@vger.kernel.org # v6.0+
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    Signed-off-by: default avatarSong Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20230417171537.17899-1-jack@suse.cz
    fc05e06e
raid5.c 257 KB