DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] app/crypto-perf-test: fix unset crc algorithm
@ 2024-03-13 14:54 Arkadiusz Kusztal
  2024-03-13 18:22 ` [EXTERNAL] " Akhil Goyal
  2024-03-15 10:44 ` [PATCH v2] " Arkadiusz Kusztal
  0 siblings, 2 replies; 7+ messages in thread
From: Arkadiusz Kusztal @ 2024-03-13 14:54 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

Because net crc api is not thread-safe, setting crc algorithm
by the application will prevent race condition in the calc function.
Race condition still may occur when any of the threads will call this
function again. Function is called with the highest possible SIMD
extension, which is AVX512, but if this is not found, CRC API will
pick the other highest possible extension, or scalar if no SIMD
available.

Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application")

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
 app/test-crypto-perf/main.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
index 40c0b4b54f..58496797d7 100644
--- a/app/test-crypto-perf/main.c
+++ b/app/test-crypto-perf/main.c
@@ -11,6 +11,7 @@
 #include <rte_eal.h>
 #include <rte_errno.h>
 #include <rte_cryptodev.h>
+#include <rte_net_crc.h>
 #ifdef RTE_CRYPTO_SCHEDULER
 #include <rte_cryptodev_scheduler.h>
 #endif
@@ -599,6 +600,8 @@ main(int argc, char **argv)
 		goto err;
 	}
 
