As I talked shortly in the community before, I'm working on linear bdev (aggregating
mutilple bdevs) as part of my works.
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 and IO splitting in bdev will be able to become the great foundation.
- 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
- 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.