Commit d315756b authored by Kundan Kumar's avatar Kundan Kumar Committed by Yu Kuai
Browse files

block: skip QUEUE_FLAG_STATS and rq-qos for passthrough io

mainline inclusion
from mainline-v6.8-rc1
commit 847c5bcdfb41704e52930783b028302f415a3209
category: feature
bugzilla: https://gitee.com/openeuler/release-management/issues/IB4E8P
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=847c5bcdfb41704e52930783b028302f415a3209



--------------------------------

Write-back throttling (WBT) enables QUEUE_FLAG_STATS on the request
queue. But WBT does not make sense for passthrough io, so skip
QUEUE_FLAG_STATS processing.

Also skip rq_qos_issue/done for passthrough io.

Overall, the change gives ~11% hike in peak performance.

Signed-off-by: default avatarKundan Kumar <kundan.kumar@samsung.com>
Signed-off-by: default avatarKanchan Joshi <joshi.k@samsung.com>
Link: https://lore.kernel.org/r/20231123190331.7934-1-kundan.kumar@samsung.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
parent 974e58e1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1258,7 +1258,8 @@ void blk_mq_start_request(struct request *rq)

	trace_block_rq_issue(rq);

	if (test_bit(QUEUE_FLAG_STATS, &q->queue_flags)) {
	if (test_bit(QUEUE_FLAG_STATS, &q->queue_flags) &&
	    !blk_rq_is_passthrough(rq)) {
		rq->io_start_time_ns = ktime_get_ns();
		rq->stats_sectors = blk_rq_sectors(rq);
		rq->rq_flags |= RQF_STATS;
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ static inline void rq_qos_cleanup(struct request_queue *q, struct bio *bio)

static inline void rq_qos_done(struct request_queue *q, struct request *rq)
{
	if (q->rq_qos)
	if (q->rq_qos && !blk_rq_is_passthrough(rq))
		__rq_qos_done(q->rq_qos, rq);
}