* [PATCH 0/2] Move blk_mq_submit_bio() error handling @ 2024-12-16 20:18 Bart Van Assche 2024-12-16 20:19 ` [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario Bart Van Assche 2024-12-16 20:19 ` [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() Bart Van Assche 0 siblings, 2 replies; 11+ messages in thread From: Bart Van Assche @ 2024-12-16 20:18 UTC (permalink / raw) To: Jens Axboe Cc: linux-block, Christoph Hellwig, Damien Le Moal, Bart Van Assche Hi Jens, Some of the blk_mq_submit_bio() error handling occurs in that function itself while the remaining error handling code occurs in functions called by blk_mq_submit_bio(). This patch series makes blk_mq_submit_bio() easier to understand by moving all error handling code into blk_mq_submit_bio(). No functionality has been changed. Please consider this patch series for the next merge window. Thanks, Bart. Bart Van Assche (2): block: Optimize blk_mq_submit_bio() for the cache hit scenario blk-mq: Move more error handling into blk_mq_submit_bio() block/blk-mq.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-16 20:18 [PATCH 0/2] Move blk_mq_submit_bio() error handling Bart Van Assche @ 2024-12-16 20:19 ` Bart Van Assche 2024-12-17 4:16 ` Christoph Hellwig 2024-12-16 20:19 ` [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() Bart Van Assche 1 sibling, 1 reply; 11+ messages in thread From: Bart Van Assche @ 2024-12-16 20:19 UTC (permalink / raw) To: Jens Axboe Cc: linux-block, Christoph Hellwig, Damien Le Moal, Bart Van Assche Help the CPU branch predictor in case of a cache hit by handling the cache hit scenario first. Cc: Damien Le Moal <dlemoal@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Bart Van Assche <bvanassche@acm.org> --- block/blk-mq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 7ee21346a41e..8d2aab4d9ba9 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -3102,12 +3102,12 @@ void blk_mq_submit_bio(struct bio *bio) goto queue_exit; new_request: - if (!rq) { + if (rq) { + blk_mq_use_cached_rq(rq, plug, bio); + } else { rq = blk_mq_get_new_requests(q, plug, bio, nr_segs); if (unlikely(!rq)) goto queue_exit; - } else { - blk_mq_use_cached_rq(rq, plug, bio); } trace_block_getrq(bio); ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-16 20:19 ` [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario Bart Van Assche @ 2024-12-17 4:16 ` Christoph Hellwig 2024-12-17 19:22 ` Bart Van Assche 0 siblings, 1 reply; 11+ messages in thread From: Christoph Hellwig @ 2024-12-17 4:16 UTC (permalink / raw) To: Bart Van Assche Cc: Jens Axboe, linux-block, Christoph Hellwig, Damien Le Moal On Mon, Dec 16, 2024 at 12:19:00PM -0800, Bart Van Assche wrote: > Help the CPU branch predictor in case of a cache hit by handling the cache > hit scenario first. Numbers, please. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-17 4:16 ` Christoph Hellwig @ 2024-12-17 19:22 ` Bart Van Assche 2024-12-17 21:15 ` Jens Axboe 2024-12-18 6:59 ` Christoph Hellwig 0 siblings, 2 replies; 11+ messages in thread From: Bart Van Assche @ 2024-12-17 19:22 UTC (permalink / raw) To: Christoph Hellwig; +Cc: Jens Axboe, linux-block, Damien Le Moal On 12/16/24 8:16 PM, Christoph Hellwig wrote: > On Mon, Dec 16, 2024 at 12:19:00PM -0800, Bart Van Assche wrote: >> Help the CPU branch predictor in case of a cache hit by handling the cache >> hit scenario first. > > Numbers, please. For a single CPU core and with the brd driver and fio and the io_uring I/O engine, I see the following performance in a VM (three test runs for each test case): Without this patch: 1619K, 1641K, 1638K IOPS or 1633 K +/- 10 K. With this patch applied: 1650K, 1633K, 1635K IOPS or 1639 K +/- 8 K. So there is a small performance improvement but the improvement is smaller than the measurement error. Is this sufficient data to proceed with this patch? Thanks, Bart. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-17 19:22 ` Bart Van Assche @ 2024-12-17 21:15 ` Jens Axboe 2024-12-18 6:59 ` Christoph Hellwig 1 sibling, 0 replies; 11+ messages in thread From: Jens Axboe @ 2024-12-17 21:15 UTC (permalink / raw) To: Bart Van Assche, Christoph Hellwig; +Cc: linux-block, Damien Le Moal On 12/17/24 12:22 PM, Bart Van Assche wrote: > On 12/16/24 8:16 PM, Christoph Hellwig wrote: >> On Mon, Dec 16, 2024 at 12:19:00PM -0800, Bart Van Assche wrote: >>> Help the CPU branch predictor in case of a cache hit by handling the cache >>> hit scenario first. >> >> Numbers, please. > > For a single CPU core and with the brd driver and fio and the io_uring > I/O engine, I see the following performance in a VM (three test runs for > each test case): > > Without this patch: 1619K, 1641K, 1638K IOPS or 1633 K +/- 10 K. > With this patch applied: 1650K, 1633K, 1635K IOPS or 1639 K +/- 8 K. > > So there is a small performance improvement but the improvement is > smaller than the measurement error. Is this sufficient data to proceed > with this patch? I think it's fine, it's going to be very hard to reliably measure. I tend to prefer the expected case to be the one checked for, eg: rq = get_cached(); if (rq) ... anyway, as then the expected outcome is what you're reading next anyway. Either that or rq = get_cached(); if (unlikely(!rq)) goto some_failure_path; If you really wanted to measure it, you'd probably skip the IOPS part and just look at branch misprediction in perf. -- Jens Axboe ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-17 19:22 ` Bart Van Assche 2024-12-17 21:15 ` Jens Axboe @ 2024-12-18 6:59 ` Christoph Hellwig 2024-12-18 18:22 ` Bart Van Assche 1 sibling, 1 reply; 11+ messages in thread From: Christoph Hellwig @ 2024-12-18 6:59 UTC (permalink / raw) To: Bart Van Assche Cc: Christoph Hellwig, Jens Axboe, linux-block, Damien Le Moal On Tue, Dec 17, 2024 at 11:22:47AM -0800, Bart Van Assche wrote: > For a single CPU core and with the brd driver and fio and the io_uring > I/O engine, I see the following performance in a VM (three test runs for > each test case): > > Without this patch: 1619K, 1641K, 1638K IOPS or 1633 K +/- 10 K. > With this patch applied: 1650K, 1633K, 1635K IOPS or 1639 K +/- 8 K. > > So there is a small performance improvement but the improvement is > smaller than the measurement error. Is this sufficient data to proceed > with this patch? I think it's sufficient data that should not claim that it is an optimizations. The resulting code still looks nicer to me, but arguing with optimizations feels like BS. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario 2024-12-18 6:59 ` Christoph Hellwig @ 2024-12-18 18:22 ` Bart Van Assche 0 siblings, 0 replies; 11+ messages in thread From: Bart Van Assche @ 2024-12-18 18:22 UTC (permalink / raw) To: Christoph Hellwig; +Cc: Jens Axboe, linux-block, Damien Le Moal On 12/17/24 10:59 PM, Christoph Hellwig wrote: > On Tue, Dec 17, 2024 at 11:22:47AM -0800, Bart Van Assche wrote: >> For a single CPU core and with the brd driver and fio and the io_uring >> I/O engine, I see the following performance in a VM (three test runs for >> each test case): >> >> Without this patch: 1619K, 1641K, 1638K IOPS or 1633 K +/- 10 K. >> With this patch applied: 1650K, 1633K, 1635K IOPS or 1639 K +/- 8 K. >> >> So there is a small performance improvement but the improvement is >> smaller than the measurement error. Is this sufficient data to proceed >> with this patch? > > I think it's sufficient data that should not claim that it is an > optimizations. The resulting code still looks nicer to me, but > arguing with optimizations feels like BS. I will change the patch title. Thanks, Bart. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() 2024-12-16 20:18 [PATCH 0/2] Move blk_mq_submit_bio() error handling Bart Van Assche 2024-12-16 20:19 ` [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario Bart Van Assche @ 2024-12-16 20:19 ` Bart Van Assche 2024-12-17 4:18 ` Christoph Hellwig 1 sibling, 1 reply; 11+ messages in thread From: Bart Van Assche @ 2024-12-16 20:19 UTC (permalink / raw) To: Jens Axboe Cc: linux-block, Christoph Hellwig, Damien Le Moal, Bart Van Assche The error handling code in blk_mq_get_new_requests() cannot be understood without knowing that this function is only called by blk_mq_submit_bio(). Hence move the code for handling blk_mq_get_new_requests() failures into blk_mq_submit_bio(). Cc: Damien Le Moal <dlemoal@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Bart Van Assche <bvanassche@acm.org> --- block/blk-mq.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index 8d2aab4d9ba9..80eb91296142 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2971,8 +2971,6 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q, if (rq) return rq; rq_qos_cleanup(q, bio); - if (bio->bi_opf & REQ_NOWAIT) - bio_wouldblock_error(bio); return NULL; } @@ -3106,8 +3104,11 @@ void blk_mq_submit_bio(struct bio *bio) blk_mq_use_cached_rq(rq, plug, bio); } else { rq = blk_mq_get_new_requests(q, plug, bio, nr_segs); - if (unlikely(!rq)) + if (unlikely(!rq)) { + if (bio->bi_opf & REQ_NOWAIT) + bio_wouldblock_error(bio); goto queue_exit; + } } trace_block_getrq(bio); ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() 2024-12-16 20:19 ` [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() Bart Van Assche @ 2024-12-17 4:18 ` Christoph Hellwig 2024-12-17 21:06 ` Bart Van Assche 0 siblings, 1 reply; 11+ messages in thread From: Christoph Hellwig @ 2024-12-17 4:18 UTC (permalink / raw) To: Bart Van Assche Cc: Jens Axboe, linux-block, Christoph Hellwig, Damien Le Moal On Mon, Dec 16, 2024 at 12:19:01PM -0800, Bart Van Assche wrote: > diff --git a/block/blk-mq.c b/block/blk-mq.c > index 8d2aab4d9ba9..80eb91296142 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -2971,8 +2971,6 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q, > if (rq) > return rq; > rq_qos_cleanup(q, bio); > - if (bio->bi_opf & REQ_NOWAIT) > - bio_wouldblock_error(bio); > return NULL; Please turn this into: if (rq) rq_qos_cleanup(q, bio); return rq; Otherwise this looks like a nice cleanup. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() 2024-12-17 4:18 ` Christoph Hellwig @ 2024-12-17 21:06 ` Bart Van Assche 2024-12-18 7:00 ` Christoph Hellwig 0 siblings, 1 reply; 11+ messages in thread From: Bart Van Assche @ 2024-12-17 21:06 UTC (permalink / raw) To: Christoph Hellwig; +Cc: Jens Axboe, linux-block, Damien Le Moal On 12/16/24 8:18 PM, Christoph Hellwig wrote: > On Mon, Dec 16, 2024 at 12:19:01PM -0800, Bart Van Assche wrote: >> diff --git a/block/blk-mq.c b/block/blk-mq.c >> index 8d2aab4d9ba9..80eb91296142 100644 >> --- a/block/blk-mq.c >> +++ b/block/blk-mq.c >> @@ -2971,8 +2971,6 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q, >> if (rq) >> return rq; >> rq_qos_cleanup(q, bio); >> - if (bio->bi_opf & REQ_NOWAIT) >> - bio_wouldblock_error(bio); >> return NULL; > > Please turn this into: > > if (rq) > rq_qos_cleanup(q, bio); > return rq; > > Otherwise this looks like a nice cleanup. It seems to me that there is a typo in the above code? Unless if you tell me otherwise, I will assume that this is what you meant: diff --git a/block/blk-mq.c b/block/blk-mq.c index 8d2aab4d9ba9..f4300e608ed8 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2968,12 +2968,9 @@ static struct request *blk_mq_get_new_requests(struct request_queue *q, } rq = __blk_mq_alloc_requests(&data); - if (rq) - return rq; - rq_qos_cleanup(q, bio); - if (bio->bi_opf & REQ_NOWAIT) - bio_wouldblock_error(bio); - return NULL; + if (!rq) + rq_qos_cleanup(q, bio); + return rq; } /* @@ -3106,8 +3103,11 @@ void blk_mq_submit_bio(struct bio *bio) blk_mq_use_cached_rq(rq, plug, bio); } else { rq = blk_mq_get_new_requests(q, plug, bio, nr_segs); - if (unlikely(!rq)) + if (unlikely(!rq)) { + if (bio->bi_opf & REQ_NOWAIT) + bio_wouldblock_error(bio); goto queue_exit; + } } trace_block_getrq(bio); Thanks, Bart. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() 2024-12-17 21:06 ` Bart Van Assche @ 2024-12-18 7:00 ` Christoph Hellwig 0 siblings, 0 replies; 11+ messages in thread From: Christoph Hellwig @ 2024-12-18 7:00 UTC (permalink / raw) To: Bart Van Assche Cc: Christoph Hellwig, Jens Axboe, linux-block, Damien Le Moal On Tue, Dec 17, 2024 at 01:06:12PM -0800, Bart Van Assche wrote: > It seems to me that there is a typo in the above code? Unless if you tell > me otherwise, I will assume that this is what you meant: Yes. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-12-18 18:22 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-12-16 20:18 [PATCH 0/2] Move blk_mq_submit_bio() error handling Bart Van Assche 2024-12-16 20:19 ` [PATCH 1/2] block: Optimize blk_mq_submit_bio() for the cache hit scenario Bart Van Assche 2024-12-17 4:16 ` Christoph Hellwig 2024-12-17 19:22 ` Bart Van Assche 2024-12-17 21:15 ` Jens Axboe 2024-12-18 6:59 ` Christoph Hellwig 2024-12-18 18:22 ` Bart Van Assche 2024-12-16 20:19 ` [PATCH 2/2] blk-mq: Move more error handling into blk_mq_submit_bio() Bart Van Assche 2024-12-17 4:18 ` Christoph Hellwig 2024-12-17 21:06 ` Bart Van Assche 2024-12-18 7:00 ` Christoph Hellwig
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.