+	rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
+
 	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
 			nb_cryptodevs);
 	if (ret) {
-- 
2.13.6


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

* RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
  2024-03-13 14:54 [PATCH] app/crypto-perf-test: fix unset crc algorithm Arkadiusz Kusztal
@ 2024-03-13 18:22 ` Akhil Goyal
  2024-03-13 22:15   ` Kusztal, ArkadiuszX
  2024-03-15 10:44 ` [PATCH v2] " Arkadiusz Kusztal
  1 sibling, 1 reply; 7+ messages in thread
From: Akhil Goyal @ 2024-03-13 18:22 UTC (permalink / raw)
  To: Arkadiusz Kusztal, dev; +Cc: ciara.power

> Because net crc api is not thread-safe, setting crc algorithm
> by the application will prevent race condition in the calc function.
> Race condition still may occur when any of the threads will call this
> function again. Function is called with the highest possible SIMD
> extension, which is AVX512, but if this is not found, CRC API will
> pick the other highest possible extension, or scalar if no SIMD
> available.
> 
> Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application")
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---
>  app/test-crypto-perf/main.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
> index 40c0b4b54f..58496797d7 100644
> --- a/app/test-crypto-perf/main.c
> +++ b/app/test-crypto-perf/main.c
> @@ -11,6 +11,7 @@
>  #include <rte_eal.h>
>  #include <rte_errno.h>
>  #include <rte_cryptodev.h>
> +#include <rte_net_crc.h>
>  #ifdef RTE_CRYPTO_SCHEDULER
>  #include <rte_cryptodev_scheduler.h>
>  #endif
> @@ -599,6 +600,8 @@ main(int argc, char **argv)
>  		goto err;
>  	}
> 
> +	rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
> +
>  	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
>  			nb_cryptodevs);
>  	if (ret) {
> --
Not sure what is the use of this API here.
Which calc function is it fixing.

Also will it ever pick neon handler?

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

* RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
  2024-03-13 18:22 ` [EXTERNAL] " Akhil Goyal
@ 2024-03-13 22:15   ` Kusztal, ArkadiuszX
  2024-03-14 12:49     ` Akhil Goyal
  0 siblings, 1 reply; 7+ messages in thread
From: Kusztal, ArkadiuszX @ 2024-03-13 22:15 UTC (permalink / raw)
  To: Akhil Goyal, dev; +Cc: Power, Ciara



> -----Original Message-----
> From: Akhil Goyal <gakhil@marvell.com>
> Sent: Wednesday, March 13, 2024 7:22 PM
> To: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> Cc: Power, Ciara <ciara.power@intel.com>
> Subject: RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
> 
> > Because net crc api is not thread-safe, setting crc algorithm by the
> > application will prevent race condition in the calc function.
> > Race condition still may occur when any of the threads will call this
> > function again. Function is called with the highest possible SIMD
> > extension, which is AVX512, but if this is not found, CRC API will
> > pick the other highest possible extension, or scalar if no SIMD
> > available.
> >
> > Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test
> > application")
> >
> > Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> > ---
> >  app/test-crypto-perf/main.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
> > index 40c0b4b54f..58496797d7 100644
> > --- a/app/test-crypto-perf/main.c
> > +++ b/app/test-crypto-perf/main.c
> > @@ -11,6 +11,7 @@
> >  #include <rte_eal.h>
> >  #include <rte_errno.h>
> >  #include <rte_cryptodev.h>
> > +#include <rte_net_crc.h>
> >  #ifdef RTE_CRYPTO_SCHEDULER
> >  #include <rte_cryptodev_scheduler.h>
> >  #endif
> > @@ -599,6 +600,8 @@ main(int argc, char **argv)
> >  		goto err;
> >  	}
> >
> > +	rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
> > +
> >  	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
> >  			nb_cryptodevs);
> >  	if (ret) {
> > --
> Not sure what is the use of this API here.
> Which calc function is it fixing.

Yes, this deserves some explanation, rte_net_crc_calc function, when alg not set, will first try to set it during the first run.
Yet it is done in thread-unsafe manner, causing perf-test to most likely segfault because of that, when more than one thread used.
 
> 
> Also will it ever pick neon handler?

No, it won't, currently only qat is using this api though.
This api needs to be fixed, so eventually this will look different, but for now, not many choices available.

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

* RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
  2024-03-13 22:15   ` Kusztal, ArkadiuszX
@ 2024-03-14 12:49     ` Akhil Goyal
  2024-03-15  9:56       ` Kusztal, ArkadiuszX
  0 siblings, 1 reply; 7+ messages in thread
From: Akhil Goyal @ 2024-03-14 12:49 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: Power, Ciara

> > Subject: RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
> >
> > > Because net crc api is not thread-safe, setting crc algorithm by the
> > > application will prevent race condition in the calc function.
> > > Race condition still may occur when any of the threads will call this
> > > function again. Function is called with the highest possible SIMD
> > > extension, which is AVX512, but if this is not found, CRC API will
> > > pick the other highest possible extension, or scalar if no SIMD
> > > available.
> > >
> > > Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test
> > > application")
> > >
> > > Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> > > ---
> > >  app/test-crypto-perf/main.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > >
> > > diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
> > > index 40c0b4b54f..58496797d7 100644
> > > --- a/app/test-crypto-perf/main.c
> > > +++ b/app/test-crypto-perf/main.c
> > > @@ -11,6 +11,7 @@
> > >  #include <rte_eal.h>
> > >  #include <rte_errno.h>
> > >  #include <rte_cryptodev.h>
> > > +#include <rte_net_crc.h>
> > >  #ifdef RTE_CRYPTO_SCHEDULER
> > >  #include <rte_cryptodev_scheduler.h>
> > >  #endif
> > > @@ -599,6 +600,8 @@ main(int argc, char **argv)
> > >  		goto err;
> > >  	}
> > >
> > > +	rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
> > > +
> > >  	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
> > >  			nb_cryptodevs);
> > >  	if (ret) {
> > > --
> > Not sure what is the use of this API here.
> > Which calc function is it fixing.
> 
> Yes, this deserves some explanation, rte_net_crc_calc function, when alg not set,
> will first try to set it during the first run.
> Yet it is done in thread-unsafe manner, causing perf-test to most likely segfault
> because of that, when more than one thread used.
> 
Still it is not clear. Which use case of test-crypto-perf need setting this?
If it is specific to a usecase, then it should be under checks or it should be inside PMD.

> >
> > Also will it ever pick neon handler?
> 
> No, it won't, currently only qat is using this api though.
> This api needs to be fixed, so eventually this will look different, but for now, not
> many choices available.

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

* RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
  2024-03-14 12:49     ` Akhil Goyal
@ 2024-03-15  9:56       ` Kusztal, ArkadiuszX
  0 siblings, 0 replies; 7+ messages in thread
From: Kusztal, ArkadiuszX @ 2024-03-15  9:56 UTC (permalink / raw)
  To: Akhil Goyal, dev; +Cc: Power, Ciara



> -----Original Message-----
> From: Akhil Goyal <gakhil@marvell.com>
> Sent: Thursday, March 14, 2024 1:50 PM
> To: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> Cc: Power, Ciara <ciara.power@intel.com>
> Subject: RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
> 
> > > Subject: RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc
> > > algorithm
> > >
> > > > Because net crc api is not thread-safe, setting crc algorithm by
> > > > the application will prevent race condition in the calc function.
> > > > Race condition still may occur when any of the threads will call
> > > > this function again. Function is called with the highest possible
> > > > SIMD extension, which is AVX512, but if this is not found, CRC API
> > > > will pick the other highest possible extension, or scalar if no
> > > > SIMD available.
> > > >
> > > > Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test
> > > > application")
> > > >
> > > > Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> > > > ---
> > > >  app/test-crypto-perf/main.c | 3 +++
> > > >  1 file changed, 3 insertions(+)
> > > >
> > > > diff --git a/app/test-crypto-perf/main.c
> > > > b/app/test-crypto-perf/main.c index 40c0b4b54f..58496797d7 100644
> > > > --- a/app/test-crypto-perf/main.c
> > > > +++ b/app/test-crypto-perf/main.c
> > > > @@ -11,6 +11,7 @@
> > > >  #include <rte_eal.h>
> > > >  #include <rte_errno.h>
> > > >  #include <rte_cryptodev.h>
> > > > +#include <rte_net_crc.h>
> > > >  #ifdef RTE_CRYPTO_SCHEDULER
> > > >  #include <rte_cryptodev_scheduler.h>  #endif @@ -599,6 +600,8 @@
> > > > main(int argc, char **argv)
> > > >  		goto err;
> > > >  	}
> > > >
> > > > +	rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
> > > > +
> > > >  	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
> > > >  			nb_cryptodevs);
> > > >  	if (ret) {
> > > > --
> > > Not sure what is the use of this API here.
> > > Which calc function is it fixing.
> >
> > Yes, this deserves some explanation, rte_net_crc_calc function, when
> > alg not set, will first try to set it during the first run.
> > Yet it is done in thread-unsafe manner, causing perf-test to most
> > likely segfault because of that, when more than one thread used.
> >
> Still it is not clear. Which use case of test-crypto-perf need setting this?
`-optype docsis` currently, so I can narrow down it to docsis only.
> If it is specific to a usecase, then it should be under checks or it should be inside
> PMD.
It would be the best to have it inside the PMD, the problem is that it changes algorithm for entire process,
so until changes made to the API, it should be under user control.
> 
> > >
> > > Also will it ever pick neon handler?
> >
> > No, it won't, currently only qat is using this api though.
> > This api needs to be fixed, so eventually this will look different,
> > but for now, not many choices available.

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

* [PATCH v2] app/crypto-perf-test: fix unset crc algorithm
  2024-03-13 14:54 [PATCH] app/crypto-perf-test: fix unset crc algorithm Arkadiusz Kusztal
  2024-03-13 18:22 ` [EXTERNAL] " Akhil Goyal
@ 2024-03-15 10:44 ` Arkadiusz Kusztal
  2024-03-15 10:49   ` Power, Ciara
  1 sibling, 1 reply; 7+ messages in thread
From: Arkadiusz Kusztal @ 2024-03-15 10:44 UTC (permalink / raw)
  To: dev; +Cc: gakhil, ciara.power, Arkadiusz Kusztal

Because net crc api is not thread-safe, setting crc algorithm
by the application will prevent race condition in the calc function.
Race condition still may occur when any of the threads will call this
function again. Function is called with the highest possible SIMD
extension, which is AVX512, but if this is not found, CRC API will
pick the other highest possible extension, or scalar if no SIMD
available.

Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
---
v2:
- narrowed down the case to the docsis only

 app/test-crypto-perf/main.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
index 40c0b4b54f..1b23dd5fb2 100644
--- a/app/test-crypto-perf/main.c
+++ b/app/test-crypto-perf/main.c
@@ -11,6 +11,7 @@
 #include <rte_eal.h>
 #include <rte_errno.h>
 #include <rte_cryptodev.h>
+#include <rte_net_crc.h>
 #ifdef RTE_CRYPTO_SCHEDULER
 #include <rte_cryptodev_scheduler.h>
 #endif
@@ -599,6 +600,9 @@ main(int argc, char **argv)
 		goto err;
 	}
 
