DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] crypto/ipsec_mb: fix getting process ID per job
@ 2023-11-23 17:07 Ciara Power
  2023-11-23 17:10 ` De Lara Guarch, Pablo
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Ciara Power @ 2023-11-23 17:07 UTC (permalink / raw)
  To: dev; +Cc: thomas, kai.ji, pablo.de.lara.guarch, Ciara Power, stable

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 7f61065939..e63ba23a11 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;
@@ -2174,6 +2182,11 @@ aesni_mb_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
 			}
 		}
 
+		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
@@ -2192,7 +2205,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++;
@@ -2315,6 +2328,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;
@@ -2351,7 +2365,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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:07 [PATCH] crypto/ipsec_mb: fix getting process ID per job Ciara Power
@ 2023-11-23 17:10 ` De Lara Guarch, Pablo
  2023-11-23 17:11 ` Ji, Kai
  2023-11-23 17:15 ` [PATCH v2] " Ciara Power
  2 siblings, 0 replies; 7+ messages in thread
From: De Lara Guarch, Pablo @ 2023-11-23 17:10 UTC (permalink / raw)
  To: Power, Ciara, dev; +Cc: thomas, Ji, Kai, stable



> -----Original Message-----
> From: Power, Ciara <ciara.power@intel.com>
> Sent: Thursday, November 23, 2023 5:07 PM
> To: dev@dpdk.org
> Cc: thomas@monjalon.net; Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Power, Ciara <ciara.power@intel.com>;
> stable@dpdk.org
> Subject: [PATCH] crypto/ipsec_mb: fix getting process ID per job
> 
> 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>

Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com"

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:07 [PATCH] crypto/ipsec_mb: fix getting process ID per job Ciara Power
  2023-11-23 17:10 ` De Lara Guarch, Pablo
@ 2023-11-23 17:11 ` Ji, Kai
  2023-11-23 17:15 ` [PATCH v2] " Ciara Power
  2 siblings, 0 replies; 7+ messages in thread
From: Ji, Kai @ 2023-11-23 17:11 UTC (permalink / raw)
  To: Power, Ciara, dev; +Cc: thomas, De Lara Guarch, Pablo, stable

[-- Attachment #1: Type: text/plain, Size: 926 bytes --]

Acked-by: Kai Ji <kai.ji@intel.com>

________________________________
From: Power, Ciara <ciara.power@intel.com>
Sent: 23 November 2023 17:07
To: dev@dpdk.org <dev@dpdk.org>
Cc: thomas@monjalon.net <thomas@monjalon.net>; Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Power, Ciara <ciara.power@intel.com>; stable@dpdk.org <stable@dpdk.org>
Subject: [PATCH] crypto/ipsec_mb: fix getting process ID per job

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>
---

--
2.25.1


[-- Attachment #2: Type: text/html, Size: 1842 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:07 [PATCH] crypto/ipsec_mb: fix getting process ID per job 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
  2023-11-23 17:22   ` Ji, Kai
  2023-11-23 17:26   ` De Lara Guarch, Pablo
  2 siblings, 2 replies; 7+ messages in thread
From: Ciara Power @ 2023-11-23 17:15 UTC (permalink / raw)
  To: dev; +Cc: thomas, kai.ji, pablo.de.lara.guarch, Ciara Power, stable

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:15 ` [PATCH v2] " Ciara Power
@ 2023-11-23 17:22   ` Ji, Kai
  2023-11-23 17:26   ` De Lara Guarch, Pablo
  1 sibling, 0 replies; 7+ messages in thread
From: Ji, Kai @ 2023-11-23 17:22 UTC (permalink / raw)
  To: Power, Ciara, dev; +Cc: thomas, De Lara Guarch, Pablo, stable

[-- Attachment #1: Type: text/plain, Size: 914 bytes --]

Acked-by: Kai Ji <kai.ji@intel.com>


________________________________
From: Power, Ciara <ciara.power@intel.com>
Sent: 23 November 2023 17:15
To: dev@dpdk.org <dev@dpdk.org>
Cc: thomas@monjalon.net <thomas@monjalon.net>; Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Power, Ciara <ciara.power@intel.com>; stable@dpdk.org <stable@dpdk.org>
Subject: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job

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>



[-- Attachment #2: Type: text/html, Size: 1824 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:15 ` [PATCH v2] " Ciara Power
  2023-11-23 17:22   ` Ji, Kai
@ 2023-11-23 17:26   ` De Lara Guarch, Pablo
  2023-11-24  9:55     ` Thomas Monjalon
  1 sibling, 1 reply; 7+ messages in thread
From: De Lara Guarch, Pablo @ 2023-11-23 17:26 UTC (permalink / raw)
  To: Power, Ciara, dev; +Cc: thomas, Ji, Kai, stable



> -----Original Message-----
> From: Power, Ciara <ciara.power@intel.com>
> Sent: Thursday, November 23, 2023 5:16 PM
> To: dev@dpdk.org
> Cc: thomas@monjalon.net; Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo
> <pablo.de.lara.guarch@intel.com>; Power, Ciara <ciara.power@intel.com>;
> stable@dpdk.org
> Subject: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
> 
> 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>

Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] crypto/ipsec_mb: fix getting process ID per job
  2023-11-23 17:26   ` De Lara Guarch, Pablo
@ 2023-11-24  9:55     ` Thomas Monjalon
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Monjalon @ 2023-11-24  9:55 UTC (permalink / raw)
  To: Power, Ciara; +Cc: dev, Ji, Kai, stable, De Lara Guarch, Pablo

> > 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>
> 
> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>

Applied, thanks.




^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-11-24  9:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-23 17:07 [PATCH] crypto/ipsec_mb: fix getting process ID per job Ciara Power
2023-11-23 17:10 ` De Lara Guarch, Pablo
2023-11-23 17:11 ` Ji, Kai
2023-11-23 17:15 ` [PATCH v2] " Ciara Power
2023-11-23 17:22   ` Ji, Kai
2023-11-23 17:26   ` De Lara Guarch, Pablo
2023-11-24  9:55     ` Thomas Monjalon

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).