On Fri, 5 Mar 2010 22:27:48 +0000 Alasdair G Kergon <agk@xxxxxxxxxx> wrote: > On Sat, Mar 06, 2010 at 08:56:51AM +1100, Neil Brown wrote: > > My preferred end-game would be to allow a bio of any size to be submitted to > > any device. The device would be responsible for cutting it up if necessary. > > >From the dm point of view, splitting is undesirable - memory allocations from > separate mempools, submitting the split-off parts could reorder/delay but must > still respect barrier constraints etc. Splitting is the 'slow and complicated' > path for us. We support it, but it is simpler and more efficient if the bio is > created a suitable size in the first place - and the merge_bvec_fn does this > for us most of the time. I hadn't thought about barriers in this context previously, but on reflection I don't think splitting makes barriers noticeably more complex than they are already. If you have multiple devices, then you pretty much have to handle a barrier as: - stall new requests - send zero length barrier to all devices - write the barrier request, either with the barrier flag set, or followed by a zero-length barrier I don't think splitting adds complexity. I guess if you have a single device, but still wont to split a request, there might be some optimisations you have to forego... But my first suggestion, that splitting could be made easier, still stands. Maybe it doesn't have to be so complicated - then it wouldn't be so slow? And do you honour merge_bvec_fn's of underlying devices? A quick grep suggests you do only for dm-linear and dm-crypt. This suggests to me that it is actually a hard interface to support completely in a stacked device, so we might be better off without it. In md, I check if merge_bvec_fn is defined and if it is, I just drop max_sectors to 4K so it will never be needed. I figure that a performance drop is better than a correctness error. Yes, splitting is undesirable, and if we can arrange that most requests don't get split, then that is good. But there will always be some requests that have to be split - whether by bio_add_page or something lower - and I think that it makes sense to only require that the lowest level does the splitting, as that is where the specifics on what might be required exists. Thanks, NeilBrown -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel