[dpdk-stable] patch 'crypto/ccp: fix scheduling of burst' has been queued to LTS release 18.11.6

Kevin Traynor ktraynor at redhat.com
Wed Dec 11 22:26:48 CET 2019


Hi,

FYI, your patch has been queued to LTS release 18.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 12/17/19. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/c84bea128755abc12e7684eede9b4821da8fa7cf

Thanks.

Kevin.

---
>From c84bea128755abc12e7684eede9b4821da8fa7cf Mon Sep 17 00:00:00 2001
From: Amaranath Somalapuram <asomalap at amd.com>
Date: Fri, 22 Nov 2019 12:17:17 +0530
Subject: [PATCH] crypto/ccp: fix scheduling of burst

[ upstream commit 727758576714ea4de4df01bca53978f321ae323a ]

CCP driver was scheduling only one CCP in a single burst(enqueue).
Effective throughput was limited to 1 CCP performance.
Scheduling multiple ccp within one burst will increase the ccp performance.
this changes will divide the enqueue packets equally among the multiple CCP

Fixes: e0d88a394e ("crypto/ccp: support run-time CPU based auth")

Signed-off-by: Amaranath Somalapuram <asomalap at amd.com>
---
 drivers/crypto/ccp/ccp_crypto.c      | 22 +++++++----
 drivers/crypto/ccp/ccp_crypto.h      |  7 +++-
 drivers/crypto/ccp/ccp_dev.h         |  2 +-
 drivers/crypto/ccp/ccp_pmd_private.h |  2 +
 drivers/crypto/ccp/rte_ccp_pmd.c     | 57 +++++++++++++++++++---------
 5 files changed, 63 insertions(+), 27 deletions(-)

diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c
index 1837c8543..4256734d1 100644
--- a/drivers/crypto/ccp/ccp_crypto.c
+++ b/drivers/crypto/ccp/ccp_crypto.c
@@ -2681,5 +2681,7 @@ process_ops_to_enqueue(struct ccp_qp *qp,
 		       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 = 0;
@@ -2702,4 +2704,5 @@ process_ops_to_enqueue(struct ccp_qp *qp,
 	/* populate batch info necessary for dequeue */
 	b_info->op_idx = 0;
+	b_info->b_idx = 0;
 	b_info->lsb_buf_idx = 0;
 	b_info->desccnt = 0;
@@ -2711,5 +2714,5 @@ process_ops_to_enqueue(struct ccp_qp *qp,
 	b_info->head_offset = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx *
 					 Q_DESC_SIZE);
-	for (i = 0; i < nb_ops; i++) {
+	for (i = b_idx; i < (nb_ops+b_idx); i++) {
 		session = (struct ccp_session *)get_sym_session_private_data(
 						 op[i]->sym->session,
@@ -2763,4 +2766,6 @@ process_ops_to_enqueue(struct ccp_qp *qp,
 
 	b_info->opcnt = i;
+	b_info->b_idx = b_idx;
+	b_info->total_nb_ops = total_nb_ops;
 	b_info->tail_offset = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx *
 					 Q_DESC_SIZE);
@@ -2777,5 +2782,5 @@ process_ops_to_enqueue(struct ccp_qp *qp,
 
 	EVP_MD_CTX_destroy(auth_ctx);
-	return i;
+	return i-b_idx;
 }
 
@@ -2862,6 +2867,6 @@ ccp_prepare_ops(struct ccp_qp *qp,
 	min_ops = RTE_MIN(nb_ops, b_info->opcnt);
 
-	for (i = 0; i < min_ops; i++) {
-		op_d[i] = b_info->op[b_info->op_idx++];
+	for (i =  b_info->b_idx; i < min_ops; i++) {
+		op_d[i] = b_info->op[b_info->b_idx + b_info->op_idx++];
 		session = (struct ccp_session *)get_sym_session_private_data(
 						 op_d[i]->sym->session,
@@ -2904,5 +2909,6 @@ 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;
@@ -2919,4 +2925,5 @@ process_ops_to_dequeue(struct ccp_qp *qp,
 	if (b_info->auth_ctr == b_info->opcnt)
 		goto success;
+	*total_nb_ops = b_info->total_nb_ops;
 	cur_head_offset = CCP_READ_REG(b_info->cmd_q->reg_base,
 				       CMD_Q_HEAD_LO_BASE);
@@ -2928,5 +2935,5 @@ process_ops_to_dequeue(struct ccp_qp *qp,
 			return 0;
 		}
-	} else {
+	} else if (b_info->tail_offset != b_info->head_offset) {
 		if ((cur_head_offset >= b_info->head_offset) ||
 		    (cur_head_offset < b_info->tail_offset)) {
@@ -2938,4 +2945,5 @@ process_ops_to_dequeue(struct ccp_qp *qp,
 
 success:
+	*total_nb_ops = b_info->total_nb_ops;
 	nb_ops = ccp_prepare_ops(qp, op, b_info, nb_ops);
 	rte_atomic64_add(&b_info->cmd_q->free_slots, b_info->desccnt);
diff --git a/drivers/crypto/ccp/ccp_crypto.h b/drivers/crypto/ccp/ccp_crypto.h
index 882b398ac..8e6d03efc 100644
--- a/drivers/crypto/ccp/ccp_crypto.h
+++ b/drivers/crypto/ccp/ccp_crypto.h
@@ -354,5 +354,7 @@ int process_ops_to_enqueue(struct ccp_qp *qp,
 			   struct ccp_queue *cmd_q,
 			   uint16_t nb_ops,
-			   int slots_req);
+			   uint16_t total_nb_ops,
+			   int slots_req,
+			   uint16_t b_idx);
 
 /**
@@ -366,5 +368,6 @@ 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);
 
 
diff --git a/drivers/crypto/ccp/ccp_dev.h b/drivers/crypto/ccp/ccp_dev.h
index de3e4bcc6..f4ad9eafd 100644
--- a/drivers/crypto/ccp/ccp_dev.h
+++ b/drivers/crypto/ccp/ccp_dev.h
@@ -60,5 +60,5 @@
 #define CMD_Q_SIZE			0x1F
 #define CMD_Q_SHIFT			3
-#define COMMANDS_PER_QUEUE		2048
+#define COMMANDS_PER_QUEUE		8192
 
 #define QUEUE_SIZE_VAL                  ((ffs(COMMANDS_PER_QUEUE) - 2) & \
diff --git a/drivers/crypto/ccp/ccp_pmd_private.h b/drivers/crypto/ccp/ccp_pmd_private.h
index 2a2a6ba54..6704e39ab 100644
--- a/drivers/crypto/ccp/ccp_pmd_private.h
+++ b/drivers/crypto/ccp/ccp_pmd_private.h
@@ -51,6 +51,8 @@ struct ccp_batch_info {
 	/**< 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;
diff --git a/drivers/crypto/ccp/rte_ccp_pmd.c b/drivers/crypto/ccp/rte_ccp_pmd.c
index 92d8a9559..6065ad0f7 100644
--- a/drivers/crypto/ccp/rte_ccp_pmd.c
+++ b/drivers/crypto/ccp/rte_ccp_pmd.c
@@ -22,4 +22,5 @@
 static unsigned int ccp_pmd_init_done;
 uint8_t ccp_cryptodev_driver_id;
+uint8_t cryptodev_cnt;
 
 struct ccp_pmd_init_params {
@@ -201,4 +202,5 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
 	struct rte_cryptodev *dev = qp->dev;
 	uint16_t i, enq_cnt = 0, slots_req = 0;
+	uint16_t tmp_ops = nb_ops, b_idx, cur_ops = 0;
 
 	if (nb_ops == 0)
@@ -207,22 +209,37 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
 	if (unlikely(rte_ring_full(qp->processed_pkts) != 0))
 		return 0;
+	if (tmp_ops >= cryptodev_cnt)
+		cur_ops = nb_ops / cryptodev_cnt + (nb_ops)%cryptodev_cnt;
+	else
+		cur_ops = tmp_ops;
+	while (tmp_ops)	{
+		b_idx = nb_ops - tmp_ops;
+		slots_req = 0;
+		if (cur_ops <= tmp_ops) {
+			tmp_ops -= cur_ops;
+		} else {
+			cur_ops = tmp_ops;
+			tmp_ops = 0;
+		}
+		for (i = 0; i < cur_ops; i++) {
+			sess = get_ccp_session(qp, ops[i + b_idx]);
+			if (unlikely(sess == NULL) && (i == 0)) {
+				qp->qp_stats.enqueue_err_count++;
+				return 0;
+			} else if (sess == NULL) {
+				cur_ops = i;
+				break;
+			}
+			slots_req += ccp_compute_slot_count(sess);
+		}
 
-	for (i = 0; i < nb_ops; i++) {
-		sess = get_ccp_session(qp, ops[i]);
-		if (unlikely(sess == NULL) && (i == 0)) {
-			qp->qp_stats.enqueue_err_count++;
+		cmd_q = ccp_allot_queue(dev, slots_req);
+		if (unlikely(cmd_q == NULL))
 			return 0;
-		} else if (sess == NULL) {
-			nb_ops = i;
-			break;
-		}
-		slots_req += ccp_compute_slot_count(sess);
+		enq_cnt += process_ops_to_enqueue(qp, ops, cmd_q, cur_ops,
+				nb_ops, slots_req, b_idx);
+		i++;
 	}
 
-	cmd_q = ccp_allot_queue(dev, slots_req);
-	if (unlikely(cmd_q == NULL))
-		return 0;
-
-	enq_cnt = process_ops_to_enqueue(qp, ops, cmd_q, nb_ops, slots_req);
 	qp->qp_stats.enqueued_count += enq_cnt;
 	return enq_cnt;
@@ -234,7 +251,14 @@ ccp_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 {
 	struct ccp_qp *qp = queue_pair;
-	uint16_t nb_dequeued = 0, i;
+	uint16_t nb_dequeued = 0, i, total_nb_ops;
 
-	nb_dequeued = process_ops_to_dequeue(qp, ops, nb_ops);
+	nb_dequeued = process_ops_to_dequeue(qp, ops, nb_ops, &total_nb_ops);
+
+	if (total_nb_ops) {
+		while (nb_dequeued != total_nb_ops) {
+			nb_dequeued = process_ops_to_dequeue(qp,
+					ops, nb_ops, &total_nb_ops);
+		}
+	}
 
 	/* Free session if a session-less crypto op */
@@ -289,5 +313,4 @@ cryptodev_ccp_create(const char *name,
 	struct rte_cryptodev *dev;
 	struct ccp_private *internals;
-	uint8_t cryptodev_cnt = 0;
 
 	if (init_params->def_p.name[0] == '\0')
-- 
2.21.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-12-11 21:24:17.105754270 +0000
+++ 0056-crypto-ccp-fix-scheduling-of-burst.patch	2019-12-11 21:24:12.720650122 +0000
@@ -1 +1 @@
-From 727758576714ea4de4df01bca53978f321ae323a Mon Sep 17 00:00:00 2001
+From c84bea128755abc12e7684eede9b4821da8fa7cf Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 727758576714ea4de4df01bca53978f321ae323a ]
+
@@ -12 +13,0 @@
-Cc: stable at dpdk.org
@@ -132 +133 @@
-index 781050c31..1c4118ee3 100644
+index 2a2a6ba54..6704e39ab 100644
@@ -145 +146 @@
-index 4810d799c..38cb1fe3d 100644
+index 92d8a9559..6065ad0f7 100644
@@ -148 +149 @@
-@@ -23,4 +23,5 @@
+@@ -22,4 +22,5 @@
@@ -154 +155 @@
-@@ -202,4 +203,5 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
+@@ -201,4 +202,5 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
@@ -160 +161 @@
-@@ -208,22 +210,37 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
+@@ -207,22 +209,37 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
@@ -212 +213 @@
-@@ -235,7 +252,14 @@ ccp_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
+@@ -234,7 +251,14 @@ ccp_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
@@ -229 +230 @@
-@@ -297,5 +321,4 @@ cryptodev_ccp_create(const char *name,
+@@ -289,5 +313,4 @@ cryptodev_ccp_create(const char *name,



More information about the stable mailing list