Re: I/O Reordering: Cache -> Backing Device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 25 Jun 2019, Marc Smith wrote:

> Hi,
> 
> I've been experimenting using bcache and MD RAID on Linux 4.14.91. I
> have a 12-disk RAID6 MD array as the backing device, and a decent NVMe
> SSD as the caching device. I'm testing using write-back mode.
> 
> I've been able to tune the sequential_cutoff so when issuing full
> stripe writes to the bcache device, these bypass hitting the cache
> device and go right into the MD RAID6 array, which seems to be working
> nicely.
> 
> In the next experiment, when performing more random / sequential
> (mixed) writes, the cache device does a nice job of keeping up
> performance. However, when watching the data get flushed from the
> cache device to the backing device (the MD RAID6 volume), it doesn't
> seem the data is being written out as mostly full stripe writes. I get
> a lot of RMW's on the drives, so I don't believe I'm seeing these full
> stripe writes. I was sort of hoping/expecting bcache to do some
> re-ordering with this... there seem to be some knobs in bcache where
> it detects the full stripe size, and it knows partial stripe writes
> are expensive.
> 
> So I guess my question is if it's known that the data is not
> re-ordered using full stripe geometry in bcache, or perhaps this is
> just a tunable that I'm not seeing? It seems bcache has access to this
> data, but maybe this is a future item where it could be implemented?
> 
> The problem of course comes from the the sub-par performance when data
> is flushed from the cache device to the backing device... lots of
> read-modify-writes result in very poor write performance. If the I/O
> was pushed to the backing device as full stripe I/O's (or at least
> mostly) I'd expect to see better performance when flushing the cache.

You could try turning up /sys/block/bcache0/bcache/writeback_percent .  
Maybe there aren't enough contiguous regions in the writeback cache to 
queue for write.

Coly,

Do you know how the nr_stripes, stripe_sectors_dirty and 
full_dirty_stripes bitmaps work together to make a best-effort of writing 
full stripes to the disk, and maybe you can explain under what 
circumstances partial stripes would be written?


--
Eric Wheeler




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux