Skip to content
  • Dave Chinner's avatar
    writeback: plug writeback at a high level · d353d758
    Dave Chinner authored
    
    
    Doing writeback on lots of little files causes terrible IOPS storms
    because of the per-mapping writeback plugging we do. This
    essentially causes imeediate dispatch of IO for each mapping,
    regardless of the context in which writeback is occurring.
    
    IOWs, running a concurrent write-lots-of-small 4k files using fsmark
    on XFS results in a huge number of IOPS being issued for data
    writes.  Metadata writes are sorted and plugged at a high level by
    XFS, so aggregate nicely into large IOs. However, data writeback IOs
    are dispatched in individual 4k IOs, even when the blocks of two
    consecutively written files are adjacent.
    
    Test VM: 8p, 8GB RAM, 4xSSD in RAID0, 100TB sparse XFS filesystem,
    metadata CRCs enabled.
    
    Kernel: 3.10-rc5 + xfsdev + my 3.11 xfs queue (~70 patches)
    
    Test:
    
    $ ./fs_mark  -D  10000  -S0  -n  10000  -s  4096  -L  120  -d
    /mnt/scratch/0  -d  /mnt/scratch/1  -d  /mnt/scratch/2  -d
    /mnt/scratch/3  -d  /mnt/scratch/4  -d  /mnt/scratch/5  -d
    /mnt/scratch/6  -d  /mnt/scratch/7
    
    Result:
    
    		wall	sys	create rate	Physical write IO
    		time	CPU	(avg files/s)	 IOPS	Bandwidth
    		-----	-----	------------	------	---------
    unpatched	6m56s	15m47s	24,000+/-500	26,000	130MB/s
    patched		5m06s	13m28s	32,800+/-600	 1,500	180MB/s
    improvement	-26.44%	-14.68%	  +36.67%	-94.23%	+38.46%
    
    If I use zero length files, this workload at about 500 IOPS, so
    plugging drops the data IOs from roughly 25,500/s to 1000/s.
    3 lines of code, 35% better throughput for 15% less CPU.
    
    The benefits of plugging at this layer are likely to be higher for
    spinning media as the IO patterns for this workload are going make a
    much bigger difference on high IO latency devices.....
    
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Tested-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    d353d758