On Thu, 2018-09-13 at 02:46 +0000, 松本周平 / MATSUMOTO，SHUUHEI wrote:
As I talked shortly in the community before, I'm working on linear bdev
(aggregating mutilple bdevs) as part of my works.
Just to clarify a bit more - this bdev concatenates bdevs, placing one after the
other, right? Are you able to share use cases for this type of volume? My
primary concern is that higher layers in the software stack often are designed
to prefer to write to lower LBAs, so concatenation results in hammering the
first disk and hardly touching the rest. Often, a RAID 0 with very large strips
(1MB) ends up working better. There are other considerations, such as what
happens when a disk fails, that may make RAID 0 infeasible, but it's something
The following is my present basic design of the linear bdev.
Linear bdev doesn't belong to raid but I want to add linear bdev as another
level of raid bdev.
Raid bdev and IO splitting in bdev will be able to become the great
For a bdev that is made as a concatenation of other bdevs there won't be much
splitting necessary and I think the algorithm is unique enough that you could do
something specific to the concatentation code instead of relying on generic
splitting in the bdev layer. I think that's a simpler approach overall.
- Utilize current IO splitting as much as possible.
- In linear bdev, optimal_io_boundary is not constant and linear bdev can't
use current implementation based on optimal_io_boundary.
- Add an array made of (start, length) pair to struct spdk_bdev instead of
- Abstract the following APIs:
- bool _spdk_bdev_io_should_split(struct spdk_bdev_io *bdev_io)
- uint32_t _to_next_boundary(uint64_t offset, uint32_t boundary)
- The (start, length) array and optimal_io_boundary are mutually exclusive.
- Utilize current implementation as much as possible.
- Abstract the following:
- check consistency among base bdevs, calculate total block counts, add
split info to spdk_bdev
- raid_bdev_start_rw_request() and following functions
- Use -1 as the level of the linear bdev.
- Add an new parameter linear (bool) to construct_raid_bdev.
- raid_level and linear are mutually exclusive.
Your any feedback is very welcome.
SPDK mailing list