+	if (opts.op_type == CPERF_DOCSIS)
+		rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
+
 	ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
 			nb_cryptodevs);
 	if (ret) {
-- 
2.13.6


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

* RE: [PATCH v2] app/crypto-perf-test: fix unset crc algorithm
  2024-03-15 10:44 ` [PATCH v2] " Arkadiusz Kusztal
@ 2024-03-15 10:49   ` Power, Ciara
  0 siblings, 0 replies; 7+ messages in thread
From: Power, Ciara @ 2024-03-15 10:49 UTC (permalink / raw)
  To: Kusztal, ArkadiuszX, dev; +Cc: gakhil



> -----Original Message-----
> From: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Sent: Friday, March 15, 2024 10:45 AM
> To: dev@dpdk.org
> Cc: gakhil@marvell.com; Power, Ciara <ciara.power@intel.com>; Kusztal,
> ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH v2] app/crypto-perf-test: fix unset crc algorithm
> 
> Because net crc api is not thread-safe, setting crc algorithm by the application
> will prevent race condition in the calc function.
> Race condition still may occur when any of the threads will call this function
> again. Function is called with the highest possible SIMD extension, which is
> AVX512, but if this is not found, CRC API will pick the other highest possible
> extension, or scalar if no SIMD available.
> 
> Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusztal@intel.com>
> ---
> v2:
> - narrowed down the case to the docsis only
> 
>  app/test-crypto-perf/main.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
Acked-by: Ciara Power <ciara.power@intel.com>

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

end of thread, other threads:[~2024-03-15 10:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-13 14:54 [PATCH] app/crypto-perf-test: fix unset crc algorithm Arkadiusz Kusztal
2024-03-13 18:22 ` [EXTERNAL] " Akhil Goyal
2024-03-13 22:15   ` Kusztal, ArkadiuszX
2024-03-14 12:49     ` Akhil Goyal
2024-03-15  9:56       ` Kusztal, ArkadiuszX
2024-03-15 10:44 ` [PATCH v2] " Arkadiusz Kusztal
2024-03-15 10:49   ` Power, Ciara

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