Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6792572imu; Thu, 27 Dec 2018 06:38:29 -0800 (PST) X-Google-Smtp-Source: AFSGD/VzWyav2N0Wl4G2FLYCiAFv4orwXyNj0qickqKW/zCokhpX8kROpI1T+JiwNP4Th960Uoho X-Received: by 2002:a62:848d:: with SMTP id k135mr24141601pfd.47.1545921509732; Thu, 27 Dec 2018 06:38:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545921509; cv=none; d=google.com; s=arc-20160816; b=0WttzMW4kZeyxyJ6pO3yBVjctwp6jgILx1RkIdIu+O2rJjanFfhh9IkrKoSaMtraPZ cGNoGFKXy+iWl2BFB9ucDBFx+KQFsNnLCZ0nADTtnVZAht1yJZz229crjGNgcYuUzbAc AKrYeVx+uqUnRrZ3v5DC8J8FBqDwFvzxu9D8FE1HWbJKcdnAyzj7M/3q8Nfkiz4AN7jn il8kh8rFCzMtBzPABlXXEvqWO3kwNGiR56z5qxwgTwdK5atDf2wCcRjRLL/H48Tu7KoL UK+xBcLPAWc9PtAiVWeV8KZtYOH8Am8qKqJ+ah9oqoz8NHe2mqH7u7bewY8HGYgqT5fI 9EHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=DRb7/IRX7a6JhVKXoghsxVxPX8Gme2dv36akFmWpAbY=; b=AgYO/UkCCeAAdG/xvu5rjCiVH8eW+f1ALh5EhBeq0pn+BondZVDbNdnzUnkCQFwNqu 9dL1QCOZotkptfCRLleNdWV9udNrv9OuQq5qD+C5y8LrCdrdv+mVXGDw7+BkDaqpM38I +QXpWhO/+2XTODdEh/trhNEItJFUsnovxmToLo2mmhNNblmszsF8GXFURQMLHRwITEBb IH0EUWI8bYw/sSp49Xu62EsWo/lqn/83M/1B2jIbCOIzGfKm7095FWrtg3u5Bx6JQuXK R+30QLlLjr/Ul1c9SK/NWXhYVjzZaTtXjFB4NZ1w1ADpOPe5YjnLR4yrV7XPRV5x3Z/o FlzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=d3WzUOAH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ca6si6626845plb.141.2018.12.27.06.38.14; Thu, 27 Dec 2018 06:38:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=d3WzUOAH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727732AbeL0CBj (ORCPT + 99 others); Wed, 26 Dec 2018 21:01:39 -0500 Received: from aserp2130.oracle.com ([141.146.126.79]:36266 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727181AbeL0CBi (ORCPT ); Wed, 26 Dec 2018 21:01:38 -0500 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id wBR1s3Vu121940; Thu, 27 Dec 2018 02:01:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references; s=corp-2018-07-02; bh=DRb7/IRX7a6JhVKXoghsxVxPX8Gme2dv36akFmWpAbY=; b=d3WzUOAHL/l58l4MzSmTTPXozF14VU9y/0YN3S5tWRjNu1DfpjKZ+lQtjw5l7auy6Uzu SOPwQS5SMiv5YScoX5UJhjDg45/z8izT6wslBMnUuKflvxCcgeNUPdm94mYBfIOLVj88 Nll6JZpSDVSN4b4YbP6rMfHyWLbLcCy8uDMOLQLcyyVFaum4Aih/9D75mnhT7EbriVOA TuRMtD2Psu+GaGmyaaABrEaOujGR5s7BrYPpcb1/T4ZN1uxeH4iLF6gw1YrELP6naVku 5ehtFI8EAj9P1JbA9GKcdImJiZ7XXDnCcDsi0E63J6CnV157WyqndSOOjK7apUBXdArp bw== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by aserp2130.oracle.com with ESMTP id 2phasdu93k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Dec 2018 02:01:33 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id wBR21WYQ002124 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Dec 2018 02:01:32 GMT Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id wBR21W6g016661; Thu, 27 Dec 2018 02:01:32 GMT Received: from will-ThinkCentre-M93p.cn.oracle.com (/10.182.70.234) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 26 Dec 2018 18:01:31 -0800 From: Jianchao Wang To: axboe@kernel.dk Cc: ming.lei@redhat.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] blk-mq: save queue mapping result into ctx directly Date: Thu, 27 Dec 2018 10:00:40 +0800 Message-Id: <1545876041-16076-2-git-send-email-jianchao.w.wang@oracle.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1545876041-16076-1-git-send-email-jianchao.w.wang@oracle.com> References: <1545876041-16076-1-git-send-email-jianchao.w.wang@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9118 signatures=668680 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=971 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1812270015 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currelty, the queue mapping result is saved in a two-dimensional array. In hot path, to get a hctx, we need do following, q->queue_hw_ctx[q->tag_set->map[type].mq_map[cpu]] This looks not efficient. Actually, we could save the queue mapping result into ctx directly with different hctx type, like, ctx->hctxs[type] Signed-off-by: Jianchao Wang --- block/blk-mq-sched.c | 2 +- block/blk-mq-tag.c | 2 +- block/blk-mq.c | 4 ++-- block/blk-mq.h | 5 +++-- block/blk.h | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c index 140933e..4090553 100644 --- a/block/blk-mq-sched.c +++ b/block/blk-mq-sched.c @@ -321,7 +321,7 @@ bool __blk_mq_sched_bio_merge(struct request_queue *q, struct bio *bio) { struct elevator_queue *e = q->elevator; struct blk_mq_ctx *ctx = blk_mq_get_ctx(q); - struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(q, bio->bi_opf, ctx->cpu); + struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(q, bio->bi_opf, ctx); bool ret = false; enum hctx_type type; diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c index 2089c6c..a4931fc 100644 --- a/block/blk-mq-tag.c +++ b/block/blk-mq-tag.c @@ -170,7 +170,7 @@ unsigned int blk_mq_get_tag(struct blk_mq_alloc_data *data) data->ctx = blk_mq_get_ctx(data->q); data->hctx = blk_mq_map_queue(data->q, data->cmd_flags, - data->ctx->cpu); + data->ctx); tags = blk_mq_tags_from_data(data); if (data->flags & BLK_MQ_REQ_RESERVED) bt = &tags->breserved_tags; diff --git a/block/blk-mq.c b/block/blk-mq.c index 3ba37b9..6898d24 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -364,7 +364,7 @@ static struct request *blk_mq_get_request(struct request_queue *q, } if (likely(!data->hctx)) data->hctx = blk_mq_map_queue(q, data->cmd_flags, - data->ctx->cpu); + data->ctx); if (data->cmd_flags & REQ_NOWAIT) data->flags |= BLK_MQ_REQ_NOWAIT; @@ -2434,7 +2434,7 @@ static void blk_mq_map_swqueue(struct request_queue *q) continue; hctx = blk_mq_map_queue_type(q, j, i); - + ctx->hctxs[j] = hctx; /* * If the CPU is already set in the mask, then we've * mapped this one already. This can happen if diff --git a/block/blk-mq.h b/block/blk-mq.h index d943d46..998f5cf 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -23,6 +23,7 @@ struct blk_mq_ctx { unsigned int cpu; unsigned short index_hw[HCTX_MAX_TYPES]; + struct blk_mq_hw_ctx *hctxs[HCTX_MAX_TYPES]; /* incremented at dispatch time */ unsigned long rq_dispatched[2]; @@ -101,7 +102,7 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue_type(struct request_queue * */ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q, unsigned int flags, - unsigned int cpu) + struct blk_mq_ctx *ctx) { enum hctx_type type = HCTX_TYPE_DEFAULT; @@ -116,7 +117,7 @@ static inline struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *q, q->tag_set->map[HCTX_TYPE_READ].nr_queues) type = HCTX_TYPE_READ; - return blk_mq_map_queue_type(q, type, cpu); + return ctx->hctxs[type]; } /* diff --git a/block/blk.h b/block/blk.h index 848278c..5d636ee 100644 --- a/block/blk.h +++ b/block/blk.h @@ -38,7 +38,7 @@ extern struct ida blk_queue_ida; static inline struct blk_flush_queue * blk_get_flush_queue(struct request_queue *q, struct blk_mq_ctx *ctx) { - return blk_mq_map_queue(q, REQ_OP_FLUSH, ctx->cpu)->fq; + return blk_mq_map_queue(q, REQ_OP_FLUSH, ctx)->fq; } static inline void __blk_get_queue(struct request_queue *q) -- 2.7.4