DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ciara Power <ciara.power@intel.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, kai.ji@intel.com,
	pablo.de.lara.guarch@intel.com,
	Ciara Power <ciara.power@intel.com>,
	stable@dpdk.org
Subject: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
Date: Thu, 23 Nov 2023 17:15:43 +0000	[thread overview]
Message-ID: <20231123171544.906577-1-ciara.power@intel.com> (raw)
In-Reply-To: <20231123170701.901946-1-ciara.power@intel.com>

Currently, when using IPsec-mb 1.4+, the process ID is obtained for each
job in a burst with a call to getpid().
This system call uses too many CPU cycles, and is unnecessary per job.

Instead, set the process ID value per lcore.
This is read when processing the burst, instead of per job.

Fixes: 9593d83e5d88 ("crypto/ipsec_mb: fix aesni_mb multi-process session ID")
Cc: stable@dpdk.org

Signed-off-by: Ciara Power <ciara.power@intel.com>
---
 drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
index ece9cfd5ed..4de4866cf3 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
@@ -6,6 +6,8 @@
 
 #include "pmd_aesni_mb_priv.h"
 
+RTE_DEFINE_PER_LCORE(pid_t, pid);
+
 struct aesni_mb_op_buf_data {
 	struct rte_mbuf *m;
 	uint32_t offset;
@@ -846,6 +848,7 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,
 #if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM
 	sess->session_id = imb_set_session(mb_mgr, &sess->template_job);
 	sess->pid = getpid();
+	RTE_PER_LCORE(pid) = sess->pid;
 #endif
 
 	return 0;
@@ -1503,7 +1506,7 @@ aesni_mb_digest_appended_in_src(struct rte_crypto_op *op, IMB_JOB *job,
 static inline int
 set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 		struct rte_crypto_op *op, uint8_t *digest_idx,
-		IMB_MGR *mb_mgr)
+		IMB_MGR *mb_mgr, pid_t pid)
 {
 	struct rte_mbuf *m_src = op->sym->m_src, *m_dst;
 	struct aesni_mb_qp_data *qp_data = ipsec_mb_get_qp_private_data(qp);
@@ -1517,6 +1520,10 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 	uint8_t sgl = 0;
 	uint8_t lb_sgl = 0;
 
+#if IMB_VERSION(1, 3, 0) >= IMB_VERSION_NUM
+	(void) pid;
+#endif
+
 	session = ipsec_mb_get_session_private(qp, op);
 	if (session == NULL) {
 		op->status = RTE_CRYPTO_OP_STATUS_INVALID_SESSION;
@@ -1527,7 +1534,7 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 			session->template_job.cipher_mode;
 
 #if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM
-	if (session->pid != getpid()) {
+	if (session->pid != pid) {
 		memcpy(job, &session->template_job, sizeof(IMB_JOB));
 		imb_set_session(mb_mgr, job);
 	} else if (job->session_id != session->session_id)
@@ -2136,6 +2143,7 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 	int retval, processed_jobs = 0;
 	uint16_t i, nb_jobs;
 	IMB_JOB *jobs[IMB_MAX_BURST_SIZE] = {NULL};
+	pid_t pid;
 
 	if (unlikely(nb_ops == 0 || mb_mgr == NULL))
 		return 0;
@@ -2176,6 +2184,11 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 			continue;
 		}
 
+		if (!RTE_PER_LCORE(pid))
+			RTE_PER_LCORE(pid) = getpid();
+
+		pid = RTE_PER_LCORE(pid);
+
 		/*
 		 * Get the next operations to process from ingress queue.
 		 * There is no need to return the job to the IMB_MGR
@@ -2194,7 +2207,7 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 							       &digest_idx);
 			else
 				retval = set_mb_job_params(job, qp, op,
-							   &digest_idx, mb_mgr);
+							   &digest_idx, mb_mgr, pid);
 
 			if (unlikely(retval != 0)) {
 				qp->stats.dequeue_err_count++;
@@ -2317,6 +2330,7 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 	struct rte_crypto_op *op;
 	IMB_JOB *job;
 	int retval, processed_jobs = 0;
+	pid_t pid = 0;
 
 	if (unlikely(nb_ops == 0 || mb_mgr == NULL))
 		return 0;
@@ -2353,7 +2367,7 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 						&digest_idx);
 		else
 			retval = set_mb_job_params(job, qp, op,
-				&digest_idx, mb_mgr);
+				&digest_idx, mb_mgr, pid);
 
 		if (unlikely(retval != 0)) {
 			qp->stats.dequeue_err_count++;
-- 
2.25.1


  parent reply	other threads:[~2023-11-23 17:15 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-23 17:07 [PATCH] " Ciara Power
2023-11-23 17:10 ` De Lara Guarch, Pablo
2023-11-23 17:11 ` Ji, Kai
2023-11-23 17:15 ` Ciara Power [this message]
2023-11-23 17:22   ` [PATCH v2] " Ji, Kai
2023-11-23 17:26   ` De Lara Guarch, Pablo
2023-11-24  9:55     ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231123171544.906577-1-ciara.power@intel.com \
    --to=ciara.power@intel.com \
    --cc=dev@dpdk.org \
    --cc=kai.ji@intel.com \
    --cc=pablo.de.lara.guarch@intel.com \
    --cc=stable@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).