Hello, Ming. On Wed, Jul 06, 2016 at 09:10:00AM +0800, Ming Lei wrote: > > Then we did some research and find that in kernel version 4.3 brought in > > blk_queue_split() function to split the big size bio into several parts, > > and some of them are calling the generic_make_request() again, this result > > the bio been throttled more than once. so the actual bio sent to device is > > less than we expected. > > Except for blk_queue_split(), there are other(stacked) drivers which call > generic_make_request() too, such as drbd, dm, md and bcache. So, blk-throtl already uses REQ_THROTTLED to avoid throttling the same bio multiple times. The problem seems that the flag isn't maintained through clone. > > > > We have checked the newest kernel of 4.7-rc5, this problem is still exist. > > > > Based on this kind of situation, we propose a fix solution to add a flag bit > > in bio to let the splited bio bypass the blk_queue_split(). Below is the patch > > we used to fix this problem. > > The splitted bio is just a fast-cloned bio(except for discard bio) and not very > special compared with other fast-cloned bio, which is quite common used. > > So I guess what you need is to bypass BIO_CLONED bio for this purpose > since all fast-cloned bio shares the same bvec table of the source bio. Depending on how a device handles a bio, that could allow bios to bypass throttling entirely, no? Wouldn't adding REQ_THROTTLED to REQ_CLONE_MASK work? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html