From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 55FB8A2EFC for ; Mon, 14 Oct 2019 07:22:29 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 298921C1E2; Mon, 14 Oct 2019 07:22:29 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-eopbgr810088.outbound.protection.outlook.com [40.107.81.88]) by dpdk.org (Postfix) with ESMTP id 246AE1B994; Mon, 14 Oct 2019 07:22:25 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WehZScDlxn1VZGovMQBaD0dgp4ofsu0M49xOoIuTcuErQRL6OOG0/RmMvNN14DXHxokAzbxeNrcW/r2VVL12EYETvWa2qF52xJ5gUWuRyd5CCwUweHvIzHD62vJjPG+terqFC1GyI/rq4b/+VSdoO/mOOvN4XxDTH4pZO3wta8Twbxj7Qt8kDzdSDe+x18l75+L+baZz6KWjttn+IogTOVjpTSWGGvMTM/PtYPoh6GbqCXwn03CQt6EGYHW7R1harnmIYWMFC3CdXwUoLYJ5vGwaSLlaGMkIECAw4qykSw1Q7oK1bfqjMnowTGuvo42+t1RKmvHLxucza7xWlV/DAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NqeCu2WcWyHVvXG2j8jZ4kXXo5hy1c1zODQd1VTYOV8=; b=mOxOXDsApwOAsOwjzWSTMI7yu7g6+M1svvRLWGpXS+Dea9x0lZDmozhnso8U7uqIs1A4CsENIUwfiw/mtPpztcAhsqipsBskgsuLjpO4BjMWZa7a++Uj172ZfpBaWYa1PRi72yu90WCk6uKGxcLEs1Eyag+5XK5YREmXtOzT8b59mPSt1pd3JxwZyKr6ICRqpIN+iNjuTOLhc8hzf2SM9/uV6T/SXl3lJbP1ZDZIvnNclPVGNlz0ahlMDl8C8I9OtM2pzLHU/u5a4U40pRxEhJXeKR1FC/iyaUONhIn5Z/HEtl4HYOvydKk3y4RAjUI9x1qSbcjQJSarQdQaqASehw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NqeCu2WcWyHVvXG2j8jZ4kXXo5hy1c1zODQd1VTYOV8=; b=yyF+e+x+0wNaUfeGI6c6pnoe9nf2lHqdFrM8DYpn4k2tj5fgeOJ343rxieFjOv1ZFO8C3hvI4CponFKQ0gy3xiH/7P/NTsNDaYtKDj4ckqi6dywvO7tp9zso5VWCcLrzX7lPm2K2XM3mwXHABciIiEE0oQKuKFL823B7w4LMTkc= Received: from DM5PR1201MB2474.namprd12.prod.outlook.com (10.172.87.136) by DM5PR1201MB0027.namprd12.prod.outlook.com (10.174.108.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2347.19; Mon, 14 Oct 2019 05:22:23 +0000 Received: from DM5PR1201MB2474.namprd12.prod.outlook.com ([fe80::f3:94a5:9dbc:1fd5]) by DM5PR1201MB2474.namprd12.prod.outlook.com ([fe80::f3:94a5:9dbc:1fd5%12]) with mapi id 15.20.2347.023; Mon, 14 Oct 2019 05:22:23 +0000 From: To: "dev@dpdk.org" CC: "stable@dpdk.org" Thread-Topic: [PATCH v1 6/6] crypto/ccp: fix for scheduling multiple CCP within single burst ccp driver was scheduling only one CCP in a single burst. Effective throughput was limited to 1 CCP performance. Scheduling multiple ccp within one burst will increase the c... Thread-Index: AQHVgk9cW5Hj9LWN6kWQSpCxowEkUA== Date: Mon, 14 Oct 2019 05:22:23 +0000 Message-ID: <20191014052202.12625-1-asomalap@amd.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MAXPR0101CA0012.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:c::22) To DM5PR1201MB2474.namprd12.prod.outlook.com (2603:10b6:3:e3::8) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Amaranath.Somalapuram@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [165.204.156.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 33ddab40-ed84-44a2-dc15-08d750667e87 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM5PR1201MB0027: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:561; x-forefront-prvs: 01901B3451 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(346002)(376002)(39860400002)(136003)(396003)(366004)(199004)(189003)(1076003)(14454004)(5660300002)(2616005)(66066001)(486006)(4326008)(476003)(99286004)(256004)(66556008)(71200400001)(66476007)(64756008)(66946007)(66446008)(71190400001)(6436002)(478600001)(6512007)(5640700003)(2906002)(316002)(450100002)(7736002)(25786009)(2351001)(2501003)(6486002)(6916009)(386003)(6506007)(102836004)(26005)(52116002)(186003)(3846002)(6116002)(36756003)(305945005)(8676002)(50226002)(81156014)(1730700003)(8936002)(81166006)(219693003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR1201MB0027; H:DM5PR1201MB2474.namprd12.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RU0d9WjILHdUuYmhmfuMYmMZpDG7ZFdnKqTX3ZSfKClRv92E+btNE6VFTfy7wgDJxUk+J4TD2SHiHBZ7Jd7Im1LJLT5CZQadzyOv2ZznWtkn1sLomv7m22m0qr7RwDlnzcvOij+z8c6ISjKmgRqEE7LCWDc+jbkZcEmkKl4Ae1eDCUAmGsWIBV1nbCsp1JB+8NNi8ATRQ9CfoZsz16rHCE2f+kZzvFimzws/XYOVL+3llFlEPGlcqRBTL+m4/OLY5YhQOjJrOvmJgNPSKAFXWGS2FhO/aDfCwSe+ydJ1bIzq9GaBDHAkQ4dMuEw5rJflBo6/oI415UT5oWaQAi9zpA5dhBOpPh+nHWbX8hVkgYo7eFqo7vBnJZ8djRLBNEQoz5frUugFntOGcX7ciZ1CxTcJu5ZAx50syARlkpoCCZI= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33ddab40-ed84-44a2-dc15-08d750667e87 X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Oct 2019 05:22:23.7872 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PKMVOSbuyrwbThQ6RX7ONrbCp6YBzlyLTOfDiolBCBWRrfuEankcLxC/+WLyqXK02UgVhItBEAGM6jXHAQRQew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB0027 Subject: [dpdk-stable] [PATCH v1 6/6] crypto/ccp: fix for scheduling multiple CCP within single burst ccp driver was scheduling only one CCP in a single burst. Effective throughput was limited to 1 CCP performance. Scheduling multiple ccp within one burst will increase the c... X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Amaranath Somalapuram Signed-off-by: Amaranath Somalapuram --- drivers/crypto/ccp/ccp_crypto.c | 22 ++++++---- drivers/crypto/ccp/ccp_crypto.h | 7 +++- drivers/crypto/ccp/ccp_pmd_private.h | 2 + drivers/crypto/ccp/rte_ccp_pmd.c | 63 ++++++++++++++++++++-------- 4 files changed, 68 insertions(+), 26 deletions(-) diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypt= o.c index c0ece4e37..26874117e 100644 --- a/drivers/crypto/ccp/ccp_crypto.c +++ b/drivers/crypto/ccp/ccp_crypto.c @@ -2816,7 +2816,9 @@ process_ops_to_enqueue(struct ccp_qp *qp, struct rte_crypto_op **op, struct ccp_queue *cmd_q, uint16_t nb_ops, - int slots_req) + uint16_t total_nb_ops, + int slots_req, + uint16_t b_idx) { int i, result =3D 0; struct ccp_batch_info *b_info; @@ -2837,6 +2839,7 @@ process_ops_to_enqueue(struct ccp_qp *qp, =20 /* populate batch info necessary for dequeue */ b_info->op_idx =3D 0; + b_info->b_idx =3D 0; b_info->lsb_buf_idx =3D 0; b_info->desccnt =3D 0; b_info->cmd_q =3D cmd_q; @@ -2852,7 +2855,7 @@ process_ops_to_enqueue(struct ccp_qp *qp, =20 b_info->head_offset =3D (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE); - for (i =3D 0; i < nb_ops; i++) { + for (i =3D b_idx; i < (nb_ops+b_idx); i++) { session =3D (struct ccp_session *)get_sym_session_private_data( op[i]->sym->session, ccp_cryptodev_driver_id); @@ -2904,6 +2907,8 @@ process_ops_to_enqueue(struct ccp_qp *qp, } =20 b_info->opcnt =3D i; + b_info->b_idx =3D b_idx; + b_info->total_nb_ops =3D total_nb_ops; b_info->tail_offset =3D (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE); =20 @@ -2918,7 +2923,7 @@ process_ops_to_enqueue(struct ccp_qp *qp, rte_ring_enqueue(qp->processed_pkts, (void *)b_info); =20 EVP_MD_CTX_destroy(auth_ctx); - return i; + return i-b_idx; } =20 static inline void ccp_auth_dq_prepare(struct rte_crypto_op *op) @@ -3003,8 +3008,8 @@ ccp_prepare_ops(struct ccp_qp *qp, } min_ops =3D RTE_MIN(nb_ops, b_info->opcnt); =20 - for (i =3D 0; i < min_ops; i++) { - op_d[i] =3D b_info->op[b_info->op_idx++]; + for (i =3D b_info->b_idx; i < min_ops; i++) { + op_d[i] =3D b_info->op[b_info->b_idx + b_info->op_idx++]; session =3D (struct ccp_session *)get_sym_session_private_data( op_d[i]->sym->session, ccp_cryptodev_driver_id); @@ -3045,7 +3050,8 @@ ccp_prepare_ops(struct ccp_qp *qp, int process_ops_to_dequeue(struct ccp_qp *qp, struct rte_crypto_op **op, - uint16_t nb_ops) + uint16_t nb_ops, + uint16_t *total_nb_ops) { struct ccp_batch_info *b_info; uint32_t cur_head_offset; @@ -3060,6 +3066,7 @@ process_ops_to_dequeue(struct ccp_qp *qp, =20 if (b_info->auth_ctr =3D=3D b_info->opcnt) goto success; + *total_nb_ops =3D b_info->total_nb_ops; cur_head_offset =3D CCP_READ_REG(b_info->cmd_q->reg_base, CMD_Q_HEAD_LO_BASE); =20 @@ -3069,7 +3076,7 @@ process_ops_to_dequeue(struct ccp_qp *qp, qp->b_info =3D b_info; return 0; } - } else { + } else if(b_info->tail_offset !=3D b_info->head_offset) { if ((cur_head_offset >=3D b_info->head_offset) || (cur_head_offset < b_info->tail_offset)) { qp->b_info =3D b_info; @@ -3079,6 +3086,7 @@ process_ops_to_dequeue(struct ccp_qp *qp, =20 =20 success: + *total_nb_ops =3D b_info->total_nb_ops; nb_ops =3D ccp_prepare_ops(qp, op, b_info, nb_ops); rte_atomic64_add(&b_info->cmd_q->free_slots, b_info->desccnt); b_info->desccnt =3D 0; diff --git a/drivers/crypto/ccp/ccp_crypto.h b/drivers/crypto/ccp/ccp_crypt= o.h index 882b398ac..8e6d03efc 100644 --- a/drivers/crypto/ccp/ccp_crypto.h +++ b/drivers/crypto/ccp/ccp_crypto.h @@ -353,7 +353,9 @@ int process_ops_to_enqueue(struct ccp_qp *qp, struct rte_crypto_op **op, struct ccp_queue *cmd_q, uint16_t nb_ops, - int slots_req); + uint16_t total_nb_ops, + int slots_req, + uint16_t b_idx); =20 /** * process crypto ops to be dequeued @@ -365,7 +367,8 @@ int process_ops_to_enqueue(struct ccp_qp *qp, */ int process_ops_to_dequeue(struct ccp_qp *qp, struct rte_crypto_op **op, - uint16_t nb_ops); + uint16_t nb_ops, + uint16_t *total_nb_ops); =20 =20 /** diff --git a/drivers/crypto/ccp/ccp_pmd_private.h b/drivers/crypto/ccp/ccp_= pmd_private.h index 781050c31..1c4118ee3 100644 --- a/drivers/crypto/ccp/ccp_pmd_private.h +++ b/drivers/crypto/ccp/ccp_pmd_private.h @@ -50,8 +50,10 @@ struct ccp_batch_info { struct rte_crypto_op *op[CCP_MAX_BURST]; /**< optable populated at enque time from app*/ int op_idx; + uint16_t b_idx; struct ccp_queue *cmd_q; uint16_t opcnt; + uint16_t total_nb_ops; /**< no. of crypto ops in batch*/ int desccnt; /**< no. of ccp queue descriptors*/ diff --git a/drivers/crypto/ccp/rte_ccp_pmd.c b/drivers/crypto/ccp/rte_ccp_= pmd.c index 45221097d..b778cd11c 100644 --- a/drivers/crypto/ccp/rte_ccp_pmd.c +++ b/drivers/crypto/ccp/rte_ccp_pmd.c @@ -23,6 +23,7 @@ static unsigned int ccp_pmd_init_done; uint8_t ccp_cryptodev_driver_id; extern void *sha_ctx; +uint8_t cryptodev_cnt =3D 0; =20 struct ccp_pmd_init_params { struct rte_cryptodev_pmd_init_params def_p; @@ -202,30 +203,50 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_cr= ypto_op **ops, struct ccp_queue *cmd_q; struct rte_cryptodev *dev =3D qp->dev; uint16_t i, enq_cnt =3D 0, slots_req =3D 0; + uint16_t tmp_ops =3D nb_ops,b_idx,cur_ops=3D0; =20 if (nb_ops =3D=3D 0) return 0; =20 if (unlikely(rte_ring_full(qp->processed_pkts) !=3D 0)) return 0; + if(tmp_ops >=3D cryptodev_cnt) + { + cur_ops =3D nb_ops / cryptodev_cnt+ (nb_ops)%cryptodev_cnt ; + } + else + cur_ops =3D tmp_ops; + while(tmp_ops) + { + b_idx =3D nb_ops - tmp_ops; + slots_req =3D 0; + if(cur_ops <=3D tmp_ops ) + { + tmp_ops -=3D cur_ops; + } + else + { + cur_ops =3D tmp_ops; + tmp_ops =3D 0; + } + for (i =3D 0; i < cur_ops; i++) { + sess =3D get_ccp_session(qp, ops[i + b_idx]); + if (unlikely(sess =3D=3D NULL) && (i =3D=3D 0)) { + qp->qp_stats.enqueue_err_count++; + return 0; + } else if (sess =3D=3D NULL) { + cur_ops =3D i; + break; + } + slots_req +=3D ccp_compute_slot_count(sess); + } =20 - for (i =3D 0; i < nb_ops; i++) { - sess =3D get_ccp_session(qp, ops[i]); - if (unlikely(sess =3D=3D NULL) && (i =3D=3D 0)) { - qp->qp_stats.enqueue_err_count++; + cmd_q =3D ccp_allot_queue(dev, slots_req); + if (unlikely(cmd_q =3D=3D NULL)) return 0; - } else if (sess =3D=3D NULL) { - nb_ops =3D i; - break; - } - slots_req +=3D ccp_compute_slot_count(sess); + enq_cnt +=3D process_ops_to_enqueue(qp, ops, cmd_q, cur_ops, nb_ops, slo= ts_req, b_idx); + i++; } - - cmd_q =3D ccp_allot_queue(dev, slots_req); - if (unlikely(cmd_q =3D=3D NULL)) - return 0; - - enq_cnt =3D process_ops_to_enqueue(qp, ops, cmd_q, nb_ops, slots_req); qp->qp_stats.enqueued_count +=3D enq_cnt; return enq_cnt; } @@ -235,9 +256,17 @@ ccp_pmd_dequeue_burst(void *queue_pair, struct rte_cry= pto_op **ops, uint16_t nb_ops) { struct ccp_qp *qp =3D queue_pair; - uint16_t nb_dequeued =3D 0, i; + uint16_t nb_dequeued =3D 0, i, total_nb_ops; + + nb_dequeued =3D process_ops_to_dequeue(qp, ops, nb_ops,&total_nb_ops); =20 - nb_dequeued =3D process_ops_to_dequeue(qp, ops, nb_ops); + if(total_nb_ops) + { + while(nb_dequeued !=3D total_nb_ops) + { + nb_dequeued =3D process_ops_to_dequeue(qp, ops, nb_ops,&total_nb_ops); + } + } =20 /* Free session if a session-less crypto op */ for (i =3D 0; i < nb_dequeued; i++) --=20 2.17.1