On Wed, Jul 6, 2016 at 10:09 PM, Tejun Heo <tj@xxxxxxxxxx> wrote: > 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. Actually the flag(bio->bi_rw) has been maintained during clone, please see __bio_clone_fast() and bio_clone_bioset(). > >> > >> > 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 Thanks, Ming Lei -- 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