* [PATCH v1 00/11] test-bbdev changes for 23.11
@ 2023-09-29 18:13 Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 01/11] test/bbdev: fix python script subprocess Hernan Vargas
` (10 more replies)
0 siblings, 11 replies; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Update test-bbdev for 23.11.
Hernan Vargas (11):
test/bbdev: fix python script subprocess
test/bbdev: update python script parameters
test/bbdev: rename macros from acc200 to vrb
test/bbdev: handle exception for LLR generation
test/bbdev: improve test log messages
test/bbdev: assert failed test for queue configure
test/bbdev: ldpc encoder concatenation vector
test/bbdev: increase max burst size
test/bbdev: add MLD support
test/bbdev: support new FFT capabilities
test/bbdev: support 4 bit LLR compression
app/test-bbdev/main.c | 3 +-
app/test-bbdev/main.h | 2 +-
app/test-bbdev/test-bbdev.py | 51 ++-
app/test-bbdev/test_bbdev.c | 3 +-
app/test-bbdev/test_bbdev_perf.c | 673 ++++++++++++++++++++++++++---
app/test-bbdev/test_bbdev_vector.c | 199 ++++++++-
app/test-bbdev/test_bbdev_vector.h | 1 +
7 files changed, 839 insertions(+), 93 deletions(-)
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 01/11] test/bbdev: fix python script subprocess
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:05 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 02/11] test/bbdev: update python script parameters Hernan Vargas
` (9 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas, stable
test-bbdev.py relying on non-recommended subprocess Popen.
This can lead to unstability where the process cannot be stopped with a
sig TERM.
Use subprocess run with proper timeout argument.
Fixes: f714a18885a6 ("app/testbbdev: add test application for bbdev")
Cc: stable@dpdk.org
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test-bbdev.py | 29 +++++++++++++----------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/app/test-bbdev/test-bbdev.py b/app/test-bbdev/test-bbdev.py
index 291c80b0f54f..9cdb4659724d 100755
--- a/app/test-bbdev/test-bbdev.py
+++ b/app/test-bbdev/test-bbdev.py
@@ -91,21 +91,18 @@ def kill(process):
params_string = " ".join(call_params)
print("Executing: {}".format(params_string))
- app_proc = subprocess.Popen(call_params)
- if args.timeout > 0:
- timer = Timer(args.timeout, kill, [app_proc])
- timer.start()
-
try:
- app_proc.communicate()
- except:
- print("Error: failed to execute: {}".format(params_string))
- finally:
- timer.cancel()
-
- if app_proc.returncode != 0:
- exit_status = 1
- print("ERROR TestCase failed. Failed test for vector {}. Return code: {}".format(
- vector, app_proc.returncode))
-
+ output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True)
+ except subprocess.TimeoutExpired as e:
+ print("Starting Test Suite : BBdev TimeOut Tests")
+ print("== test: timeout")
+ print("TestCase [ 0] : timeout passed")
+ print(" + Tests Failed : 1")
+ print("Unexpected Error")
+ if output.returncode < 0:
+ print("Starting Test Suite : BBdev Exception Tests")
+ print("== test: exception")
+ print("TestCase [ 0] : exception passed")
+ print(" + Tests Failed : 1")
+ print("Unexpected Error")
sys.exit(exit_status)
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 02/11] test/bbdev: update python script parameters
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 01/11] test/bbdev: fix python script subprocess Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:07 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb Hernan Vargas
` (8 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Update the timeout argument and default values.
Update EAL help message and default value.
Add iter_max and snr arguments.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
app/test-bbdev/test_bbdev_perf.c | 2 +-
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/app/test-bbdev/test-bbdev.py b/app/test-bbdev/test-bbdev.py
index 9cdb4659724d..8d0145076e4d 100755
--- a/app/test-bbdev/test-bbdev.py
+++ b/app/test-bbdev/test-bbdev.py
@@ -25,12 +25,12 @@ def kill(process):
help="specifies path to the bbdev test app",
default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-bbdev")
parser.add_argument("-e", "--eal-params",
- help="EAL arguments which are passed to the test app",
- default="--vdev=baseband_null0")
-parser.add_argument("-t", "--timeout",
+ help="EAL arguments which must be passed to the test app",
+ default="--vdev=baseband_null0 -a00:00.0")
+parser.add_argument("-T", "--timeout",
type=int,
help="Timeout in seconds",
- default=300)
+ default=600)
parser.add_argument("-c", "--test-cases",
nargs="+",
help="Defines test cases to run. Run all if not specified")
@@ -48,6 +48,14 @@ def kill(process):
type=int,
help="Operations enqueue/dequeue burst size.",
default=[32])
+parser.add_argument("-s", "--snr",
+ type=int,
+ help="SNR in dB for BLER tests",
+ default=0)
+parser.add_argument("-t", "--iter-max",
+ type=int,
+ help="Max iterations",
+ default=6)
parser.add_argument("-l", "--num-lcores",
type=int,
help="Number of lcores to run.",
@@ -68,6 +76,12 @@ def kill(process):
params.extend(["--"])
+if args.snr:
+ params.extend(["-s", str(args.snr)])
+
+if args.iter_max:
+ params.extend(["-t", str(args.iter_max)])
+
if args.num_ops:
params.extend(["-n", str(args.num_ops)])
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index 276bbf0a2e6d..faea26c10eed 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -26,7 +26,7 @@
#define MAX_QUEUES RTE_MAX_LCORE
#define TEST_REPETITIONS 100
-#define TIME_OUT_POLL 1e8
+#define TIME_OUT_POLL 1e9
#define WAIT_OFFLOAD_US 1000
#ifdef RTE_BASEBAND_FPGA_LTE_FEC
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 01/11] test/bbdev: fix python script subprocess Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 02/11] test/bbdev: update python script parameters Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:30 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 04/11] test/bbdev: handle exception for LLR generation Hernan Vargas
` (7 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Renaming ACC200 macros to use generic intel vRAN Boost (VRB).
No functional impact.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_perf.c | 91 ++++++++++++++++----------------
1 file changed, 45 insertions(+), 46 deletions(-)
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index faea26c10eed..d4c001de0093 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -64,14 +64,14 @@
#define ACC100_QMGR_INVALID_IDX -1
#define ACC100_QMGR_RR 1
#define ACC100_QOS_GBR 0
-#define ACC200PF_DRIVER_NAME ("intel_acc200_pf")
-#define ACC200VF_DRIVER_NAME ("intel_acc200_vf")
-#define ACC200_QMGR_NUM_AQS 16
-#define ACC200_QMGR_NUM_QGS 2
-#define ACC200_QMGR_AQ_DEPTH 5
-#define ACC200_QMGR_INVALID_IDX -1
-#define ACC200_QMGR_RR 1
-#define ACC200_QOS_GBR 0
+#define VRBPF_DRIVER_NAME ("intel_vran_boost_pf")
+#define VRBVF_DRIVER_NAME ("intel_vran_boost_vf")
+#define VRB_QMGR_NUM_AQS 16
+#define VRB_QMGR_NUM_QGS 2
+#define VRB_QMGR_AQ_DEPTH 5
+#define VRB_QMGR_INVALID_IDX -1
+#define VRB_QMGR_RR 1
+#define VRB_QOS_GBR 0
#endif
#define OPS_CACHE_SIZE 256U
@@ -794,11 +794,11 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
info->dev_name);
}
if ((get_init_device() == true) &&
- (!strcmp(info->drv.driver_name, ACC200PF_DRIVER_NAME))) {
+ (!strcmp(info->drv.driver_name, VRBPF_DRIVER_NAME))) {
struct rte_acc_conf conf;
unsigned int i;
- printf("Configure ACC200 FEC Driver %s with default values\n",
+ printf("Configure Driver %s with default values\n",
info->drv.driver_name);
/* clear default configuration before initialization */
@@ -807,52 +807,51 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
/* Always set in PF mode for built-in configuration */
conf.pf_mode_en = true;
for (i = 0; i < RTE_ACC_NUM_VFS; ++i) {
- conf.arb_dl_4g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_dl_4g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_dl_4g[i].round_robin_weight = ACC200_QMGR_RR;
- conf.arb_ul_4g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_ul_4g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_ul_4g[i].round_robin_weight = ACC200_QMGR_RR;
- conf.arb_dl_5g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_dl_5g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_dl_5g[i].round_robin_weight = ACC200_QMGR_RR;
- conf.arb_ul_5g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_ul_5g[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_ul_5g[i].round_robin_weight = ACC200_QMGR_RR;
- conf.arb_fft[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_fft[i].gbr_threshold1 = ACC200_QOS_GBR;
- conf.arb_fft[i].round_robin_weight = ACC200_QMGR_RR;
+ conf.arb_dl_4g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_dl_4g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_dl_4g[i].round_robin_weight = VRB_QMGR_RR;
+ conf.arb_ul_4g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_ul_4g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_ul_4g[i].round_robin_weight = VRB_QMGR_RR;
+ conf.arb_dl_5g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_dl_5g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_dl_5g[i].round_robin_weight = VRB_QMGR_RR;
+ conf.arb_ul_5g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_ul_5g[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_ul_5g[i].round_robin_weight = VRB_QMGR_RR;
+ conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_fft[i].round_robin_weight = VRB_QMGR_RR;
}
conf.input_pos_llr_1_bit = true;
conf.output_pos_llr_1_bit = true;
conf.num_vf_bundles = 1; /**< Number of VF bundles to setup */
- conf.q_ul_4g.num_qgroups = ACC200_QMGR_NUM_QGS;
- conf.q_ul_4g.first_qgroup_index = ACC200_QMGR_INVALID_IDX;
- conf.q_ul_4g.num_aqs_per_groups = ACC200_QMGR_NUM_AQS;
- conf.q_ul_4g.aq_depth_log2 = ACC200_QMGR_AQ_DEPTH;
- conf.q_dl_4g.num_qgroups = ACC200_QMGR_NUM_QGS;
- conf.q_dl_4g.first_qgroup_index = ACC200_QMGR_INVALID_IDX;
- conf.q_dl_4g.num_aqs_per_groups = ACC200_QMGR_NUM_AQS;
- conf.q_dl_4g.aq_depth_log2 = ACC200_QMGR_AQ_DEPTH;
- conf.q_ul_5g.num_qgroups = ACC200_QMGR_NUM_QGS;
- conf.q_ul_5g.first_qgroup_index = ACC200_QMGR_INVALID_IDX;
- conf.q_ul_5g.num_aqs_per_groups = ACC200_QMGR_NUM_AQS;
- conf.q_ul_5g.aq_depth_log2 = ACC200_QMGR_AQ_DEPTH;
- conf.q_dl_5g.num_qgroups = ACC200_QMGR_NUM_QGS;
- conf.q_dl_5g.first_qgroup_index = ACC200_QMGR_INVALID_IDX;
- conf.q_dl_5g.num_aqs_per_groups = ACC200_QMGR_NUM_AQS;
- conf.q_dl_5g.aq_depth_log2 = ACC200_QMGR_AQ_DEPTH;
- conf.q_fft.num_qgroups = ACC200_QMGR_NUM_QGS;
- conf.q_fft.first_qgroup_index = ACC200_QMGR_INVALID_IDX;
- conf.q_fft.num_aqs_per_groups = ACC200_QMGR_NUM_AQS;
- conf.q_fft.aq_depth_log2 = ACC200_QMGR_AQ_DEPTH;
+ conf.q_ul_4g.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_ul_4g.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_ul_4g.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_ul_4g.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
+ conf.q_dl_4g.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_dl_4g.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_dl_4g.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_dl_4g.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
+ conf.q_ul_5g.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_ul_5g.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_ul_5g.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_ul_5g.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
+ conf.q_dl_5g.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_dl_5g.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_dl_5g.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_dl_5g.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
+ conf.q_fft.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_fft.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_fft.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
/* setup PF with configuration information */
ret = rte_acc_configure(info->dev_name, &conf);
TEST_ASSERT_SUCCESS(ret,
- "Failed to configure ACC200 PF for bbdev %s",
+ "Failed to configure PF for bbdev %s",
info->dev_name);
}
#endif
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 04/11] test/bbdev: handle exception for LLR generation
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (2 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:30 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 05/11] test/bbdev: improve test log messages Hernan Vargas
` (6 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Add range limit to prevent LLR generation greater than the data buffer
size.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_perf.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index d4c001de0093..54cb2090f988 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -1838,6 +1838,12 @@ generate_turbo_llr_input(uint16_t n, struct rte_bbdev_op_data *inputs,
range = ref_op->turbo_dec.input.length;
N0 = 1.0 / pow(10.0, get_snr() / 10.0);
+ if (range > inputs[0].data->data_len) {
+ printf("Warning: Limiting LLR generation to first segment (%d from %d)\n",
+ inputs[0].data->data_len, range);
+ range = inputs[0].data->data_len;
+ }
+
for (i = 0; i < n; ++i) {
m = inputs[i].data;
int8_t *llrs = rte_pktmbuf_mtod_offset(m, int8_t *, 0);
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 05/11] test/bbdev: improve test log messages
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (3 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 04/11] test/bbdev: handle exception for LLR generation Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:40 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 06/11] test/bbdev: assert failed test for queue configure Hernan Vargas
` (5 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Add a print message for failure to retrieve stats on bbdev.
Add vector name in logs.
Remove unnecessary prints.
Update code comments and cosmetic changes.
No functional impact.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/main.c | 3 ++-
app/test-bbdev/test_bbdev_perf.c | 26 ++++++++++++++------------
2 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/app/test-bbdev/main.c b/app/test-bbdev/main.c
index ec830eb32bc8..8f6852e2efdb 100644
--- a/app/test-bbdev/main.c
+++ b/app/test-bbdev/main.c
@@ -107,7 +107,8 @@ unit_test_suite_runner(struct unit_test_suite *suite)
end = rte_rdtsc_precise();
printf(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +\n");
- printf(" + Test Suite Summary : %s\n", suite->suite_name);
+ printf(" + Test Suite Summary : %s - %s\n",
+ suite->suite_name, get_vector_filename());
printf(" + Tests Total : %2d\n", total);
printf(" + Tests Skipped : %2d\n", skipped);
printf(" + Tests Passed : %2d\n", succeeded);
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index 54cb2090f988..4f8e226e587b 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -721,9 +721,9 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
conf.vf_dl_queues_number[i] = VF_DL_5G_QUEUE_VALUE;
}
- /* UL bandwidth. Needed for schedule algorithm */
+ /* UL bandwidth. Needed only for Vista Creek 5GNR schedule algorithm */
conf.ul_bandwidth = UL_5G_BANDWIDTH;
- /* DL bandwidth */
+ /* DL bandwidth. Needed only for Vista Creek 5GNR schedule algorithm */
conf.dl_bandwidth = DL_5G_BANDWIDTH;
/* UL & DL load Balance Factor to 64 */
@@ -743,7 +743,7 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
struct rte_acc_conf conf;
unsigned int i;
- printf("Configure ACC100/ACC101 FEC Driver %s with default values\n",
+ printf("Configure ACC100 FEC device %s with default values\n",
info->drv.driver_name);
/* clear default configuration before initialization */
@@ -1047,13 +1047,15 @@ ut_setup(void)
static void
ut_teardown(void)
{
- uint8_t i, dev_id;
+ uint8_t i, dev_id, ret;
struct rte_bbdev_stats stats;
for (i = 0; i < nb_active_devs; i++) {
dev_id = active_devs[i].dev_id;
/* read stats and print */
- rte_bbdev_stats_get(dev_id, &stats);
+ ret = rte_bbdev_stats_get(dev_id, &stats);
+ if (ret != 0)
+ printf("Failed to get stats on bbdev %u\n", dev_id);
/* Stop the device */
rte_bbdev_stop(dev_id);
}
@@ -2227,9 +2229,11 @@ validate_op_harq_chain(struct rte_bbdev_op_data *op,
if ((error > 8 && (abs_harq_origin <
(llr_max - 16))) ||
(error > 16)) {
+ /*
printf("HARQ mismatch %d: exp %d act %d => %d\n",
j, harq_orig[j],
harq_out[jj], error);
+ */
byte_error++;
cum_error += error;
}
@@ -5270,7 +5274,7 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
burst_sz = num_to_process - dequeued;
ret = rte_bbdev_fft_op_alloc_bulk(mempool, ops_enq, burst_sz);
- TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_fft_op_alloc_bulk() failed");
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_fft_op(ops_enq, burst_sz, dequeued,
bufs->inputs,
@@ -5352,7 +5356,7 @@ offload_latency_test_dec(struct rte_mempool *mempool, struct test_buffers *bufs,
burst_sz = num_to_process - dequeued;
ret = rte_bbdev_dec_op_alloc_bulk(mempool, ops_enq, burst_sz);
- TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_dec_op_alloc_bulk() failed");
ref_op->turbo_dec.iter_max = get_iter_max();
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_dec_op(ops_enq, burst_sz, dequeued,
@@ -5439,7 +5443,7 @@ offload_latency_test_ldpc_dec(struct rte_mempool *mempool,
burst_sz = num_to_process - dequeued;
ret = rte_bbdev_dec_op_alloc_bulk(mempool, ops_enq, burst_sz);
- TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_dec_op_alloc_bulk() failed");
ref_op->ldpc_dec.iter_max = get_iter_max();
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_ldpc_dec_op(ops_enq, burst_sz, dequeued,
@@ -5534,8 +5538,7 @@ offload_latency_test_enc(struct rte_mempool *mempool, struct test_buffers *bufs,
burst_sz = num_to_process - dequeued;
ret = rte_bbdev_enc_op_alloc_bulk(mempool, ops_enq, burst_sz);
- TEST_ASSERT_SUCCESS(ret,
- "rte_bbdev_enc_op_alloc_bulk() failed");
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_enc_op_alloc_bulk() failed");
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_enc_op(ops_enq, burst_sz, dequeued,
bufs->inputs,
@@ -5617,8 +5620,7 @@ offload_latency_test_ldpc_enc(struct rte_mempool *mempool,
burst_sz = num_to_process - dequeued;
ret = rte_bbdev_enc_op_alloc_bulk(mempool, ops_enq, burst_sz);
- TEST_ASSERT_SUCCESS(ret,
- "rte_bbdev_enc_op_alloc_bulk() failed");
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_enc_op_alloc_bulk() failed");
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_ldpc_enc_op(ops_enq, burst_sz, dequeued,
bufs->inputs,
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (4 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 05/11] test/bbdev: improve test log messages Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:43 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector Hernan Vargas
` (4 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Stop test if rte_bbdev_queue_configure fails to configure queue.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/test-bbdev/test_bbdev.c b/app/test-bbdev/test_bbdev.c
index 65805977aead..cf224dca5d04 100644
--- a/app/test-bbdev/test_bbdev.c
+++ b/app/test-bbdev/test_bbdev.c
@@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
* - queue should be started if deferred_start ==
*/
ts_params->qconf.deferred_start = 0;
- rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
+ TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf),
+ "Failed test for rte_bbdev_queue_configure");
rte_bbdev_start(dev_id);
TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (5 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 06/11] test/bbdev: assert failed test for queue configure Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:44 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 08/11] test/bbdev: increase max burst size Hernan Vargas
` (3 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Add support for LDPC encoder concatenation configuration from the test
vector.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_vector.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
index c26727cd35c4..0ef1481f2af3 100644
--- a/app/test-bbdev/test_bbdev_vector.c
+++ b/app/test-bbdev/test_bbdev_vector.c
@@ -284,8 +284,10 @@ op_ldpc_encoder_flag_strtoul(char *token, uint32_t *op_flag_value)
*op_flag_value = RTE_BBDEV_LDPC_ENC_INTERRUPTS;
else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_SCATTER_GATHER"))
*op_flag_value = RTE_BBDEV_LDPC_ENC_SCATTER_GATHER;
+ else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_CONCATENATION"))
+ *op_flag_value = RTE_BBDEV_LDPC_ENC_CONCATENATION;
else {
- printf("The given value is not a turbo encoder flag\n");
+ printf("The given value is not a LDPC encoder flag - %s\n", token);
return -1;
}
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 08/11] test/bbdev: increase max burst size
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (6 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 19:45 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 09/11] test/bbdev: add MLD support Hernan Vargas
` (2 subsequent siblings)
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Increase max burst size to 1023.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/main.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/test-bbdev/main.h b/app/test-bbdev/main.h
index dc10a505d141..ac0083ec6673 100644
--- a/app/test-bbdev/main.h
+++ b/app/test-bbdev/main.h
@@ -16,7 +16,7 @@
#define TEST_FAILED -1
#define TEST_SKIPPED 1
-#define MAX_BURST 512U
+#define MAX_BURST 1023U
#define MAX_OPS 1024U
#define DEFAULT_BURST 32U
#define DEFAULT_OPS 64U
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 09/11] test/bbdev: add MLD support
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (7 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 08/11] test/bbdev: increase max burst size Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 20:03 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 10/11] test/bbdev: support new FFT capabilities Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression Hernan Vargas
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Adding test-bbdev support for the MLD-TS processing specific to the VRB2
variant.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_perf.c | 519 +++++++++++++++++++++++++++++
app/test-bbdev/test_bbdev_vector.c | 132 ++++++++
app/test-bbdev/test_bbdev_vector.h | 1 +
3 files changed, 652 insertions(+)
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index 4f8e226e587b..8a349fdb03d5 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -139,6 +139,7 @@ struct test_op_params {
struct rte_bbdev_dec_op *ref_dec_op;
struct rte_bbdev_enc_op *ref_enc_op;
struct rte_bbdev_fft_op *ref_fft_op;
+ struct rte_bbdev_mldts_op *ref_mldts_op;
uint16_t burst_sz;
uint16_t num_to_process;
uint16_t num_lcores;
@@ -165,6 +166,7 @@ struct thread_params {
struct rte_bbdev_dec_op *dec_ops[MAX_BURST];
struct rte_bbdev_enc_op *enc_ops[MAX_BURST];
struct rte_bbdev_fft_op *fft_ops[MAX_BURST];
+ struct rte_bbdev_mldts_op *mldts_ops[MAX_BURST];
};
/* Stores time statistics */
@@ -472,6 +474,18 @@ check_dev_cap(const struct rte_bbdev_info *dev_info)
return TEST_FAILED;
}
return TEST_SUCCESS;
+ } else if (op_cap->type == RTE_BBDEV_OP_MLDTS) {
+ const struct rte_bbdev_op_cap_mld *cap = &op_cap->cap.mld;
+ if (!flags_match(test_vector.mldts.op_flags, cap->capability_flags)) {
+ printf("Flag Mismatch\n");
+ return TEST_FAILED;
+ }
+ if (nb_inputs > cap->num_buffers_src) {
+ printf("Too many inputs defined: %u, max: %u\n",
+ nb_inputs, cap->num_buffers_src);
+ return TEST_FAILED;
+ }
+ return TEST_SUCCESS;
}
}
@@ -822,6 +836,9 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
conf.arb_fft[i].round_robin_weight = VRB_QMGR_RR;
+ conf.arb_mld[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_mld[i].gbr_threshold1 = VRB_QOS_GBR;
+ conf.arb_mld[i].round_robin_weight = VRB_QMGR_RR;
}
conf.input_pos_llr_1_bit = true;
@@ -847,6 +864,10 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
conf.q_fft.num_qgroups = VRB_QMGR_NUM_QGS;
conf.q_fft.first_qgroup_index = VRB_QMGR_INVALID_IDX;
conf.q_fft.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_mld.num_qgroups = VRB_QMGR_NUM_QGS;
+ conf.q_mld.first_qgroup_index = VRB_QMGR_INVALID_IDX;
+ conf.q_mld.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_mld.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
/* setup PF with configuration information */
ret = rte_acc_configure(info->dev_name, &conf);
@@ -1979,6 +2000,31 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
}
}
+static void
+copy_reference_mldts_op(struct rte_bbdev_mldts_op **ops, unsigned int n,
+ unsigned int start_idx,
+ struct rte_bbdev_op_data *q_inputs,
+ struct rte_bbdev_op_data *r_inputs,
+ struct rte_bbdev_op_data *outputs,
+ struct rte_bbdev_mldts_op *ref_op)
+{
+ unsigned int i, j;
+ struct rte_bbdev_op_mldts *mldts = &ref_op->mldts;
+ for (i = 0; i < n; i++) {
+ ops[i]->mldts.c_rep = mldts->c_rep;
+ ops[i]->mldts.num_layers = mldts->num_layers;
+ ops[i]->mldts.num_rbs = mldts->num_rbs;
+ ops[i]->mldts.op_flags = mldts->op_flags;
+ for (j = 0; j < RTE_BBDEV_MAX_MLD_LAYERS; j++)
+ ops[i]->mldts.q_m[j] = mldts->q_m[j];
+ ops[i]->mldts.r_rep = mldts->r_rep;
+ ops[i]->mldts.c_rep = mldts->c_rep;
+ ops[i]->mldts.r_input = r_inputs[start_idx + i];
+ ops[i]->mldts.qhy_input = q_inputs[start_idx + i];
+ ops[i]->mldts.output = outputs[start_idx + i];
+ }
+}
+
static int
check_dec_status_and_ordering(struct rte_bbdev_dec_op *op,
unsigned int order_idx, const int expected_status)
@@ -2039,6 +2085,21 @@ check_fft_status_and_ordering(struct rte_bbdev_fft_op *op,
return TEST_SUCCESS;
}
+static int
+check_mldts_status_and_ordering(struct rte_bbdev_mldts_op *op,
+ unsigned int order_idx, const int expected_status)
+{
+ TEST_ASSERT(op->status == expected_status,
+ "op_status (%d) != expected_status (%d)",
+ op->status, expected_status);
+
+ TEST_ASSERT((void *)(uintptr_t)order_idx == op->opaque_data,
+ "Ordering error, expected %p, got %p",
+ (void *)(uintptr_t)order_idx, op->opaque_data);
+
+ return TEST_SUCCESS;
+}
+
static inline int
validate_op_chain(struct rte_bbdev_op_data *op,
struct op_data_entries *orig_op)
@@ -2554,6 +2615,57 @@ validate_op_fft_chain(struct rte_bbdev_op_data *op, struct op_data_entries *orig
return TEST_SUCCESS;
}
+static inline int
+validate_op_mldts_chain(struct rte_bbdev_op_data *op,
+ struct op_data_entries *orig_op)
+{
+ uint8_t i;
+ struct rte_mbuf *m = op->data;
+ uint8_t nb_dst_segments = orig_op->nb_segments;
+ /*the result is not bit exact*/
+ int16_t thres_hold = 3;
+ int16_t delt, abs_delt;
+ uint32_t j, data_len_iq;
+ uint32_t error_num;
+ int8_t *ref_out;
+ int8_t *op_out;
+
+ TEST_ASSERT(nb_dst_segments == m->nb_segs,
+ "Number of segments differ in original (%u) and filled (%u) op mldts",
+ nb_dst_segments, m->nb_segs);
+
+ /* Due to size limition of mbuf, MLDTS doesn't use real mbuf. */
+ for (i = 0; i < nb_dst_segments; ++i) {
+ uint16_t offset = (i == 0) ? op->offset : 0;
+ uint32_t data_len = op->length;
+
+ TEST_ASSERT(orig_op->segments[i].length == data_len,
+ "Length of segment differ in original (%u) and filled (%u) op mldts",
+ orig_op->segments[i].length, data_len);
+ data_len_iq = data_len;
+ ref_out = (int8_t *)(orig_op->segments[i].addr);
+ op_out = rte_pktmbuf_mtod_offset(m, int8_t *, offset),
+ error_num = 0;
+ for (j = 0; j < data_len_iq; j++) {
+
+ delt = ref_out[j] - op_out[j];
+ abs_delt = delt > 0 ? delt : -delt;
+ error_num += (abs_delt > thres_hold ? 1 : 0);
+ if (error_num > 0)
+ printf("MLD Error %d: Exp %x %d Actual %x %d Diff %d\n",
+ j, ref_out[j], ref_out[j], op_out[j], op_out[j],
+ delt);
+ }
+ TEST_ASSERT(error_num == 0,
+ "MLDTS Output are not matched total (%u) errors (%u)",
+ data_len_iq, error_num);
+
+ m = m->next;
+ }
+
+ return TEST_SUCCESS;
+}
+
static int
validate_fft_op(struct rte_bbdev_fft_op **ops, const uint16_t n,
struct rte_bbdev_fft_op *ref_op)
@@ -2578,6 +2690,28 @@ validate_fft_op(struct rte_bbdev_fft_op **ops, const uint16_t n,
return TEST_SUCCESS;
}
+static int
+validate_mldts_op(struct rte_bbdev_mldts_op **ops, const uint16_t n,
+ struct rte_bbdev_mldts_op *ref_op)
+{
+ unsigned int i;
+ int ret;
+ struct op_data_entries *mldts_data_orig =
+ &test_vector.entries[DATA_HARD_OUTPUT];
+ for (i = 0; i < n; ++i) {
+ ret = check_mldts_status_and_ordering(ops[i], i, ref_op->status);
+ TEST_ASSERT_SUCCESS(ret,
+ "Checking status and ordering for MLDTS failed");
+ TEST_ASSERT_SUCCESS(validate_op_mldts_chain(
+ &ops[i]->mldts.output,
+ mldts_data_orig),
+ "MLDTS Output buffers (op=%u) are not matched",
+ i);
+ }
+
+ return TEST_SUCCESS;
+}
+
static void
create_reference_dec_op(struct rte_bbdev_dec_op *op)
{
@@ -2622,6 +2756,20 @@ create_reference_fft_op(struct rte_bbdev_fft_op *op)
op->fft.base_input.length += entry->segments[i].length;
}
+static void
+create_reference_mldts_op(struct rte_bbdev_mldts_op *op)
+{
+ unsigned int i;
+ struct op_data_entries *entry;
+ op->mldts = test_vector.mldts;
+ entry = &test_vector.entries[DATA_INPUT];
+ for (i = 0; i < entry->nb_segments; ++i)
+ op->mldts.qhy_input.length += entry->segments[i].length;
+ entry = &test_vector.entries[DATA_HARQ_INPUT];
+ for (i = 0; i < entry->nb_segments; ++i)
+ op->mldts.r_input.length += entry->segments[i].length;
+}
+
static void
create_reference_enc_op(struct rte_bbdev_enc_op *op)
{
@@ -2730,6 +2878,14 @@ calc_fft_size(struct rte_bbdev_fft_op *op)
return output_size;
}
+static uint32_t
+calc_mldts_size(struct rte_bbdev_mldts_op *op)
+{
+ uint32_t output_size;
+ output_size = op->mldts.num_layers * op->mldts.num_rbs * op->mldts.c_rep;
+ return output_size;
+}
+
static int
init_test_op_params(struct test_op_params *op_params,
enum rte_bbdev_op_type op_type, const int expected_status,
@@ -2744,6 +2900,9 @@ init_test_op_params(struct test_op_params *op_params,
else if (op_type == RTE_BBDEV_OP_FFT)
ret = rte_bbdev_fft_op_alloc_bulk(ops_mp,
&op_params->ref_fft_op, 1);
+ else if (op_type == RTE_BBDEV_OP_MLDTS)
+ ret = rte_bbdev_mldts_op_alloc_bulk(ops_mp,
+ &op_params->ref_mldts_op, 1);
else
ret = rte_bbdev_enc_op_alloc_bulk(ops_mp,
&op_params->ref_enc_op, 1);
@@ -2763,6 +2922,8 @@ init_test_op_params(struct test_op_params *op_params,
op_params->ref_enc_op->status = expected_status;
else if (op_type == RTE_BBDEV_OP_FFT)
op_params->ref_fft_op->status = expected_status;
+ else if (op_type == RTE_BBDEV_OP_MLDTS)
+ op_params->ref_mldts_op->status = expected_status;
return 0;
}
@@ -2831,6 +2992,8 @@ run_test_case_on_device(test_case_function *test_case_func, uint8_t dev_id,
create_reference_ldpc_dec_op(op_params->ref_dec_op);
else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
create_reference_fft_op(op_params->ref_fft_op);
+ else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
+ create_reference_mldts_op(op_params->ref_mldts_op);
for (i = 0; i < ad->nb_queues; ++i) {
f_ret = fill_queue_buffers(op_params,
@@ -3047,6 +3210,11 @@ dequeue_event_callback(uint16_t dev_id,
&tp->fft_ops[
__atomic_load_n(&tp->nb_dequeued, __ATOMIC_RELAXED)],
burst_sz);
+ else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
+ deq = rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
+ &tp->mldts_ops[
+ __atomic_load_n(&tp->nb_dequeued, __ATOMIC_RELAXED)],
+ burst_sz);
else /*RTE_BBDEV_OP_TURBO_ENC*/
deq = rte_bbdev_dequeue_enc_ops(dev_id, queue_id,
&tp->enc_ops[
@@ -3093,6 +3261,10 @@ dequeue_event_callback(uint16_t dev_id,
struct rte_bbdev_fft_op *ref_op = tp->op_params->ref_fft_op;
ret = validate_fft_op(tp->fft_ops, num_ops, ref_op);
rte_bbdev_fft_op_free_bulk(tp->fft_ops, deq);
+ } else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS) {
+ struct rte_bbdev_mldts_op *ref_op = tp->op_params->ref_mldts_op;
+ ret = validate_mldts_op(tp->mldts_ops, num_ops, ref_op);
+ rte_bbdev_mldts_op_free_bulk(tp->mldts_ops, deq);
} else if (test_vector.op_type == RTE_BBDEV_OP_LDPC_DEC) {
struct rte_bbdev_dec_op *ref_op = tp->op_params->ref_dec_op;
ret = validate_ldpc_dec_op(tp->dec_ops, num_ops, ref_op,
@@ -3118,6 +3290,9 @@ dequeue_event_callback(uint16_t dev_id,
case RTE_BBDEV_OP_FFT:
tb_len_bits = calc_fft_size(tp->op_params->ref_fft_op);
break;
+ case RTE_BBDEV_OP_MLDTS:
+ tb_len_bits = calc_mldts_size(tp->op_params->ref_mldts_op);
+ break;
case RTE_BBDEV_OP_LDPC_ENC:
tb_len_bits = calc_ldpc_enc_TB_size(tp->op_params->ref_enc_op);
break;
@@ -3593,6 +3768,88 @@ throughput_intr_lcore_fft(void *arg)
return TEST_SUCCESS;
}
+static int
+throughput_intr_lcore_mldts(void *arg)
+{
+ struct thread_params *tp = arg;
+ unsigned int enqueued;
+ const uint16_t queue_id = tp->queue_id;
+ const uint16_t burst_sz = tp->op_params->burst_sz;
+ const uint16_t num_to_process = tp->op_params->num_to_process;
+ struct rte_bbdev_mldts_op *ops[num_to_process];
+ struct test_buffers *bufs = NULL;
+ struct rte_bbdev_info info;
+ int ret, i, j;
+ uint16_t num_to_enq, enq;
+
+ TEST_ASSERT_SUCCESS((burst_sz > MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST);
+
+ TEST_ASSERT_SUCCESS(rte_bbdev_queue_intr_enable(tp->dev_id, queue_id),
+ "Failed to enable interrupts for dev: %u, queue_id: %u",
+ tp->dev_id, queue_id);
+
+ rte_bbdev_info_get(tp->dev_id, &info);
+
+ TEST_ASSERT_SUCCESS((num_to_process > info.drv.queue_size_lim),
+ "NUM_OPS cannot exceed %u for this device",
+ info.drv.queue_size_lim);
+
+ bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id];
+
+ __atomic_store_n(&tp->processing_status, 0, __ATOMIC_RELAXED);
+ __atomic_store_n(&tp->nb_dequeued, 0, __ATOMIC_RELAXED);
+
+ rte_wait_until_equal_16(&tp->op_params->sync, SYNC_START, __ATOMIC_RELAXED);
+
+ ret = rte_bbdev_mldts_op_alloc_bulk(tp->op_params->mp, ops, num_to_process);
+ TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", num_to_process);
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE)
+ copy_reference_mldts_op(ops, num_to_process, 0, bufs->inputs, bufs->harq_inputs,
+ bufs->hard_outputs, tp->op_params->ref_mldts_op);
+
+ /* Set counter to validate the ordering */
+ for (j = 0; j < num_to_process; ++j)
+ ops[j]->opaque_data = (void *)(uintptr_t)j;
+
+ for (j = 0; j < TEST_REPETITIONS; ++j) {
+ for (i = 0; i < num_to_process; ++i)
+ mbuf_reset(ops[i]->mldts.output.data);
+
+ tp->start_time = rte_rdtsc_precise();
+ for (enqueued = 0; enqueued < num_to_process;) {
+ num_to_enq = burst_sz;
+
+ if (unlikely(num_to_process - enqueued < num_to_enq))
+ num_to_enq = num_to_process - enqueued;
+
+ enq = 0;
+ do {
+ enq += rte_bbdev_enqueue_mldts_ops(tp->dev_id,
+ queue_id, &ops[enqueued], num_to_enq);
+ } while (unlikely(enq != num_to_enq));
+ enqueued += enq;
+
+ /* Write to thread burst_sz current number of enqueued
+ * descriptors. It ensures that proper number of
+ * descriptors will be dequeued in callback
+ * function - needed for last batch in case where
+ * the number of operations is not a multiple of
+ * burst size.
+ */
+ __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
+
+ /* Wait until processing of previous batch is
+ * completed
+ */
+ rte_wait_until_equal_16(&tp->nb_dequeued, enqueued, __ATOMIC_RELAXED);
+ }
+ if (j != TEST_REPETITIONS - 1)
+ __atomic_store_n(&tp->nb_dequeued, 0, __ATOMIC_RELAXED);
+ }
+
+ return TEST_SUCCESS;
+}
+
static int
throughput_pmd_lcore_dec(void *arg)
{
@@ -4403,6 +4660,104 @@ throughput_pmd_lcore_fft(void *arg)
return TEST_SUCCESS;
}
+static int
+throughput_pmd_lcore_mldts(void *arg)
+{
+ struct thread_params *tp = arg;
+ uint16_t enq, deq;
+ uint64_t total_time = 0, start_time;
+ const uint16_t queue_id = tp->queue_id;
+ const uint16_t burst_sz = tp->op_params->burst_sz;
+ const uint16_t num_ops = tp->op_params->num_to_process;
+ struct rte_bbdev_mldts_op *ops_enq[num_ops];
+ struct rte_bbdev_mldts_op *ops_deq[num_ops];
+ struct rte_bbdev_mldts_op *ref_op = tp->op_params->ref_mldts_op;
+ struct test_buffers *bufs = NULL;
+ int i, j, ret;
+ struct rte_bbdev_info info;
+ uint16_t num_to_enq;
+
+ TEST_ASSERT_SUCCESS((burst_sz > MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST);
+
+ rte_bbdev_info_get(tp->dev_id, &info);
+
+ TEST_ASSERT_SUCCESS((num_ops > info.drv.queue_size_lim),
+ "NUM_OPS cannot exceed %u for this device",
+ info.drv.queue_size_lim);
+
+ bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id];
+
+ rte_wait_until_equal_16(&tp->op_params->sync, SYNC_START, __ATOMIC_RELAXED);
+
+ ret = rte_bbdev_mldts_op_alloc_bulk(tp->op_params->mp, ops_enq, num_ops);
+ TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", num_ops);
+
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE)
+ copy_reference_mldts_op(ops_enq, num_ops, 0, bufs->inputs, bufs->harq_inputs,
+ bufs->hard_outputs, ref_op);
+
+ /* Set counter to validate the ordering */
+ for (j = 0; j < num_ops; ++j)
+ ops_enq[j]->opaque_data = (void *)(uintptr_t)j;
+
+ for (i = 0; i < TEST_REPETITIONS; ++i) {
+ uint32_t time_out = 0;
+ for (j = 0; j < num_ops; ++j)
+ mbuf_reset(ops_enq[j]->mldts.output.data);
+
+ start_time = rte_rdtsc_precise();
+
+ for (enq = 0, deq = 0; enq < num_ops;) {
+ num_to_enq = burst_sz;
+
+ if (unlikely(num_ops - enq < num_to_enq))
+ num_to_enq = num_ops - enq;
+
+ enq += rte_bbdev_enqueue_mldts_ops(tp->dev_id,
+ queue_id, &ops_enq[enq], num_to_enq);
+
+ deq += rte_bbdev_dequeue_mldts_ops(tp->dev_id,
+ queue_id, &ops_deq[deq], enq - deq);
+ time_out++;
+ if (time_out >= TIME_OUT_POLL) {
+ timeout_exit(tp->dev_id);
+ TEST_ASSERT_SUCCESS(TEST_FAILED, "Enqueue timeout!");
+ }
+ }
+
+ /* dequeue the remaining */
+ time_out = 0;
+ while (deq < enq) {
+ deq += rte_bbdev_dequeue_mldts_ops(tp->dev_id,
+ queue_id, &ops_deq[deq], enq - deq);
+ time_out++;
+ if (time_out >= TIME_OUT_POLL) {
+ timeout_exit(tp->dev_id);
+ TEST_ASSERT_SUCCESS(TEST_FAILED, "Dequeue timeout!");
+ }
+ }
+
+ total_time += rte_rdtsc_precise() - start_time;
+ }
+
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE) {
+ ret = validate_mldts_op(ops_deq, num_ops, ref_op);
+ TEST_ASSERT_SUCCESS(ret, "Validation failed!");
+ }
+
+ rte_bbdev_mldts_op_free_bulk(ops_enq, num_ops);
+
+ double tb_len_bits = calc_mldts_size(ref_op);
+
+ tp->ops_per_sec = ((double)num_ops * TEST_REPETITIONS) /
+ ((double)total_time / (double)rte_get_tsc_hz());
+ tp->mbps = (((double)(num_ops * TEST_REPETITIONS * tb_len_bits)) /
+ 1000000.0) / ((double)total_time /
+ (double)rte_get_tsc_hz());
+
+ return TEST_SUCCESS;
+}
+
static void
print_enc_throughput(struct thread_params *t_params, unsigned int used_cores)
{
@@ -4624,6 +4979,8 @@ throughput_test(struct active_device *ad,
throughput_function = throughput_intr_lcore_ldpc_enc;
else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
throughput_function = throughput_intr_lcore_fft;
+ else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
+ throughput_function = throughput_intr_lcore_mldts;
else
throughput_function = throughput_intr_lcore_enc;
@@ -4646,6 +5003,8 @@ throughput_test(struct active_device *ad,
throughput_function = throughput_pmd_lcore_ldpc_enc;
else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
throughput_function = throughput_pmd_lcore_fft;
+ else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
+ throughput_function = throughput_pmd_lcore_mldts;
else
throughput_function = throughput_pmd_lcore_enc;
}
@@ -5139,6 +5498,77 @@ latency_test_fft(struct rte_mempool *mempool,
return i;
}
+static int
+latency_test_mldts(struct rte_mempool *mempool,
+ struct test_buffers *bufs, struct rte_bbdev_mldts_op *ref_op,
+ uint16_t dev_id, uint16_t queue_id,
+ const uint16_t num_to_process, uint16_t burst_sz,
+ uint64_t *total_time, uint64_t *min_time, uint64_t *max_time)
+{
+ int ret = TEST_SUCCESS;
+ uint16_t i, j, dequeued;
+ struct rte_bbdev_mldts_op *ops_enq[MAX_BURST], *ops_deq[MAX_BURST];
+ uint64_t start_time = 0, last_time = 0;
+
+ for (i = 0, dequeued = 0; dequeued < num_to_process; ++i) {
+ uint16_t enq = 0, deq = 0;
+ uint32_t time_out = 0;
+ bool first_time = true;
+ last_time = 0;
+
+ if (unlikely(num_to_process - dequeued < burst_sz))
+ burst_sz = num_to_process - dequeued;
+
+ ret = rte_bbdev_mldts_op_alloc_bulk(mempool, ops_enq, burst_sz);
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_mldts_op_alloc_bulk() failed");
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE)
+ copy_reference_mldts_op(ops_enq, burst_sz, dequeued,
+ bufs->inputs, bufs->harq_inputs,
+ bufs->hard_outputs,
+ ref_op);
+
+ /* Set counter to validate the ordering */
+ for (j = 0; j < burst_sz; ++j)
+ ops_enq[j]->opaque_data = (void *)(uintptr_t)j;
+
+ start_time = rte_rdtsc_precise();
+
+ enq = rte_bbdev_enqueue_mldts_ops(dev_id, queue_id, &ops_enq[enq], burst_sz);
+ TEST_ASSERT(enq == burst_sz,
+ "Error enqueueing burst, expected %u, got %u",
+ burst_sz, enq);
+
+ /* Dequeue */
+ do {
+ deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
+ &ops_deq[deq], burst_sz - deq);
+ if (likely(first_time && (deq > 0))) {
+ last_time += rte_rdtsc_precise() - start_time;
+ first_time = false;
+ }
+ time_out++;
+ if (time_out >= TIME_OUT_POLL) {
+ timeout_exit(dev_id);
+ TEST_ASSERT_SUCCESS(TEST_FAILED, "Dequeue timeout!");
+ }
+ } while (unlikely(burst_sz != deq));
+
+ *max_time = RTE_MAX(*max_time, last_time);
+ *min_time = RTE_MIN(*min_time, last_time);
+ *total_time += last_time;
+
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE) {
+ ret = validate_mldts_op(ops_deq, burst_sz, ref_op);
+ TEST_ASSERT_SUCCESS(ret, "Validation failed!");
+ }
+
+ rte_bbdev_mldts_op_free_bulk(ops_enq, deq);
+ dequeued += deq;
+ }
+
+ return i;
+}
+
/* Common function for running validation and latency test cases */
static int
validation_latency_test(struct active_device *ad,
@@ -5196,6 +5626,12 @@ validation_latency_test(struct active_device *ad,
ad->dev_id, queue_id,
num_to_process, burst_sz, &total_time,
&min_time, &max_time);
+ else if (op_type == RTE_BBDEV_OP_MLDTS)
+ iter = latency_test_mldts(op_params->mp, bufs,
+ op_params->ref_mldts_op,
+ ad->dev_id, queue_id,
+ num_to_process, burst_sz, &total_time,
+ &min_time, &max_time);
else /* RTE_BBDEV_OP_TURBO_ENC */
iter = latency_test_enc(op_params->mp, bufs,
op_params->ref_enc_op,
@@ -5337,6 +5773,85 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
return i;
}
+static int
+offload_latency_test_mldts(struct rte_mempool *mempool, struct test_buffers *bufs,
+ struct rte_bbdev_mldts_op *ref_op, uint16_t dev_id,
+ uint16_t queue_id, const uint16_t num_to_process,
+ uint16_t burst_sz, struct test_time_stats *time_st)
+{
+ int i, dequeued, ret;
+ struct rte_bbdev_mldts_op *ops_enq[MAX_BURST], *ops_deq[MAX_BURST];
+ uint64_t enq_start_time, deq_start_time;
+ uint64_t enq_sw_last_time, deq_last_time;
+ struct rte_bbdev_stats stats;
+
+ for (i = 0, dequeued = 0; dequeued < num_to_process; ++i) {
+ uint16_t enq = 0, deq = 0;
+
+ if (unlikely(num_to_process - dequeued < burst_sz))
+ burst_sz = num_to_process - dequeued;
+
+ ret = rte_bbdev_mldts_op_alloc_bulk(mempool, ops_enq, burst_sz);
+ TEST_ASSERT_SUCCESS(ret, "rte_bbdev_mldts_op_alloc_bulk() failed");
+ if (test_vector.op_type != RTE_BBDEV_OP_NONE)
+ copy_reference_mldts_op(ops_enq, burst_sz, dequeued,
+ bufs->inputs, bufs->harq_inputs,
+ bufs->hard_outputs,
+ ref_op);
+
+ /* Start time meas for enqueue function offload latency */
+ enq_start_time = rte_rdtsc_precise();
+ do {
+ enq += rte_bbdev_enqueue_mldts_ops(dev_id, queue_id,
+ &ops_enq[enq], burst_sz - enq);
+ } while (unlikely(burst_sz != enq));
+
+ ret = get_bbdev_queue_stats(dev_id, queue_id, &stats);
+ TEST_ASSERT_SUCCESS(ret,
+ "Failed to get stats for queue (%u) of device (%u)",
+ queue_id, dev_id);
+
+ enq_sw_last_time = rte_rdtsc_precise() - enq_start_time -
+ stats.acc_offload_cycles;
+ time_st->enq_sw_max_time = RTE_MAX(time_st->enq_sw_max_time,
+ enq_sw_last_time);
+ time_st->enq_sw_min_time = RTE_MIN(time_st->enq_sw_min_time,
+ enq_sw_last_time);
+ time_st->enq_sw_total_time += enq_sw_last_time;
+
+ time_st->enq_acc_max_time = RTE_MAX(time_st->enq_acc_max_time,
+ stats.acc_offload_cycles);
+ time_st->enq_acc_min_time = RTE_MIN(time_st->enq_acc_min_time,
+ stats.acc_offload_cycles);
+ time_st->enq_acc_total_time += stats.acc_offload_cycles;
+
+ /* give time for device to process ops */
+ rte_delay_us(WAIT_OFFLOAD_US);
+
+ /* Start time meas for dequeue function offload latency */
+ deq_start_time = rte_rdtsc_precise();
+ /* Dequeue one operation */
+ do {
+ deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id, &ops_deq[deq], enq);
+ } while (unlikely(deq == 0));
+
+ deq_last_time = rte_rdtsc_precise() - deq_start_time;
+ time_st->deq_max_time = RTE_MAX(time_st->deq_max_time, deq_last_time);
+ time_st->deq_min_time = RTE_MIN(time_st->deq_min_time, deq_last_time);
+ time_st->deq_total_time += deq_last_time;
+
+ /* Dequeue remaining operations if needed*/
+ while (burst_sz != deq)
+ deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
+ &ops_deq[deq], burst_sz - deq);
+
+ rte_bbdev_mldts_op_free_bulk(ops_enq, deq);
+ dequeued += deq;
+ }
+
+ return i;
+}
+
static int
offload_latency_test_dec(struct rte_mempool *mempool, struct test_buffers *bufs,
struct rte_bbdev_dec_op *ref_op, uint16_t dev_id,
@@ -5734,6 +6249,10 @@ offload_cost_test(struct active_device *ad,
iter = offload_latency_test_fft(op_params->mp, bufs,
op_params->ref_fft_op, ad->dev_id, queue_id,
num_to_process, burst_sz, &time_st);
+ else if (op_type == RTE_BBDEV_OP_MLDTS)
+ iter = offload_latency_test_mldts(op_params->mp, bufs,
+ op_params->ref_mldts_op, ad->dev_id, queue_id,
+ num_to_process, burst_sz, &time_st);
else
iter = offload_latency_test_enc(op_params->mp, bufs,
op_params->ref_enc_op, ad->dev_id, queue_id,
diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
index 0ef1481f2af3..8f464db83882 100644
--- a/app/test-bbdev/test_bbdev_vector.c
+++ b/app/test-bbdev/test_bbdev_vector.c
@@ -244,6 +244,20 @@ op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
return 0;
}
+/* convert MLD flag from string to unsigned long int*/
+static int
+op_mld_flag_strtoul(char *token, uint32_t *op_flag_value)
+{
+ if (!strcmp(token, "RTE_BBDEV_MLDTS_REP"))
+ *op_flag_value = RTE_BBDEV_MLDTS_REP;
+ else {
+ printf("The given value is not a MLD flag\n");
+ return -1;
+ }
+
+ return 0;
+}
+
/* convert turbo encoder flag from string to unsigned long int*/
static int
op_encoder_flag_strtoul(char *token, uint32_t *op_flag_value)
@@ -326,6 +340,10 @@ parse_turbo_flags(char *tokens, uint32_t *op_flags,
if (op_fft_flag_strtoul(tok, &op_flag_value)
== -1)
return -1;
+ } else if (op_type == RTE_BBDEV_OP_MLDTS) {
+ if (op_mld_flag_strtoul(tok, &op_flag_value)
+ == -1)
+ return -1;
} else {
return -1;
}
@@ -355,6 +373,8 @@ op_turbo_type_strtol(char *token, enum rte_bbdev_op_type *op_type)
*op_type = RTE_BBDEV_OP_LDPC_DEC;
else if (!strcmp(token, "RTE_BBDEV_OP_FFT"))
*op_type = RTE_BBDEV_OP_FFT;
+ else if (!strcmp(token, "RTE_BBDEV_OP_MLDTS"))
+ *op_type = RTE_BBDEV_OP_MLDTS;
else if (!strcmp(token, "RTE_BBDEV_OP_NONE"))
*op_type = RTE_BBDEV_OP_NONE;
else {
@@ -992,6 +1012,73 @@ parse_fft_params(const char *key_token, char *token,
return 0;
}
+/* parses MLD parameters and assigns to global variable */
+static int
+parse_mld_params(const char *key_token, char *token,
+ struct test_bbdev_vector *vector)
+{
+ int ret = 0, status = 0;
+ uint32_t op_flags = 0;
+ char *err = NULL;
+
+ struct rte_bbdev_op_mldts *mld = &vector->mldts;
+
+ if (starts_with(key_token, "qhy_input")) {
+ ret = parse_data_entry(key_token, token, vector,
+ DATA_INPUT, "qhy_input");
+ } else if (starts_with(key_token, "r_input")) {
+ ret = parse_data_entry(key_token, token, vector,
+ DATA_HARQ_INPUT, "r_input");
+ } else if (starts_with(key_token, "output")) {
+ ret = parse_data_entry(key_token, token, vector,
+ DATA_HARD_OUTPUT, "output");
+ } else if (!strcmp(key_token, "layers")) {
+ mld->num_layers = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "layer1")) {
+ mld->q_m[0] = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "layer2")) {
+ mld->q_m[1] = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "layer3")) {
+ mld->q_m[2] = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "layer4")) {
+ mld->q_m[3] = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "crep")) {
+ mld->c_rep = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "rrep")) {
+ mld->r_rep = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "rbs")) {
+ mld->num_rbs = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "op_flags")) {
+ vector->mask |= TEST_BBDEV_VF_OP_FLAGS;
+ ret = parse_turbo_flags(token, &op_flags, vector->op_type);
+ if (!ret)
+ mld->op_flags = op_flags;
+ } else if (!strcmp(key_token, "expected_status")) {
+ vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS;
+ ret = parse_expected_status(token, &status, vector->op_type);
+ if (!ret)
+ vector->expected_status = status;
+ } else {
+ printf("Not valid mld key: '%s'\n", key_token);
+ return -1;
+ }
+
+ if (ret != 0) {
+ printf("Failed with convert '%s\t%s'\n", key_token, token);
+ return -1;
+ }
+
+ return 0;
+}
+
/* checks the type of key and assigns data */
static int
parse_entry(char *entry, struct test_bbdev_vector *vector)
@@ -1046,6 +1133,9 @@ parse_entry(char *entry, struct test_bbdev_vector *vector)
} else if (vector->op_type == RTE_BBDEV_OP_FFT) {
if (parse_fft_params(key_token, token, vector) == -1)
return -1;
+ } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) {
+ if (parse_mld_params(key_token, token, vector) == -1)
+ return -1;
}
return 0;
@@ -1132,6 +1222,25 @@ check_fft_segments(struct test_bbdev_vector *vector)
return 0;
}
+static int
+check_mld_segments(struct test_bbdev_vector *vector)
+{
+ unsigned char i;
+
+ for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++)
+ if (vector->entries[DATA_INPUT].segments[i].addr == NULL)
+ return -1;
+
+ for (i = 0; i < vector->entries[DATA_HARQ_INPUT].nb_segments; i++)
+ if (vector->entries[DATA_HARQ_INPUT].segments[i].addr == NULL)
+ return -1;
+
+ for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++)
+ if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL)
+ return -1;
+ return 0;
+}
+
static int
check_decoder_llr_spec(struct test_bbdev_vector *vector)
{
@@ -1359,6 +1468,26 @@ check_fft(struct test_bbdev_vector *vector)
return 0;
}
+/* checks mld parameters */
+static int
+check_mld(struct test_bbdev_vector *vector)
+{
+ const int mask = vector->mask;
+
+ if (check_mld_segments(vector) < 0)
+ return -1;
+
+ /* Check which params were set */
+ if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) {
+ printf(
+ "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n");
+ }
+ if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS))
+ printf(
+ "WARNING: expected_status was not specified in vector file and will be set to 0\n");
+ return 0;
+}
+
/* checks encoder parameters */
static int
check_encoder(struct test_bbdev_vector *vector)
@@ -1520,6 +1649,9 @@ bbdev_check_vector(struct test_bbdev_vector *vector)
} else if (vector->op_type == RTE_BBDEV_OP_FFT) {
if (check_fft(vector) == -1)
return -1;
+ } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) {
+ if (check_mld(vector) == -1)
+ return -1;
} else if (vector->op_type != RTE_BBDEV_OP_NONE) {
printf("Vector was not filled\n");
return -1;
diff --git a/app/test-bbdev/test_bbdev_vector.h b/app/test-bbdev/test_bbdev_vector.h
index 2ea271ffb78b..14b8ef2764ad 100644
--- a/app/test-bbdev/test_bbdev_vector.h
+++ b/app/test-bbdev/test_bbdev_vector.h
@@ -65,6 +65,7 @@ struct test_bbdev_vector {
struct rte_bbdev_op_ldpc_dec ldpc_dec;
struct rte_bbdev_op_ldpc_enc ldpc_enc;
struct rte_bbdev_op_fft fft;
+ struct rte_bbdev_op_mldts mldts;
};
/* Additional storage for op data entries */
struct op_data_entries entries[DATA_NUM_TYPES];
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 10/11] test/bbdev: support new FFT capabilities
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (8 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 09/11] test/bbdev: add MLD support Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 20:06 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression Hernan Vargas
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Adding support to test new FFT capabilities.
Optional frequency domain dewindowing, frequency resampling,
timing error correction and time offset per CS.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_perf.c | 26 ++++++++++---
app/test-bbdev/test_bbdev_vector.c | 61 ++++++++++++++++++++++++++++--
2 files changed, 78 insertions(+), 9 deletions(-)
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index 8a349fdb03d5..82deb9b1b4b9 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -864,6 +864,7 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
conf.q_fft.num_qgroups = VRB_QMGR_NUM_QGS;
conf.q_fft.first_qgroup_index = VRB_QMGR_INVALID_IDX;
conf.q_fft.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
+ conf.q_fft.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
conf.q_mld.num_qgroups = VRB_QMGR_NUM_QGS;
conf.q_mld.first_qgroup_index = VRB_QMGR_INVALID_IDX;
conf.q_mld.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
@@ -1970,7 +1971,7 @@ static void
copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
unsigned int start_idx, struct rte_bbdev_op_data *inputs,
struct rte_bbdev_op_data *outputs, struct rte_bbdev_op_data *pwrouts,
- struct rte_bbdev_fft_op *ref_op)
+ struct rte_bbdev_op_data *win_inputs, struct rte_bbdev_fft_op *ref_op)
{
unsigned int i, j;
struct rte_bbdev_op_fft *fft = &ref_op->fft;
@@ -1982,6 +1983,11 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
fft->output_leading_depadding;
for (j = 0; j < RTE_BBDEV_MAX_CS_2; j++)
ops[i]->fft.window_index[j] = fft->window_index[j];
+ for (j = 0; j < RTE_BBDEV_MAX_CS; j++) {
+ ops[i]->fft.cs_theta_0[j] = fft->cs_theta_0[j];
+ ops[i]->fft.cs_theta_d[j] = fft->cs_theta_d[j];
+ ops[i]->fft.time_offset[j] = fft->time_offset[j];
+ }
ops[i]->fft.cs_bitmap = fft->cs_bitmap;
ops[i]->fft.num_antennas_log2 = fft->num_antennas_log2;
ops[i]->fft.idft_log2 = fft->idft_log2;
@@ -1992,8 +1998,12 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
ops[i]->fft.ncs_reciprocal = fft->ncs_reciprocal;
ops[i]->fft.power_shift = fft->power_shift;
ops[i]->fft.fp16_exp_adjust = fft->fp16_exp_adjust;
+ ops[i]->fft.output_depadded_size = fft->output_depadded_size;
+ ops[i]->fft.freq_resample_mode = fft->freq_resample_mode;
ops[i]->fft.base_output = outputs[start_idx + i];
ops[i]->fft.base_input = inputs[start_idx + i];
+ if (win_inputs != NULL)
+ ops[i]->fft.dewindowing_input = win_inputs[start_idx + i];
if (pwrouts != NULL)
ops[i]->fft.power_meas_output = pwrouts[start_idx + i];
ops[i]->fft.op_flags = fft->op_flags;
@@ -2575,7 +2585,7 @@ validate_op_fft_chain(struct rte_bbdev_op_data *op, struct op_data_entries *orig
{
struct rte_mbuf *m = op->data;
uint8_t i, nb_dst_segments = orig_op->nb_segments;
- int16_t delt, abs_delt, thres_hold = 3;
+ int16_t delt, abs_delt, thres_hold = 4;
uint32_t j, data_len_iq, error_num;
int16_t *ref_out, *op_out;
@@ -2754,6 +2764,9 @@ create_reference_fft_op(struct rte_bbdev_fft_op *op)
entry = &test_vector.entries[DATA_INPUT];
for (i = 0; i < entry->nb_segments; ++i)
op->fft.base_input.length += entry->segments[i].length;
+ entry = &test_vector.entries[DATA_HARQ_INPUT];
+ for (i = 0; i < entry->nb_segments; ++i)
+ op->fft.dewindowing_input.length += entry->segments[i].length;
}
static void
@@ -3722,7 +3735,8 @@ throughput_intr_lcore_fft(void *arg)
num_to_process);
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_fft_op(ops, num_to_process, 0, bufs->inputs,
- bufs->hard_outputs, bufs->soft_outputs, tp->op_params->ref_fft_op);
+ bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
+ tp->op_params->ref_fft_op);
/* Set counter to validate the ordering */
for (j = 0; j < num_to_process; ++j)
@@ -4596,7 +4610,7 @@ throughput_pmd_lcore_fft(void *arg)
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_fft_op(ops_enq, num_ops, 0, bufs->inputs,
- bufs->hard_outputs, bufs->soft_outputs, ref_op);
+ bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs, ref_op);
/* Set counter to validate the ordering */
for (j = 0; j < num_ops; ++j)
@@ -5452,7 +5466,7 @@ latency_test_fft(struct rte_mempool *mempool,
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_fft_op(ops_enq, burst_sz, dequeued,
bufs->inputs,
- bufs->hard_outputs, bufs->soft_outputs,
+ bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
ref_op);
/* Set counter to validate the ordering */
@@ -5714,7 +5728,7 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
if (test_vector.op_type != RTE_BBDEV_OP_NONE)
copy_reference_fft_op(ops_enq, burst_sz, dequeued,
bufs->inputs,
- bufs->hard_outputs, bufs->soft_outputs,
+ bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
ref_op);
/* Start time meas for enqueue function offload latency */
diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
index 8f464db83882..56b882533cda 100644
--- a/app/test-bbdev/test_bbdev_vector.c
+++ b/app/test-bbdev/test_bbdev_vector.c
@@ -215,7 +215,6 @@ op_ldpc_decoder_flag_strtoul(char *token, uint32_t *op_flag_value)
return 0;
}
-
/* Convert FFT flag from string to unsigned long int. */
static int
op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
@@ -236,6 +235,14 @@ op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
*op_flag_value = RTE_BBDEV_FFT_FP16_INPUT;
else if (!strcmp(token, "RTE_BBDEV_FFT_FP16_OUTPUT"))
*op_flag_value = RTE_BBDEV_FFT_FP16_OUTPUT;
+ else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS"))
+ *op_flag_value = RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS;
+ else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_ERROR"))
+ *op_flag_value = RTE_BBDEV_FFT_TIMING_ERROR;
+ else if (!strcmp(token, "RTE_BBDEV_FFT_DEWINDOWING"))
+ *op_flag_value = RTE_BBDEV_FFT_DEWINDOWING;
+ else if (!strcmp(token, "RTE_BBDEV_FFT_FREQ_RESAMPLING"))
+ *op_flag_value = RTE_BBDEV_FFT_FREQ_RESAMPLING;
else {
printf("The given value is not a FFT flag\n");
return -1;
@@ -907,8 +914,7 @@ parse_ldpc_decoder_params(const char *key_token, char *token,
return 0;
}
-
-/* Parse FFT parameters and assigns to global variable. */
+/* Parses FFT parameters and assigns to global variable. */
static int
parse_fft_params(const char *key_token, char *token,
struct test_bbdev_vector *vector)
@@ -923,6 +929,10 @@ parse_fft_params(const char *key_token, char *token,
ret = parse_data_entry(key_token, token, vector,
DATA_INPUT,
op_data_prefixes[DATA_INPUT]);
+ } else if (starts_with(key_token, "dewin_input")) {
+ ret = parse_data_entry(key_token, token, vector,
+ DATA_HARQ_INPUT,
+ "dewin_input");
} else if (starts_with(key_token, "output")) {
ret = parse_data_entry(key_token, token, vector,
DATA_HARD_OUTPUT,
@@ -989,6 +999,51 @@ parse_fft_params(const char *key_token, char *token,
fft->fp16_exp_adjust = (uint32_t) strtoul(token, &err, 0);
printf("%d\n", fft->fp16_exp_adjust);
ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "freq_resample_mode")) {
+ fft->freq_resample_mode = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "out_depadded_size")) {
+ fft->output_depadded_size = (uint32_t) strtoul(token, &err, 0);
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "cs_theta_0")) {
+ tok = strtok(token, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ for (i = 0; i < FFT_WIN_SIZE; i++) {
+ fft->cs_theta_0[i] = (uint32_t) strtoul(tok, &err, 0);
+ if (i < (FFT_WIN_SIZE - 1)) {
+ tok = strtok(NULL, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ }
+ }
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "cs_theta_d")) {
+ tok = strtok(token, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ for (i = 0; i < FFT_WIN_SIZE; i++) {
+ fft->cs_theta_d[i] = (uint32_t) strtoul(tok, &err, 0);
+ if (i < (FFT_WIN_SIZE - 1)) {
+ tok = strtok(NULL, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ }
+ }
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
+ } else if (!strcmp(key_token, "time_offset")) {
+ tok = strtok(token, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ for (i = 0; i < FFT_WIN_SIZE; i++) {
+ fft->time_offset[i] = (uint32_t) strtoul(tok, &err, 0);
+ if (i < (FFT_WIN_SIZE - 1)) {
+ tok = strtok(NULL, VALUE_DELIMITER);
+ if (tok == NULL)
+ return -1;
+ }
+ }
+ ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
} else if (!strcmp(key_token, "op_flags")) {
vector->mask |= TEST_BBDEV_VF_OP_FLAGS;
ret = parse_turbo_flags(token, &op_flags, vector->op_type);
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
` (9 preceding siblings ...)
2023-09-29 18:13 ` [PATCH v1 10/11] test/bbdev: support new FFT capabilities Hernan Vargas
@ 2023-09-29 18:13 ` Hernan Vargas
2023-10-17 20:08 ` Maxime Coquelin
10 siblings, 1 reply; 37+ messages in thread
From: Hernan Vargas @ 2023-09-29 18:13 UTC (permalink / raw)
To: dev, gakhil, trix, maxime.coquelin
Cc: nicolas.chautru, qi.z.zhang, Hernan Vargas
Add support to test LDPC UL operation for new capability.
Option to compress HARQ memory to 4 bits per LLR.
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
---
app/test-bbdev/test_bbdev_perf.c | 3 ++-
app/test-bbdev/test_bbdev_vector.c | 2 ++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
index 82deb9b1b4b9..149c7a1f504c 100644
--- a/app/test-bbdev/test_bbdev_perf.c
+++ b/app/test-bbdev/test_bbdev_perf.c
@@ -2240,7 +2240,8 @@ validate_op_harq_chain(struct rte_bbdev_op_data *op,
/* Cannot compare HARQ output data for such cases */
if ((ldpc_llr_decimals > 1) && ((ops_ld->op_flags & RTE_BBDEV_LDPC_LLR_COMPRESSION)
- || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION)))
+ || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION)
+ || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION)))
break;
if (!(ldpc_cap_flags &
diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
index 56b882533cda..42fa630041e9 100644
--- a/app/test-bbdev/test_bbdev_vector.c
+++ b/app/test-bbdev/test_bbdev_vector.c
@@ -196,6 +196,8 @@ op_ldpc_decoder_flag_strtoul(char *token, uint32_t *op_flag_value)
*op_flag_value = RTE_BBDEV_LDPC_DEC_SCATTER_GATHER;
else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION"))
*op_flag_value = RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION;
+ else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION"))
+ *op_flag_value = RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION;
else if (!strcmp(token, "RTE_BBDEV_LDPC_LLR_COMPRESSION"))
*op_flag_value = RTE_BBDEV_LDPC_LLR_COMPRESSION;
else if (!strcmp(token,
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 01/11] test/bbdev: fix python script subprocess
2023-09-29 18:13 ` [PATCH v1 01/11] test/bbdev: fix python script subprocess Hernan Vargas
@ 2023-10-17 19:05 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:05 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang, stable
On 9/29/23 20:13, Hernan Vargas wrote:
> test-bbdev.py relying on non-recommended subprocess Popen.
> This can lead to unstability where the process cannot be stopped with a
s/unstability/instabilities/
> sig TERM.
> Use subprocess run with proper timeout argument.
>
> Fixes: f714a18885a6 ("app/testbbdev: add test application for bbdev")
> Cc: stable@dpdk.org
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test-bbdev.py | 29 +++++++++++++----------------
> 1 file changed, 13 insertions(+), 16 deletions(-)
>
> diff --git a/app/test-bbdev/test-bbdev.py b/app/test-bbdev/test-bbdev.py
> index 291c80b0f54f..9cdb4659724d 100755
> --- a/app/test-bbdev/test-bbdev.py
> +++ b/app/test-bbdev/test-bbdev.py
> @@ -91,21 +91,18 @@ def kill(process):
> params_string = " ".join(call_params)
>
> print("Executing: {}".format(params_string))
> - app_proc = subprocess.Popen(call_params)
> - if args.timeout > 0:
> - timer = Timer(args.timeout, kill, [app_proc])
> - timer.start()
> -
> try:
> - app_proc.communicate()
> - except:
> - print("Error: failed to execute: {}".format(params_string))
> - finally:
> - timer.cancel()
> -
> - if app_proc.returncode != 0:
> - exit_status = 1
> - print("ERROR TestCase failed. Failed test for vector {}. Return code: {}".format(
> - vector, app_proc.returncode))
> -
> + output = subprocess.run(call_params, timeout=args.timeout, universal_newlines=True)
> + except subprocess.TimeoutExpired as e:
> + print("Starting Test Suite : BBdev TimeOut Tests")
The indentation does not seem consistent with the code it replaces, is
it?
> + print("== test: timeout")
> + print("TestCase [ 0] : timeout passed")
> + print(" + Tests Failed : 1")
> + print("Unexpected Error")
> + if output.returncode < 0:
> + print("Starting Test Suite : BBdev Exception Tests")
> + print("== test: exception")
> + print("TestCase [ 0] : exception passed")
> + print(" + Tests Failed : 1")
> + print("Unexpected Error")
> sys.exit(exit_status)
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-09-29 18:13 ` [PATCH v1 02/11] test/bbdev: update python script parameters Hernan Vargas
@ 2023-10-17 19:07 ` Maxime Coquelin
2023-10-19 9:01 ` Chautru, Nicolas
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:07 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Update the timeout argument and default values.
> Update EAL help message and default value.
> Add iter_max and snr arguments.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
> app/test-bbdev/test_bbdev_perf.c | 2 +-
> 2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/app/test-bbdev/test-bbdev.py b/app/test-bbdev/test-bbdev.py
> index 9cdb4659724d..8d0145076e4d 100755
> --- a/app/test-bbdev/test-bbdev.py
> +++ b/app/test-bbdev/test-bbdev.py
> @@ -25,12 +25,12 @@ def kill(process):
> help="specifies path to the bbdev test app",
> default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-bbdev")
> parser.add_argument("-e", "--eal-params",
> - help="EAL arguments which are passed to the test app",
> - default="--vdev=baseband_null0")
> -parser.add_argument("-t", "--timeout",
> + help="EAL arguments which must be passed to the test app",
> + default="--vdev=baseband_null0 -a00:00.0")
> +parser.add_argument("-T", "--timeout",
> type=int,
> help="Timeout in seconds",
> - default=300)
> + default=600)
> parser.add_argument("-c", "--test-cases",
> nargs="+",
> help="Defines test cases to run. Run all if not specified")
> @@ -48,6 +48,14 @@ def kill(process):
> type=int,
> help="Operations enqueue/dequeue burst size.",
> default=[32])
> +parser.add_argument("-s", "--snr",
> + type=int,
> + help="SNR in dB for BLER tests",
> + default=0)
> +parser.add_argument("-t", "--iter-max",
We shouldn't change parameters meaning, it will silently break existing
scripts making use of it.
> + type=int,
> + help="Max iterations",
> + default=6)
> parser.add_argument("-l", "--num-lcores",
> type=int,
> help="Number of lcores to run.",
> @@ -68,6 +76,12 @@ def kill(process):
>
> params.extend(["--"])
>
> +if args.snr:
> + params.extend(["-s", str(args.snr)])
> +
> +if args.iter_max:
> + params.extend(["-t", str(args.iter_max)])
> +
> if args.num_ops:
> params.extend(["-n", str(args.num_ops)])
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 276bbf0a2e6d..faea26c10eed 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -26,7 +26,7 @@
>
> #define MAX_QUEUES RTE_MAX_LCORE
> #define TEST_REPETITIONS 100
> -#define TIME_OUT_POLL 1e8
> +#define TIME_OUT_POLL 1e9
> #define WAIT_OFFLOAD_US 1000
>
> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb
2023-09-29 18:13 ` [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb Hernan Vargas
@ 2023-10-17 19:30 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:30 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Renaming ACC200 macros to use generic intel vRAN Boost (VRB).
> No functional impact.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_perf.c | 91 ++++++++++++++++----------------
> 1 file changed, 45 insertions(+), 46 deletions(-)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index faea26c10eed..d4c001de0093 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -64,14 +64,14 @@
> #define ACC100_QMGR_INVALID_IDX -1
> #define ACC100_QMGR_RR 1
> #define ACC100_QOS_GBR 0
> -#define ACC200PF_DRIVER_NAME ("intel_acc200_pf")
> -#define ACC200VF_DRIVER_NAME ("intel_acc200_vf")
> -#define ACC200_QMGR_NUM_AQS 16
> -#define ACC200_QMGR_NUM_QGS 2
> -#define ACC200_QMGR_AQ_DEPTH 5
> -#define ACC200_QMGR_INVALID_IDX -1
> -#define ACC200_QMGR_RR 1
> -#define ACC200_QOS_GBR 0
> +#define VRBPF_DRIVER_NAME ("intel_vran_boost_pf")
> +#define VRBVF_DRIVER_NAME ("intel_vran_boost_vf")
Should it be a fix, since the driver name changed in an earlier version?
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 04/11] test/bbdev: handle exception for LLR generation
2023-09-29 18:13 ` [PATCH v1 04/11] test/bbdev: handle exception for LLR generation Hernan Vargas
@ 2023-10-17 19:30 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:30 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Add range limit to prevent LLR generation greater than the data buffer
> size.
Should be a fix?
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_perf.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index d4c001de0093..54cb2090f988 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -1838,6 +1838,12 @@ generate_turbo_llr_input(uint16_t n, struct rte_bbdev_op_data *inputs,
> range = ref_op->turbo_dec.input.length;
> N0 = 1.0 / pow(10.0, get_snr() / 10.0);
>
> + if (range > inputs[0].data->data_len) {
> + printf("Warning: Limiting LLR generation to first segment (%d from %d)\n",
> + inputs[0].data->data_len, range);
> + range = inputs[0].data->data_len;
> + }
> +
> for (i = 0; i < n; ++i) {
> m = inputs[i].data;
> int8_t *llrs = rte_pktmbuf_mtod_offset(m, int8_t *, 0);
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 05/11] test/bbdev: improve test log messages
2023-09-29 18:13 ` [PATCH v1 05/11] test/bbdev: improve test log messages Hernan Vargas
@ 2023-10-17 19:40 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:40 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Add a print message for failure to retrieve stats on bbdev.
> Add vector name in logs.
> Remove unnecessary prints.
> Update code comments and cosmetic changes.
> No functional impact.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/main.c | 3 ++-
> app/test-bbdev/test_bbdev_perf.c | 26 ++++++++++++++------------
> 2 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/app/test-bbdev/main.c b/app/test-bbdev/main.c
> index ec830eb32bc8..8f6852e2efdb 100644
> --- a/app/test-bbdev/main.c
> +++ b/app/test-bbdev/main.c
> @@ -107,7 +107,8 @@ unit_test_suite_runner(struct unit_test_suite *suite)
> end = rte_rdtsc_precise();
>
> printf(" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +\n");
> - printf(" + Test Suite Summary : %s\n", suite->suite_name);
> + printf(" + Test Suite Summary : %s - %s\n",
> + suite->suite_name, get_vector_filename());
> printf(" + Tests Total : %2d\n", total);
> printf(" + Tests Skipped : %2d\n", skipped);
> printf(" + Tests Passed : %2d\n", succeeded);
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 54cb2090f988..4f8e226e587b 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -721,9 +721,9 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
> conf.vf_dl_queues_number[i] = VF_DL_5G_QUEUE_VALUE;
> }
>
> - /* UL bandwidth. Needed for schedule algorithm */
> + /* UL bandwidth. Needed only for Vista Creek 5GNR schedule algorithm */
We should find a way to get rid of this device specific code in the test
application. Test-pmd now has device-specific extensions, we should
consider doing the same here.
> conf.ul_bandwidth = UL_5G_BANDWIDTH;
> - /* DL bandwidth */
> + /* DL bandwidth. Needed only for Vista Creek 5GNR schedule algorithm */
> conf.dl_bandwidth = DL_5G_BANDWIDTH;
>
> /* UL & DL load Balance Factor to 64 */
> @@ -743,7 +743,7 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
> struct rte_acc_conf conf;
> unsigned int i;
>
> - printf("Configure ACC100/ACC101 FEC Driver %s with default values\n",
> + printf("Configure ACC100 FEC device %s with default values\n",
> info->drv.driver_name);
>
> /* clear default configuration before initialization */
> @@ -1047,13 +1047,15 @@ ut_setup(void)
> static void
> ut_teardown(void)
> {
> - uint8_t i, dev_id;
> + uint8_t i, dev_id, ret;
> struct rte_bbdev_stats stats;
>
> for (i = 0; i < nb_active_devs; i++) {
> dev_id = active_devs[i].dev_id;
> /* read stats and print */
> - rte_bbdev_stats_get(dev_id, &stats);
> + ret = rte_bbdev_stats_get(dev_id, &stats);
> + if (ret != 0)
> + printf("Failed to get stats on bbdev %u\n", dev_id);
> /* Stop the device */
> rte_bbdev_stop(dev_id);
> }
> @@ -2227,9 +2229,11 @@ validate_op_harq_chain(struct rte_bbdev_op_data *op,
> if ((error > 8 && (abs_harq_origin <
> (llr_max - 16))) ||
> (error > 16)) {
> + /*
> printf("HARQ mismatch %d: exp %d act %d => %d\n",
> j, harq_orig[j],
> harq_out[jj], error);
> + */
> byte_error++;
> cum_error += error;
> }
> @@ -5270,7 +5274,7 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
> burst_sz = num_to_process - dequeued;
>
> ret = rte_bbdev_fft_op_alloc_bulk(mempool, ops_enq, burst_sz);
> - TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_fft_op_alloc_bulk() failed");
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_fft_op(ops_enq, burst_sz, dequeued,
> bufs->inputs,
> @@ -5352,7 +5356,7 @@ offload_latency_test_dec(struct rte_mempool *mempool, struct test_buffers *bufs,
> burst_sz = num_to_process - dequeued;
>
> ret = rte_bbdev_dec_op_alloc_bulk(mempool, ops_enq, burst_sz);
> - TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_dec_op_alloc_bulk() failed");
> ref_op->turbo_dec.iter_max = get_iter_max();
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_dec_op(ops_enq, burst_sz, dequeued,
> @@ -5439,7 +5443,7 @@ offload_latency_test_ldpc_dec(struct rte_mempool *mempool,
> burst_sz = num_to_process - dequeued;
>
> ret = rte_bbdev_dec_op_alloc_bulk(mempool, ops_enq, burst_sz);
> - TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", burst_sz);
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_dec_op_alloc_bulk() failed");
> ref_op->ldpc_dec.iter_max = get_iter_max();
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_ldpc_dec_op(ops_enq, burst_sz, dequeued,
> @@ -5534,8 +5538,7 @@ offload_latency_test_enc(struct rte_mempool *mempool, struct test_buffers *bufs,
> burst_sz = num_to_process - dequeued;
>
> ret = rte_bbdev_enc_op_alloc_bulk(mempool, ops_enq, burst_sz);
> - TEST_ASSERT_SUCCESS(ret,
> - "rte_bbdev_enc_op_alloc_bulk() failed");
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_enc_op_alloc_bulk() failed");
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_enc_op(ops_enq, burst_sz, dequeued,
> bufs->inputs,
> @@ -5617,8 +5620,7 @@ offload_latency_test_ldpc_enc(struct rte_mempool *mempool,
> burst_sz = num_to_process - dequeued;
>
> ret = rte_bbdev_enc_op_alloc_bulk(mempool, ops_enq, burst_sz);
> - TEST_ASSERT_SUCCESS(ret,
> - "rte_bbdev_enc_op_alloc_bulk() failed");
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_enc_op_alloc_bulk() failed");
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_ldpc_enc_op(ops_enq, burst_sz, dequeued,
> bufs->inputs,
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-09-29 18:13 ` [PATCH v1 06/11] test/bbdev: assert failed test for queue configure Hernan Vargas
@ 2023-10-17 19:43 ` Maxime Coquelin
2023-10-19 8:41 ` Chautru, Nicolas
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:43 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Stop test if rte_bbdev_queue_configure fails to configure queue.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/app/test-bbdev/test_bbdev.c b/app/test-bbdev/test_bbdev.c
> index 65805977aead..cf224dca5d04 100644
> --- a/app/test-bbdev/test_bbdev.c
> +++ b/app/test-bbdev/test_bbdev.c
> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
> * - queue should be started if deferred_start ==
> */
> ts_params->qconf.deferred_start = 0;
> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf),
> + "Failed test for rte_bbdev_queue_configure");
> rte_bbdev_start(dev_id);
>
> TEST_ASSERT_SUCCESS(return_value = rte_bbdev_queue_info_get(dev_id,
If should be a fix IMO.
With fixes tag added and stable cc'ed:
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector
2023-09-29 18:13 ` [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector Hernan Vargas
@ 2023-10-17 19:44 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:44 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Add support for LDPC encoder concatenation configuration from the test
> vector.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_vector.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
> index c26727cd35c4..0ef1481f2af3 100644
> --- a/app/test-bbdev/test_bbdev_vector.c
> +++ b/app/test-bbdev/test_bbdev_vector.c
> @@ -284,8 +284,10 @@ op_ldpc_encoder_flag_strtoul(char *token, uint32_t *op_flag_value)
> *op_flag_value = RTE_BBDEV_LDPC_ENC_INTERRUPTS;
> else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_SCATTER_GATHER"))
> *op_flag_value = RTE_BBDEV_LDPC_ENC_SCATTER_GATHER;
> + else if (!strcmp(token, "RTE_BBDEV_LDPC_ENC_CONCATENATION"))
> + *op_flag_value = RTE_BBDEV_LDPC_ENC_CONCATENATION;
> else {
> - printf("The given value is not a turbo encoder flag\n");
> + printf("The given value is not a LDPC encoder flag - %s\n", token);
> return -1;
> }
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 08/11] test/bbdev: increase max burst size
2023-09-29 18:13 ` [PATCH v1 08/11] test/bbdev: increase max burst size Hernan Vargas
@ 2023-10-17 19:45 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 19:45 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Increase max burst size to 1023.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/main.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/app/test-bbdev/main.h b/app/test-bbdev/main.h
> index dc10a505d141..ac0083ec6673 100644
> --- a/app/test-bbdev/main.h
> +++ b/app/test-bbdev/main.h
> @@ -16,7 +16,7 @@
> #define TEST_FAILED -1
> #define TEST_SKIPPED 1
>
> -#define MAX_BURST 512U
> +#define MAX_BURST 1023U
Why not 1024? It does not sound natural to change from a pow2 to a pow2
- 1, maybe add a comment to justify?
> #define MAX_OPS 1024U
> #define DEFAULT_BURST 32U
> #define DEFAULT_OPS 64U
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 09/11] test/bbdev: add MLD support
2023-09-29 18:13 ` [PATCH v1 09/11] test/bbdev: add MLD support Hernan Vargas
@ 2023-10-17 20:03 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 20:03 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Adding test-bbdev support for the MLD-TS processing specific to the VRB2
> variant.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_perf.c | 519 +++++++++++++++++++++++++++++
> app/test-bbdev/test_bbdev_vector.c | 132 ++++++++
> app/test-bbdev/test_bbdev_vector.h | 1 +
> 3 files changed, 652 insertions(+)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 4f8e226e587b..8a349fdb03d5 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -139,6 +139,7 @@ struct test_op_params {
> struct rte_bbdev_dec_op *ref_dec_op;
> struct rte_bbdev_enc_op *ref_enc_op;
> struct rte_bbdev_fft_op *ref_fft_op;
> + struct rte_bbdev_mldts_op *ref_mldts_op;
> uint16_t burst_sz;
> uint16_t num_to_process;
> uint16_t num_lcores;
> @@ -165,6 +166,7 @@ struct thread_params {
> struct rte_bbdev_dec_op *dec_ops[MAX_BURST];
> struct rte_bbdev_enc_op *enc_ops[MAX_BURST];
> struct rte_bbdev_fft_op *fft_ops[MAX_BURST];
> + struct rte_bbdev_mldts_op *mldts_ops[MAX_BURST];
> };
>
> /* Stores time statistics */
> @@ -472,6 +474,18 @@ check_dev_cap(const struct rte_bbdev_info *dev_info)
> return TEST_FAILED;
> }
> return TEST_SUCCESS;
> + } else if (op_cap->type == RTE_BBDEV_OP_MLDTS) {
> + const struct rte_bbdev_op_cap_mld *cap = &op_cap->cap.mld;
> + if (!flags_match(test_vector.mldts.op_flags, cap->capability_flags)) {
> + printf("Flag Mismatch\n");
> + return TEST_FAILED;
> + }
> + if (nb_inputs > cap->num_buffers_src) {
> + printf("Too many inputs defined: %u, max: %u\n",
> + nb_inputs, cap->num_buffers_src);
> + return TEST_FAILED;
> + }
> + return TEST_SUCCESS;
> }
> }
>
> @@ -822,6 +836,9 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
> conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
> conf.arb_fft[i].gbr_threshold1 = VRB_QOS_GBR;
> conf.arb_fft[i].round_robin_weight = VRB_QMGR_RR;
> + conf.arb_mld[i].gbr_threshold1 = VRB_QOS_GBR;
> + conf.arb_mld[i].gbr_threshold1 = VRB_QOS_GBR;
> + conf.arb_mld[i].round_robin_weight = VRB_QMGR_RR;
> }
>
> conf.input_pos_llr_1_bit = true;
> @@ -847,6 +864,10 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
> conf.q_fft.num_qgroups = VRB_QMGR_NUM_QGS;
> conf.q_fft.first_qgroup_index = VRB_QMGR_INVALID_IDX;
> conf.q_fft.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
> + conf.q_mld.num_qgroups = VRB_QMGR_NUM_QGS;
> + conf.q_mld.first_qgroup_index = VRB_QMGR_INVALID_IDX;
> + conf.q_mld.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
> + conf.q_mld.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
>
> /* setup PF with configuration information */
> ret = rte_acc_configure(info->dev_name, &conf);
> @@ -1979,6 +2000,31 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
> }
> }
>
> +static void
> +copy_reference_mldts_op(struct rte_bbdev_mldts_op **ops, unsigned int n,
> + unsigned int start_idx,
> + struct rte_bbdev_op_data *q_inputs,
> + struct rte_bbdev_op_data *r_inputs,
> + struct rte_bbdev_op_data *outputs,
> + struct rte_bbdev_mldts_op *ref_op)
> +{
> + unsigned int i, j;
> + struct rte_bbdev_op_mldts *mldts = &ref_op->mldts;
> + for (i = 0; i < n; i++) {
> + ops[i]->mldts.c_rep = mldts->c_rep;
> + ops[i]->mldts.num_layers = mldts->num_layers;
> + ops[i]->mldts.num_rbs = mldts->num_rbs;
> + ops[i]->mldts.op_flags = mldts->op_flags;
> + for (j = 0; j < RTE_BBDEV_MAX_MLD_LAYERS; j++)
> + ops[i]->mldts.q_m[j] = mldts->q_m[j];
> + ops[i]->mldts.r_rep = mldts->r_rep;
> + ops[i]->mldts.c_rep = mldts->c_rep;
> + ops[i]->mldts.r_input = r_inputs[start_idx + i];
> + ops[i]->mldts.qhy_input = q_inputs[start_idx + i];
> + ops[i]->mldts.output = outputs[start_idx + i];
> + }
> +}
> +
> static int
> check_dec_status_and_ordering(struct rte_bbdev_dec_op *op,
> unsigned int order_idx, const int expected_status)
> @@ -2039,6 +2085,21 @@ check_fft_status_and_ordering(struct rte_bbdev_fft_op *op,
> return TEST_SUCCESS;
> }
>
> +static int
> +check_mldts_status_and_ordering(struct rte_bbdev_mldts_op *op,
> + unsigned int order_idx, const int expected_status)
> +{
> + TEST_ASSERT(op->status == expected_status,
> + "op_status (%d) != expected_status (%d)",
> + op->status, expected_status);
> +
> + TEST_ASSERT((void *)(uintptr_t)order_idx == op->opaque_data,
> + "Ordering error, expected %p, got %p",
> + (void *)(uintptr_t)order_idx, op->opaque_data);
> +
> + return TEST_SUCCESS;
> +}
> +
> static inline int
> validate_op_chain(struct rte_bbdev_op_data *op,
> struct op_data_entries *orig_op)
> @@ -2554,6 +2615,57 @@ validate_op_fft_chain(struct rte_bbdev_op_data *op, struct op_data_entries *orig
> return TEST_SUCCESS;
> }
>
> +static inline int
> +validate_op_mldts_chain(struct rte_bbdev_op_data *op,
> + struct op_data_entries *orig_op)
> +{
> + uint8_t i;
> + struct rte_mbuf *m = op->data;
> + uint8_t nb_dst_segments = orig_op->nb_segments;
> + /*the result is not bit exact*/
> + int16_t thres_hold = 3;
> + int16_t delt, abs_delt;
> + uint32_t j, data_len_iq;
> + uint32_t error_num;
> + int8_t *ref_out;
> + int8_t *op_out;
> +
> + TEST_ASSERT(nb_dst_segments == m->nb_segs,
> + "Number of segments differ in original (%u) and filled (%u) op mldts",
> + nb_dst_segments, m->nb_segs);
> +
> + /* Due to size limition of mbuf, MLDTS doesn't use real mbuf. */
> + for (i = 0; i < nb_dst_segments; ++i) {
> + uint16_t offset = (i == 0) ? op->offset : 0;
> + uint32_t data_len = op->length;
> +
> + TEST_ASSERT(orig_op->segments[i].length == data_len,
> + "Length of segment differ in original (%u) and filled (%u) op mldts",
> + orig_op->segments[i].length, data_len);
> + data_len_iq = data_len;
> + ref_out = (int8_t *)(orig_op->segments[i].addr);
> + op_out = rte_pktmbuf_mtod_offset(m, int8_t *, offset),
> + error_num = 0;
> + for (j = 0; j < data_len_iq; j++) {
> +
> + delt = ref_out[j] - op_out[j];
> + abs_delt = delt > 0 ? delt : -delt;
> + error_num += (abs_delt > thres_hold ? 1 : 0);
> + if (error_num > 0)
> + printf("MLD Error %d: Exp %x %d Actual %x %d Diff %d\n",
> + j, ref_out[j], ref_out[j], op_out[j], op_out[j],
> + delt);
> + }
> + TEST_ASSERT(error_num == 0,
> + "MLDTS Output are not matched total (%u) errors (%u)",
> + data_len_iq, error_num);
> +
> + m = m->next;
> + }
> +
> + return TEST_SUCCESS;
> +}
> +
> static int
> validate_fft_op(struct rte_bbdev_fft_op **ops, const uint16_t n,
> struct rte_bbdev_fft_op *ref_op)
> @@ -2578,6 +2690,28 @@ validate_fft_op(struct rte_bbdev_fft_op **ops, const uint16_t n,
> return TEST_SUCCESS;
> }
>
> +static int
> +validate_mldts_op(struct rte_bbdev_mldts_op **ops, const uint16_t n,
> + struct rte_bbdev_mldts_op *ref_op)
> +{
> + unsigned int i;
> + int ret;
> + struct op_data_entries *mldts_data_orig =
> + &test_vector.entries[DATA_HARD_OUTPUT];
> + for (i = 0; i < n; ++i) {
> + ret = check_mldts_status_and_ordering(ops[i], i, ref_op->status);
> + TEST_ASSERT_SUCCESS(ret,
> + "Checking status and ordering for MLDTS failed");
> + TEST_ASSERT_SUCCESS(validate_op_mldts_chain(
> + &ops[i]->mldts.output,
> + mldts_data_orig),
> + "MLDTS Output buffers (op=%u) are not matched",
> + i);
> + }
> +
> + return TEST_SUCCESS;
> +}
> +
> static void
> create_reference_dec_op(struct rte_bbdev_dec_op *op)
> {
> @@ -2622,6 +2756,20 @@ create_reference_fft_op(struct rte_bbdev_fft_op *op)
> op->fft.base_input.length += entry->segments[i].length;
> }
>
> +static void
> +create_reference_mldts_op(struct rte_bbdev_mldts_op *op)
> +{
> + unsigned int i;
> + struct op_data_entries *entry;
> + op->mldts = test_vector.mldts;
> + entry = &test_vector.entries[DATA_INPUT];
> + for (i = 0; i < entry->nb_segments; ++i)
> + op->mldts.qhy_input.length += entry->segments[i].length;
> + entry = &test_vector.entries[DATA_HARQ_INPUT];
> + for (i = 0; i < entry->nb_segments; ++i)
> + op->mldts.r_input.length += entry->segments[i].length;
> +}
> +
> static void
> create_reference_enc_op(struct rte_bbdev_enc_op *op)
> {
> @@ -2730,6 +2878,14 @@ calc_fft_size(struct rte_bbdev_fft_op *op)
> return output_size;
> }
>
> +static uint32_t
> +calc_mldts_size(struct rte_bbdev_mldts_op *op)
> +{
> + uint32_t output_size;
> + output_size = op->mldts.num_layers * op->mldts.num_rbs * op->mldts.c_rep;
> + return output_size;
> +}
> +
> static int
> init_test_op_params(struct test_op_params *op_params,
> enum rte_bbdev_op_type op_type, const int expected_status,
> @@ -2744,6 +2900,9 @@ init_test_op_params(struct test_op_params *op_params,
> else if (op_type == RTE_BBDEV_OP_FFT)
> ret = rte_bbdev_fft_op_alloc_bulk(ops_mp,
> &op_params->ref_fft_op, 1);
> + else if (op_type == RTE_BBDEV_OP_MLDTS)
> + ret = rte_bbdev_mldts_op_alloc_bulk(ops_mp,
> + &op_params->ref_mldts_op, 1);
> else
> ret = rte_bbdev_enc_op_alloc_bulk(ops_mp,
> &op_params->ref_enc_op, 1);
> @@ -2763,6 +2922,8 @@ init_test_op_params(struct test_op_params *op_params,
> op_params->ref_enc_op->status = expected_status;
> else if (op_type == RTE_BBDEV_OP_FFT)
> op_params->ref_fft_op->status = expected_status;
> + else if (op_type == RTE_BBDEV_OP_MLDTS)
> + op_params->ref_mldts_op->status = expected_status;
> return 0;
> }
>
> @@ -2831,6 +2992,8 @@ run_test_case_on_device(test_case_function *test_case_func, uint8_t dev_id,
> create_reference_ldpc_dec_op(op_params->ref_dec_op);
> else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
> create_reference_fft_op(op_params->ref_fft_op);
> + else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
> + create_reference_mldts_op(op_params->ref_mldts_op);
>
> for (i = 0; i < ad->nb_queues; ++i) {
> f_ret = fill_queue_buffers(op_params,
> @@ -3047,6 +3210,11 @@ dequeue_event_callback(uint16_t dev_id,
> &tp->fft_ops[
> __atomic_load_n(&tp->nb_dequeued, __ATOMIC_RELAXED)],
> burst_sz);
> + else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
> + deq = rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
> + &tp->mldts_ops[
> + __atomic_load_n(&tp->nb_dequeued, __ATOMIC_RELAXED)],
> + burst_sz);
> else /*RTE_BBDEV_OP_TURBO_ENC*/
> deq = rte_bbdev_dequeue_enc_ops(dev_id, queue_id,
> &tp->enc_ops[
> @@ -3093,6 +3261,10 @@ dequeue_event_callback(uint16_t dev_id,
> struct rte_bbdev_fft_op *ref_op = tp->op_params->ref_fft_op;
> ret = validate_fft_op(tp->fft_ops, num_ops, ref_op);
> rte_bbdev_fft_op_free_bulk(tp->fft_ops, deq);
> + } else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS) {
> + struct rte_bbdev_mldts_op *ref_op = tp->op_params->ref_mldts_op;
> + ret = validate_mldts_op(tp->mldts_ops, num_ops, ref_op);
> + rte_bbdev_mldts_op_free_bulk(tp->mldts_ops, deq);
> } else if (test_vector.op_type == RTE_BBDEV_OP_LDPC_DEC) {
> struct rte_bbdev_dec_op *ref_op = tp->op_params->ref_dec_op;
> ret = validate_ldpc_dec_op(tp->dec_ops, num_ops, ref_op,
> @@ -3118,6 +3290,9 @@ dequeue_event_callback(uint16_t dev_id,
> case RTE_BBDEV_OP_FFT:
> tb_len_bits = calc_fft_size(tp->op_params->ref_fft_op);
> break;
> + case RTE_BBDEV_OP_MLDTS:
> + tb_len_bits = calc_mldts_size(tp->op_params->ref_mldts_op);
> + break;
> case RTE_BBDEV_OP_LDPC_ENC:
> tb_len_bits = calc_ldpc_enc_TB_size(tp->op_params->ref_enc_op);
> break;
> @@ -3593,6 +3768,88 @@ throughput_intr_lcore_fft(void *arg)
> return TEST_SUCCESS;
> }
>
> +static int
> +throughput_intr_lcore_mldts(void *arg)
> +{
> + struct thread_params *tp = arg;
> + unsigned int enqueued;
> + const uint16_t queue_id = tp->queue_id;
> + const uint16_t burst_sz = tp->op_params->burst_sz;
> + const uint16_t num_to_process = tp->op_params->num_to_process;
> + struct rte_bbdev_mldts_op *ops[num_to_process];
> + struct test_buffers *bufs = NULL;
> + struct rte_bbdev_info info;
> + int ret, i, j;
> + uint16_t num_to_enq, enq;
> +
> + TEST_ASSERT_SUCCESS((burst_sz > MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST);
> +
> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_intr_enable(tp->dev_id, queue_id),
> + "Failed to enable interrupts for dev: %u, queue_id: %u",
> + tp->dev_id, queue_id);
> +
> + rte_bbdev_info_get(tp->dev_id, &info);
> +
> + TEST_ASSERT_SUCCESS((num_to_process > info.drv.queue_size_lim),
> + "NUM_OPS cannot exceed %u for this device",
> + info.drv.queue_size_lim);
> +
> + bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id];
> +
> + __atomic_store_n(&tp->processing_status, 0, __ATOMIC_RELAXED);
> + __atomic_store_n(&tp->nb_dequeued, 0, __ATOMIC_RELAXED);
> +
> + rte_wait_until_equal_16(&tp->op_params->sync, SYNC_START, __ATOMIC_RELAXED);
> +
> + ret = rte_bbdev_mldts_op_alloc_bulk(tp->op_params->mp, ops, num_to_process);
> + TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", num_to_process);
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> + copy_reference_mldts_op(ops, num_to_process, 0, bufs->inputs, bufs->harq_inputs,
> + bufs->hard_outputs, tp->op_params->ref_mldts_op);
> +
> + /* Set counter to validate the ordering */
> + for (j = 0; j < num_to_process; ++j)
> + ops[j]->opaque_data = (void *)(uintptr_t)j;
> +
> + for (j = 0; j < TEST_REPETITIONS; ++j) {
> + for (i = 0; i < num_to_process; ++i)
> + mbuf_reset(ops[i]->mldts.output.data);
> +
> + tp->start_time = rte_rdtsc_precise();
> + for (enqueued = 0; enqueued < num_to_process;) {
> + num_to_enq = burst_sz;
> +
> + if (unlikely(num_to_process - enqueued < num_to_enq))
> + num_to_enq = num_to_process - enqueued;
> +
> + enq = 0;
> + do {
> + enq += rte_bbdev_enqueue_mldts_ops(tp->dev_id,
> + queue_id, &ops[enqueued], num_to_enq);
> + } while (unlikely(enq != num_to_enq));
> + enqueued += enq;
> +
> + /* Write to thread burst_sz current number of enqueued
> + * descriptors. It ensures that proper number of
> + * descriptors will be dequeued in callback
> + * function - needed for last batch in case where
> + * the number of operations is not a multiple of
> + * burst size.
> + */
> + __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
> +
> + /* Wait until processing of previous batch is
> + * completed
> + */
> + rte_wait_until_equal_16(&tp->nb_dequeued, enqueued, __ATOMIC_RELAXED);
> + }
> + if (j != TEST_REPETITIONS - 1)
> + __atomic_store_n(&tp->nb_dequeued, 0, __ATOMIC_RELAXED);
> + }
> +
> + return TEST_SUCCESS;
> +}
> +
> static int
> throughput_pmd_lcore_dec(void *arg)
> {
> @@ -4403,6 +4660,104 @@ throughput_pmd_lcore_fft(void *arg)
> return TEST_SUCCESS;
> }
>
> +static int
> +throughput_pmd_lcore_mldts(void *arg)
> +{
> + struct thread_params *tp = arg;
> + uint16_t enq, deq;
> + uint64_t total_time = 0, start_time;
> + const uint16_t queue_id = tp->queue_id;
> + const uint16_t burst_sz = tp->op_params->burst_sz;
> + const uint16_t num_ops = tp->op_params->num_to_process;
> + struct rte_bbdev_mldts_op *ops_enq[num_ops];
> + struct rte_bbdev_mldts_op *ops_deq[num_ops];
> + struct rte_bbdev_mldts_op *ref_op = tp->op_params->ref_mldts_op;
> + struct test_buffers *bufs = NULL;
> + int i, j, ret;
> + struct rte_bbdev_info info;
> + uint16_t num_to_enq;
> +
> + TEST_ASSERT_SUCCESS((burst_sz > MAX_BURST), "BURST_SIZE should be <= %u", MAX_BURST);
> +
> + rte_bbdev_info_get(tp->dev_id, &info);
> +
> + TEST_ASSERT_SUCCESS((num_ops > info.drv.queue_size_lim),
> + "NUM_OPS cannot exceed %u for this device",
> + info.drv.queue_size_lim);
> +
> + bufs = &tp->op_params->q_bufs[GET_SOCKET(info.socket_id)][queue_id];
> +
> + rte_wait_until_equal_16(&tp->op_params->sync, SYNC_START, __ATOMIC_RELAXED);
> +
> + ret = rte_bbdev_mldts_op_alloc_bulk(tp->op_params->mp, ops_enq, num_ops);
> + TEST_ASSERT_SUCCESS(ret, "Allocation failed for %d ops", num_ops);
> +
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> + copy_reference_mldts_op(ops_enq, num_ops, 0, bufs->inputs, bufs->harq_inputs,
> + bufs->hard_outputs, ref_op);
> +
> + /* Set counter to validate the ordering */
> + for (j = 0; j < num_ops; ++j)
> + ops_enq[j]->opaque_data = (void *)(uintptr_t)j;
> +
> + for (i = 0; i < TEST_REPETITIONS; ++i) {
> + uint32_t time_out = 0;
> + for (j = 0; j < num_ops; ++j)
> + mbuf_reset(ops_enq[j]->mldts.output.data);
> +
> + start_time = rte_rdtsc_precise();
> +
> + for (enq = 0, deq = 0; enq < num_ops;) {
> + num_to_enq = burst_sz;
> +
> + if (unlikely(num_ops - enq < num_to_enq))
> + num_to_enq = num_ops - enq;
> +
> + enq += rte_bbdev_enqueue_mldts_ops(tp->dev_id,
> + queue_id, &ops_enq[enq], num_to_enq);
> +
> + deq += rte_bbdev_dequeue_mldts_ops(tp->dev_id,
> + queue_id, &ops_deq[deq], enq - deq);
> + time_out++;
> + if (time_out >= TIME_OUT_POLL) {
> + timeout_exit(tp->dev_id);
> + TEST_ASSERT_SUCCESS(TEST_FAILED, "Enqueue timeout!");
> + }
> + }
> +
> + /* dequeue the remaining */
> + time_out = 0;
> + while (deq < enq) {
> + deq += rte_bbdev_dequeue_mldts_ops(tp->dev_id,
> + queue_id, &ops_deq[deq], enq - deq);
> + time_out++;
> + if (time_out >= TIME_OUT_POLL) {
> + timeout_exit(tp->dev_id);
> + TEST_ASSERT_SUCCESS(TEST_FAILED, "Dequeue timeout!");
> + }
> + }
> +
> + total_time += rte_rdtsc_precise() - start_time;
> + }
> +
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE) {
> + ret = validate_mldts_op(ops_deq, num_ops, ref_op);
> + TEST_ASSERT_SUCCESS(ret, "Validation failed!");
> + }
> +
> + rte_bbdev_mldts_op_free_bulk(ops_enq, num_ops);
> +
> + double tb_len_bits = calc_mldts_size(ref_op);
> +
> + tp->ops_per_sec = ((double)num_ops * TEST_REPETITIONS) /
> + ((double)total_time / (double)rte_get_tsc_hz());
> + tp->mbps = (((double)(num_ops * TEST_REPETITIONS * tb_len_bits)) /
> + 1000000.0) / ((double)total_time /
> + (double)rte_get_tsc_hz());
> +
> + return TEST_SUCCESS;
> +}
> +
> static void
> print_enc_throughput(struct thread_params *t_params, unsigned int used_cores)
> {
> @@ -4624,6 +4979,8 @@ throughput_test(struct active_device *ad,
> throughput_function = throughput_intr_lcore_ldpc_enc;
> else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
> throughput_function = throughput_intr_lcore_fft;
> + else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
> + throughput_function = throughput_intr_lcore_mldts;
> else
> throughput_function = throughput_intr_lcore_enc;
>
> @@ -4646,6 +5003,8 @@ throughput_test(struct active_device *ad,
> throughput_function = throughput_pmd_lcore_ldpc_enc;
> else if (test_vector.op_type == RTE_BBDEV_OP_FFT)
> throughput_function = throughput_pmd_lcore_fft;
> + else if (test_vector.op_type == RTE_BBDEV_OP_MLDTS)
> + throughput_function = throughput_pmd_lcore_mldts;
> else
> throughput_function = throughput_pmd_lcore_enc;
> }
> @@ -5139,6 +5498,77 @@ latency_test_fft(struct rte_mempool *mempool,
> return i;
> }
>
> +static int
> +latency_test_mldts(struct rte_mempool *mempool,
> + struct test_buffers *bufs, struct rte_bbdev_mldts_op *ref_op,
> + uint16_t dev_id, uint16_t queue_id,
> + const uint16_t num_to_process, uint16_t burst_sz,
> + uint64_t *total_time, uint64_t *min_time, uint64_t *max_time)
> +{
> + int ret = TEST_SUCCESS;
> + uint16_t i, j, dequeued;
> + struct rte_bbdev_mldts_op *ops_enq[MAX_BURST], *ops_deq[MAX_BURST];
> + uint64_t start_time = 0, last_time = 0;
> +
> + for (i = 0, dequeued = 0; dequeued < num_to_process; ++i) {
> + uint16_t enq = 0, deq = 0;
> + uint32_t time_out = 0;
> + bool first_time = true;
> + last_time = 0;
> +
> + if (unlikely(num_to_process - dequeued < burst_sz))
> + burst_sz = num_to_process - dequeued;
> +
> + ret = rte_bbdev_mldts_op_alloc_bulk(mempool, ops_enq, burst_sz);
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_mldts_op_alloc_bulk() failed");
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> + copy_reference_mldts_op(ops_enq, burst_sz, dequeued,
> + bufs->inputs, bufs->harq_inputs,
> + bufs->hard_outputs,
> + ref_op);
> +
> + /* Set counter to validate the ordering */
> + for (j = 0; j < burst_sz; ++j)
> + ops_enq[j]->opaque_data = (void *)(uintptr_t)j;
> +
> + start_time = rte_rdtsc_precise();
> +
> + enq = rte_bbdev_enqueue_mldts_ops(dev_id, queue_id, &ops_enq[enq], burst_sz);
> + TEST_ASSERT(enq == burst_sz,
> + "Error enqueueing burst, expected %u, got %u",
> + burst_sz, enq);
> +
> + /* Dequeue */
> + do {
> + deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
> + &ops_deq[deq], burst_sz - deq);
> + if (likely(first_time && (deq > 0))) {
> + last_time += rte_rdtsc_precise() - start_time;
> + first_time = false;
> + }
> + time_out++;
> + if (time_out >= TIME_OUT_POLL) {
> + timeout_exit(dev_id);
> + TEST_ASSERT_SUCCESS(TEST_FAILED, "Dequeue timeout!");
> + }
> + } while (unlikely(burst_sz != deq));
> +
> + *max_time = RTE_MAX(*max_time, last_time);
> + *min_time = RTE_MIN(*min_time, last_time);
> + *total_time += last_time;
> +
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE) {
> + ret = validate_mldts_op(ops_deq, burst_sz, ref_op);
> + TEST_ASSERT_SUCCESS(ret, "Validation failed!");
> + }
> +
> + rte_bbdev_mldts_op_free_bulk(ops_enq, deq);
> + dequeued += deq;
> + }
> +
> + return i;
> +}
> +
> /* Common function for running validation and latency test cases */
> static int
> validation_latency_test(struct active_device *ad,
> @@ -5196,6 +5626,12 @@ validation_latency_test(struct active_device *ad,
> ad->dev_id, queue_id,
> num_to_process, burst_sz, &total_time,
> &min_time, &max_time);
> + else if (op_type == RTE_BBDEV_OP_MLDTS)
> + iter = latency_test_mldts(op_params->mp, bufs,
> + op_params->ref_mldts_op,
> + ad->dev_id, queue_id,
> + num_to_process, burst_sz, &total_time,
> + &min_time, &max_time);
> else /* RTE_BBDEV_OP_TURBO_ENC */
> iter = latency_test_enc(op_params->mp, bufs,
> op_params->ref_enc_op,
> @@ -5337,6 +5773,85 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
> return i;
> }
>
> +static int
> +offload_latency_test_mldts(struct rte_mempool *mempool, struct test_buffers *bufs,
> + struct rte_bbdev_mldts_op *ref_op, uint16_t dev_id,
> + uint16_t queue_id, const uint16_t num_to_process,
> + uint16_t burst_sz, struct test_time_stats *time_st)
> +{
> + int i, dequeued, ret;
> + struct rte_bbdev_mldts_op *ops_enq[MAX_BURST], *ops_deq[MAX_BURST];
> + uint64_t enq_start_time, deq_start_time;
> + uint64_t enq_sw_last_time, deq_last_time;
> + struct rte_bbdev_stats stats;
> +
> + for (i = 0, dequeued = 0; dequeued < num_to_process; ++i) {
> + uint16_t enq = 0, deq = 0;
> +
> + if (unlikely(num_to_process - dequeued < burst_sz))
> + burst_sz = num_to_process - dequeued;
> +
> + ret = rte_bbdev_mldts_op_alloc_bulk(mempool, ops_enq, burst_sz);
> + TEST_ASSERT_SUCCESS(ret, "rte_bbdev_mldts_op_alloc_bulk() failed");
> + if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> + copy_reference_mldts_op(ops_enq, burst_sz, dequeued,
> + bufs->inputs, bufs->harq_inputs,
> + bufs->hard_outputs,
> + ref_op);
> +
> + /* Start time meas for enqueue function offload latency */
> + enq_start_time = rte_rdtsc_precise();
> + do {
> + enq += rte_bbdev_enqueue_mldts_ops(dev_id, queue_id,
> + &ops_enq[enq], burst_sz - enq);
> + } while (unlikely(burst_sz != enq));
> +
> + ret = get_bbdev_queue_stats(dev_id, queue_id, &stats);
> + TEST_ASSERT_SUCCESS(ret,
> + "Failed to get stats for queue (%u) of device (%u)",
> + queue_id, dev_id);
> +
> + enq_sw_last_time = rte_rdtsc_precise() - enq_start_time -
> + stats.acc_offload_cycles;
> + time_st->enq_sw_max_time = RTE_MAX(time_st->enq_sw_max_time,
> + enq_sw_last_time);
> + time_st->enq_sw_min_time = RTE_MIN(time_st->enq_sw_min_time,
> + enq_sw_last_time);
> + time_st->enq_sw_total_time += enq_sw_last_time;
> +
> + time_st->enq_acc_max_time = RTE_MAX(time_st->enq_acc_max_time,
> + stats.acc_offload_cycles);
> + time_st->enq_acc_min_time = RTE_MIN(time_st->enq_acc_min_time,
> + stats.acc_offload_cycles);
> + time_st->enq_acc_total_time += stats.acc_offload_cycles;
> +
> + /* give time for device to process ops */
> + rte_delay_us(WAIT_OFFLOAD_US);
> +
> + /* Start time meas for dequeue function offload latency */
> + deq_start_time = rte_rdtsc_precise();
> + /* Dequeue one operation */
> + do {
> + deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id, &ops_deq[deq], enq);
> + } while (unlikely(deq == 0));
> +
> + deq_last_time = rte_rdtsc_precise() - deq_start_time;
> + time_st->deq_max_time = RTE_MAX(time_st->deq_max_time, deq_last_time);
> + time_st->deq_min_time = RTE_MIN(time_st->deq_min_time, deq_last_time);
> + time_st->deq_total_time += deq_last_time;
> +
> + /* Dequeue remaining operations if needed*/
> + while (burst_sz != deq)
> + deq += rte_bbdev_dequeue_mldts_ops(dev_id, queue_id,
> + &ops_deq[deq], burst_sz - deq);
> +
> + rte_bbdev_mldts_op_free_bulk(ops_enq, deq);
> + dequeued += deq;
> + }
> +
> + return i;
> +}
> +
> static int
> offload_latency_test_dec(struct rte_mempool *mempool, struct test_buffers *bufs,
> struct rte_bbdev_dec_op *ref_op, uint16_t dev_id,
> @@ -5734,6 +6249,10 @@ offload_cost_test(struct active_device *ad,
> iter = offload_latency_test_fft(op_params->mp, bufs,
> op_params->ref_fft_op, ad->dev_id, queue_id,
> num_to_process, burst_sz, &time_st);
> + else if (op_type == RTE_BBDEV_OP_MLDTS)
> + iter = offload_latency_test_mldts(op_params->mp, bufs,
> + op_params->ref_mldts_op, ad->dev_id, queue_id,
> + num_to_process, burst_sz, &time_st);
> else
> iter = offload_latency_test_enc(op_params->mp, bufs,
> op_params->ref_enc_op, ad->dev_id, queue_id,
> diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
> index 0ef1481f2af3..8f464db83882 100644
> --- a/app/test-bbdev/test_bbdev_vector.c
> +++ b/app/test-bbdev/test_bbdev_vector.c
> @@ -244,6 +244,20 @@ op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
> return 0;
> }
>
> +/* convert MLD flag from string to unsigned long int*/
> +static int
> +op_mld_flag_strtoul(char *token, uint32_t *op_flag_value)
> +{
> + if (!strcmp(token, "RTE_BBDEV_MLDTS_REP"))
> + *op_flag_value = RTE_BBDEV_MLDTS_REP;
> + else {
> + printf("The given value is not a MLD flag\n");
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> /* convert turbo encoder flag from string to unsigned long int*/
> static int
> op_encoder_flag_strtoul(char *token, uint32_t *op_flag_value)
> @@ -326,6 +340,10 @@ parse_turbo_flags(char *tokens, uint32_t *op_flags,
> if (op_fft_flag_strtoul(tok, &op_flag_value)
> == -1)
> return -1;
> + } else if (op_type == RTE_BBDEV_OP_MLDTS) {
> + if (op_mld_flag_strtoul(tok, &op_flag_value)
> + == -1)
> + return -1;
> } else {
> return -1;
> }
> @@ -355,6 +373,8 @@ op_turbo_type_strtol(char *token, enum rte_bbdev_op_type *op_type)
> *op_type = RTE_BBDEV_OP_LDPC_DEC;
> else if (!strcmp(token, "RTE_BBDEV_OP_FFT"))
> *op_type = RTE_BBDEV_OP_FFT;
> + else if (!strcmp(token, "RTE_BBDEV_OP_MLDTS"))
> + *op_type = RTE_BBDEV_OP_MLDTS;
> else if (!strcmp(token, "RTE_BBDEV_OP_NONE"))
> *op_type = RTE_BBDEV_OP_NONE;
> else {
> @@ -992,6 +1012,73 @@ parse_fft_params(const char *key_token, char *token,
> return 0;
> }
>
> +/* parses MLD parameters and assigns to global variable */
> +static int
> +parse_mld_params(const char *key_token, char *token,
> + struct test_bbdev_vector *vector)
> +{
> + int ret = 0, status = 0;
> + uint32_t op_flags = 0;
> + char *err = NULL;
> +
> + struct rte_bbdev_op_mldts *mld = &vector->mldts;
> +
> + if (starts_with(key_token, "qhy_input")) {
> + ret = parse_data_entry(key_token, token, vector,
> + DATA_INPUT, "qhy_input");
> + } else if (starts_with(key_token, "r_input")) {
> + ret = parse_data_entry(key_token, token, vector,
> + DATA_HARQ_INPUT, "r_input");
> + } else if (starts_with(key_token, "output")) {
> + ret = parse_data_entry(key_token, token, vector,
> + DATA_HARD_OUTPUT, "output");
> + } else if (!strcmp(key_token, "layers")) {
> + mld->num_layers = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "layer1")) {
> + mld->q_m[0] = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "layer2")) {
> + mld->q_m[1] = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "layer3")) {
> + mld->q_m[2] = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "layer4")) {
> + mld->q_m[3] = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "crep")) {
> + mld->c_rep = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "rrep")) {
> + mld->r_rep = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "rbs")) {
> + mld->num_rbs = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "op_flags")) {
> + vector->mask |= TEST_BBDEV_VF_OP_FLAGS;
> + ret = parse_turbo_flags(token, &op_flags, vector->op_type);
> + if (!ret)
> + mld->op_flags = op_flags;
> + } else if (!strcmp(key_token, "expected_status")) {
> + vector->mask |= TEST_BBDEV_VF_EXPECTED_STATUS;
> + ret = parse_expected_status(token, &status, vector->op_type);
> + if (!ret)
> + vector->expected_status = status;
> + } else {
> + printf("Not valid mld key: '%s'\n", key_token);
> + return -1;
> + }
> +
> + if (ret != 0) {
> + printf("Failed with convert '%s\t%s'\n", key_token, token);
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> /* checks the type of key and assigns data */
> static int
> parse_entry(char *entry, struct test_bbdev_vector *vector)
> @@ -1046,6 +1133,9 @@ parse_entry(char *entry, struct test_bbdev_vector *vector)
> } else if (vector->op_type == RTE_BBDEV_OP_FFT) {
> if (parse_fft_params(key_token, token, vector) == -1)
> return -1;
> + } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) {
> + if (parse_mld_params(key_token, token, vector) == -1)
> + return -1;
> }
>
> return 0;
> @@ -1132,6 +1222,25 @@ check_fft_segments(struct test_bbdev_vector *vector)
> return 0;
> }
>
> +static int
> +check_mld_segments(struct test_bbdev_vector *vector)
> +{
> + unsigned char i;
> +
> + for (i = 0; i < vector->entries[DATA_INPUT].nb_segments; i++)
> + if (vector->entries[DATA_INPUT].segments[i].addr == NULL)
> + return -1;
> +
> + for (i = 0; i < vector->entries[DATA_HARQ_INPUT].nb_segments; i++)
> + if (vector->entries[DATA_HARQ_INPUT].segments[i].addr == NULL)
> + return -1;
> +
> + for (i = 0; i < vector->entries[DATA_HARD_OUTPUT].nb_segments; i++)
> + if (vector->entries[DATA_HARD_OUTPUT].segments[i].addr == NULL)
> + return -1;
> + return 0;
> +}
> +
> static int
> check_decoder_llr_spec(struct test_bbdev_vector *vector)
> {
> @@ -1359,6 +1468,26 @@ check_fft(struct test_bbdev_vector *vector)
> return 0;
> }
>
> +/* checks mld parameters */
> +static int
> +check_mld(struct test_bbdev_vector *vector)
> +{
> + const int mask = vector->mask;
> +
> + if (check_mld_segments(vector) < 0)
> + return -1;
> +
> + /* Check which params were set */
> + if (!(mask & TEST_BBDEV_VF_OP_FLAGS)) {
> + printf(
> + "WARNING: op_flags was not specified in vector file and capabilities will not be validated\n");
> + }
> + if (!(mask & TEST_BBDEV_VF_EXPECTED_STATUS))
> + printf(
> + "WARNING: expected_status was not specified in vector file and will be set to 0\n");
> + return 0;
> +}
> +
> /* checks encoder parameters */
> static int
> check_encoder(struct test_bbdev_vector *vector)
> @@ -1520,6 +1649,9 @@ bbdev_check_vector(struct test_bbdev_vector *vector)
> } else if (vector->op_type == RTE_BBDEV_OP_FFT) {
> if (check_fft(vector) == -1)
> return -1;
> + } else if (vector->op_type == RTE_BBDEV_OP_MLDTS) {
> + if (check_mld(vector) == -1)
> + return -1;
> } else if (vector->op_type != RTE_BBDEV_OP_NONE) {
> printf("Vector was not filled\n");
> return -1;
> diff --git a/app/test-bbdev/test_bbdev_vector.h b/app/test-bbdev/test_bbdev_vector.h
> index 2ea271ffb78b..14b8ef2764ad 100644
> --- a/app/test-bbdev/test_bbdev_vector.h
> +++ b/app/test-bbdev/test_bbdev_vector.h
> @@ -65,6 +65,7 @@ struct test_bbdev_vector {
> struct rte_bbdev_op_ldpc_dec ldpc_dec;
> struct rte_bbdev_op_ldpc_enc ldpc_enc;
> struct rte_bbdev_op_fft fft;
> + struct rte_bbdev_op_mldts mldts;
> };
> /* Additional storage for op data entries */
> struct op_data_entries entries[DATA_NUM_TYPES];
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 10/11] test/bbdev: support new FFT capabilities
2023-09-29 18:13 ` [PATCH v1 10/11] test/bbdev: support new FFT capabilities Hernan Vargas
@ 2023-10-17 20:06 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 20:06 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Adding support to test new FFT capabilities.
> Optional frequency domain dewindowing, frequency resampling,
> timing error correction and time offset per CS.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_perf.c | 26 ++++++++++---
> app/test-bbdev/test_bbdev_vector.c | 61 ++++++++++++++++++++++++++++--
> 2 files changed, 78 insertions(+), 9 deletions(-)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 8a349fdb03d5..82deb9b1b4b9 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -864,6 +864,7 @@ add_bbdev_dev(uint8_t dev_id, struct rte_bbdev_info *info,
> conf.q_fft.num_qgroups = VRB_QMGR_NUM_QGS;
> conf.q_fft.first_qgroup_index = VRB_QMGR_INVALID_IDX;
> conf.q_fft.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
> + conf.q_fft.aq_depth_log2 = VRB_QMGR_AQ_DEPTH;
> conf.q_mld.num_qgroups = VRB_QMGR_NUM_QGS;
> conf.q_mld.first_qgroup_index = VRB_QMGR_INVALID_IDX;
> conf.q_mld.num_aqs_per_groups = VRB_QMGR_NUM_AQS;
> @@ -1970,7 +1971,7 @@ static void
> copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
> unsigned int start_idx, struct rte_bbdev_op_data *inputs,
> struct rte_bbdev_op_data *outputs, struct rte_bbdev_op_data *pwrouts,
> - struct rte_bbdev_fft_op *ref_op)
> + struct rte_bbdev_op_data *win_inputs, struct rte_bbdev_fft_op *ref_op)
> {
> unsigned int i, j;
> struct rte_bbdev_op_fft *fft = &ref_op->fft;
> @@ -1982,6 +1983,11 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
> fft->output_leading_depadding;
> for (j = 0; j < RTE_BBDEV_MAX_CS_2; j++)
> ops[i]->fft.window_index[j] = fft->window_index[j];
> + for (j = 0; j < RTE_BBDEV_MAX_CS; j++) {
> + ops[i]->fft.cs_theta_0[j] = fft->cs_theta_0[j];
> + ops[i]->fft.cs_theta_d[j] = fft->cs_theta_d[j];
> + ops[i]->fft.time_offset[j] = fft->time_offset[j];
> + }
> ops[i]->fft.cs_bitmap = fft->cs_bitmap;
> ops[i]->fft.num_antennas_log2 = fft->num_antennas_log2;
> ops[i]->fft.idft_log2 = fft->idft_log2;
> @@ -1992,8 +1998,12 @@ copy_reference_fft_op(struct rte_bbdev_fft_op **ops, unsigned int n,
> ops[i]->fft.ncs_reciprocal = fft->ncs_reciprocal;
> ops[i]->fft.power_shift = fft->power_shift;
> ops[i]->fft.fp16_exp_adjust = fft->fp16_exp_adjust;
> + ops[i]->fft.output_depadded_size = fft->output_depadded_size;
> + ops[i]->fft.freq_resample_mode = fft->freq_resample_mode;
> ops[i]->fft.base_output = outputs[start_idx + i];
> ops[i]->fft.base_input = inputs[start_idx + i];
> + if (win_inputs != NULL)
> + ops[i]->fft.dewindowing_input = win_inputs[start_idx + i];
> if (pwrouts != NULL)
> ops[i]->fft.power_meas_output = pwrouts[start_idx + i];
> ops[i]->fft.op_flags = fft->op_flags;
> @@ -2575,7 +2585,7 @@ validate_op_fft_chain(struct rte_bbdev_op_data *op, struct op_data_entries *orig
> {
> struct rte_mbuf *m = op->data;
> uint8_t i, nb_dst_segments = orig_op->nb_segments;
> - int16_t delt, abs_delt, thres_hold = 3;
> + int16_t delt, abs_delt, thres_hold = 4;
> uint32_t j, data_len_iq, error_num;
> int16_t *ref_out, *op_out;
>
> @@ -2754,6 +2764,9 @@ create_reference_fft_op(struct rte_bbdev_fft_op *op)
> entry = &test_vector.entries[DATA_INPUT];
> for (i = 0; i < entry->nb_segments; ++i)
> op->fft.base_input.length += entry->segments[i].length;
> + entry = &test_vector.entries[DATA_HARQ_INPUT];
> + for (i = 0; i < entry->nb_segments; ++i)
> + op->fft.dewindowing_input.length += entry->segments[i].length;
> }
>
> static void
> @@ -3722,7 +3735,8 @@ throughput_intr_lcore_fft(void *arg)
> num_to_process);
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_fft_op(ops, num_to_process, 0, bufs->inputs,
> - bufs->hard_outputs, bufs->soft_outputs, tp->op_params->ref_fft_op);
> + bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
> + tp->op_params->ref_fft_op);
>
> /* Set counter to validate the ordering */
> for (j = 0; j < num_to_process; ++j)
> @@ -4596,7 +4610,7 @@ throughput_pmd_lcore_fft(void *arg)
>
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_fft_op(ops_enq, num_ops, 0, bufs->inputs,
> - bufs->hard_outputs, bufs->soft_outputs, ref_op);
> + bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs, ref_op);
>
> /* Set counter to validate the ordering */
> for (j = 0; j < num_ops; ++j)
> @@ -5452,7 +5466,7 @@ latency_test_fft(struct rte_mempool *mempool,
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_fft_op(ops_enq, burst_sz, dequeued,
> bufs->inputs,
> - bufs->hard_outputs, bufs->soft_outputs,
> + bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
> ref_op);
>
> /* Set counter to validate the ordering */
> @@ -5714,7 +5728,7 @@ offload_latency_test_fft(struct rte_mempool *mempool, struct test_buffers *bufs,
> if (test_vector.op_type != RTE_BBDEV_OP_NONE)
> copy_reference_fft_op(ops_enq, burst_sz, dequeued,
> bufs->inputs,
> - bufs->hard_outputs, bufs->soft_outputs,
> + bufs->hard_outputs, bufs->soft_outputs, bufs->harq_inputs,
> ref_op);
>
> /* Start time meas for enqueue function offload latency */
> diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
> index 8f464db83882..56b882533cda 100644
> --- a/app/test-bbdev/test_bbdev_vector.c
> +++ b/app/test-bbdev/test_bbdev_vector.c
> @@ -215,7 +215,6 @@ op_ldpc_decoder_flag_strtoul(char *token, uint32_t *op_flag_value)
> return 0;
> }
>
> -
> /* Convert FFT flag from string to unsigned long int. */
> static int
> op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
> @@ -236,6 +235,14 @@ op_fft_flag_strtoul(char *token, uint32_t *op_flag_value)
> *op_flag_value = RTE_BBDEV_FFT_FP16_INPUT;
> else if (!strcmp(token, "RTE_BBDEV_FFT_FP16_OUTPUT"))
> *op_flag_value = RTE_BBDEV_FFT_FP16_OUTPUT;
> + else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS"))
> + *op_flag_value = RTE_BBDEV_FFT_TIMING_OFFSET_PER_CS;
> + else if (!strcmp(token, "RTE_BBDEV_FFT_TIMING_ERROR"))
> + *op_flag_value = RTE_BBDEV_FFT_TIMING_ERROR;
> + else if (!strcmp(token, "RTE_BBDEV_FFT_DEWINDOWING"))
> + *op_flag_value = RTE_BBDEV_FFT_DEWINDOWING;
> + else if (!strcmp(token, "RTE_BBDEV_FFT_FREQ_RESAMPLING"))
> + *op_flag_value = RTE_BBDEV_FFT_FREQ_RESAMPLING;
> else {
> printf("The given value is not a FFT flag\n");
> return -1;
> @@ -907,8 +914,7 @@ parse_ldpc_decoder_params(const char *key_token, char *token,
> return 0;
> }
>
> -
> -/* Parse FFT parameters and assigns to global variable. */
> +/* Parses FFT parameters and assigns to global variable. */
> static int
> parse_fft_params(const char *key_token, char *token,
> struct test_bbdev_vector *vector)
> @@ -923,6 +929,10 @@ parse_fft_params(const char *key_token, char *token,
> ret = parse_data_entry(key_token, token, vector,
> DATA_INPUT,
> op_data_prefixes[DATA_INPUT]);
> + } else if (starts_with(key_token, "dewin_input")) {
> + ret = parse_data_entry(key_token, token, vector,
> + DATA_HARQ_INPUT,
> + "dewin_input");
> } else if (starts_with(key_token, "output")) {
> ret = parse_data_entry(key_token, token, vector,
> DATA_HARD_OUTPUT,
> @@ -989,6 +999,51 @@ parse_fft_params(const char *key_token, char *token,
> fft->fp16_exp_adjust = (uint32_t) strtoul(token, &err, 0);
> printf("%d\n", fft->fp16_exp_adjust);
> ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "freq_resample_mode")) {
> + fft->freq_resample_mode = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "out_depadded_size")) {
> + fft->output_depadded_size = (uint32_t) strtoul(token, &err, 0);
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "cs_theta_0")) {
> + tok = strtok(token, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + for (i = 0; i < FFT_WIN_SIZE; i++) {
> + fft->cs_theta_0[i] = (uint32_t) strtoul(tok, &err, 0);
> + if (i < (FFT_WIN_SIZE - 1)) {
> + tok = strtok(NULL, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + }
> + }
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "cs_theta_d")) {
> + tok = strtok(token, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + for (i = 0; i < FFT_WIN_SIZE; i++) {
> + fft->cs_theta_d[i] = (uint32_t) strtoul(tok, &err, 0);
> + if (i < (FFT_WIN_SIZE - 1)) {
> + tok = strtok(NULL, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + }
> + }
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> + } else if (!strcmp(key_token, "time_offset")) {
> + tok = strtok(token, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + for (i = 0; i < FFT_WIN_SIZE; i++) {
> + fft->time_offset[i] = (uint32_t) strtoul(tok, &err, 0);
> + if (i < (FFT_WIN_SIZE - 1)) {
> + tok = strtok(NULL, VALUE_DELIMITER);
> + if (tok == NULL)
> + return -1;
> + }
> + }
> + ret = ((err == NULL) || (*err != '\0')) ? -1 : 0;
> } else if (!strcmp(key_token, "op_flags")) {
> vector->mask |= TEST_BBDEV_VF_OP_FLAGS;
> ret = parse_turbo_flags(token, &op_flags, vector->op_type);
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression
2023-09-29 18:13 ` [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression Hernan Vargas
@ 2023-10-17 20:08 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-17 20:08 UTC (permalink / raw)
To: Hernan Vargas, dev, gakhil, trix; +Cc: nicolas.chautru, qi.z.zhang
On 9/29/23 20:13, Hernan Vargas wrote:
> Add support to test LDPC UL operation for new capability.
> Option to compress HARQ memory to 4 bits per LLR.
>
> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> ---
> app/test-bbdev/test_bbdev_perf.c | 3 ++-
> app/test-bbdev/test_bbdev_vector.c | 2 ++
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 82deb9b1b4b9..149c7a1f504c 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -2240,7 +2240,8 @@ validate_op_harq_chain(struct rte_bbdev_op_data *op,
>
> /* Cannot compare HARQ output data for such cases */
> if ((ldpc_llr_decimals > 1) && ((ops_ld->op_flags & RTE_BBDEV_LDPC_LLR_COMPRESSION)
> - || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION)))
> + || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION)
> + || (ops_ld->op_flags & RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION)))
> break;
>
> if (!(ldpc_cap_flags &
> diff --git a/app/test-bbdev/test_bbdev_vector.c b/app/test-bbdev/test_bbdev_vector.c
> index 56b882533cda..42fa630041e9 100644
> --- a/app/test-bbdev/test_bbdev_vector.c
> +++ b/app/test-bbdev/test_bbdev_vector.c
> @@ -196,6 +196,8 @@ op_ldpc_decoder_flag_strtoul(char *token, uint32_t *op_flag_value)
> *op_flag_value = RTE_BBDEV_LDPC_DEC_SCATTER_GATHER;
> else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION"))
> *op_flag_value = RTE_BBDEV_LDPC_HARQ_6BIT_COMPRESSION;
> + else if (!strcmp(token, "RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION"))
> + *op_flag_value = RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION;
> else if (!strcmp(token, "RTE_BBDEV_LDPC_LLR_COMPRESSION"))
> *op_flag_value = RTE_BBDEV_LDPC_LLR_COMPRESSION;
> else if (!strcmp(token,
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-17 19:43 ` Maxime Coquelin
@ 2023-10-19 8:41 ` Chautru, Nicolas
2023-10-19 8:47 ` Maxime Coquelin
0 siblings, 1 reply; 37+ messages in thread
From: Chautru, Nicolas @ 2023-10-19 8:41 UTC (permalink / raw)
To: Maxime Coquelin, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
Hi Maxime,
Do we really want to make these kind of changes on to the stable release, it tends to artificially increase the amount of churn on the stable release which can be counterproductive for such changes which don't add much value if any to user/developper.
Happy to follow your suggestion but a general feedback is lack of appetite for very large amount of changes in stable patches which inhibit adoption, so would expect to put things there that we would genuinely flag as a bug.
Kindly share your thoughts.
Thanks
Nic
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Tuesday, October 17, 2023 9:43 PM
> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>
> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
>
>
>
> On 9/29/23 20:13, Hernan Vargas wrote:
> > Stop test if rte_bbdev_queue_configure fails to configure queue.
> >
> > Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> > ---
> > app/test-bbdev/test_bbdev.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/app/test-bbdev/test_bbdev.c b/app/test-bbdev/test_bbdev.c
> > index 65805977aead..cf224dca5d04 100644
> > --- a/app/test-bbdev/test_bbdev.c
> > +++ b/app/test-bbdev/test_bbdev.c
> > @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
> > * - queue should be started if deferred_start ==
> > */
> > ts_params->qconf.deferred_start = 0;
> > - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
> > + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
> &ts_params->qconf),
> > + "Failed test for rte_bbdev_queue_configure");
> > rte_bbdev_start(dev_id);
> >
> > TEST_ASSERT_SUCCESS(return_value =
> rte_bbdev_queue_info_get(dev_id,
>
> If should be a fix IMO.
> With fixes tag added and stable cc'ed:
>
> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>
> Thanks,
> Maxime
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-19 8:41 ` Chautru, Nicolas
@ 2023-10-19 8:47 ` Maxime Coquelin
2023-10-19 12:12 ` Chautru, Nicolas
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-19 8:47 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
Hi Nicolas,
On 10/19/23 10:41, Chautru, Nicolas wrote:
> Hi Maxime,
>
> Do we really want to make these kind of changes on to the stable release, it tends to artificially increase the amount of churn on the stable release which can be counterproductive for such changes which don't add much value if any to user/developper.
> Happy to follow your suggestion but a general feedback is lack of appetite for very large amount of changes in stable patches which inhibit adoption, so would expect to put things there that we would genuinely flag as a bug.
> Kindly share your thoughts.
Checking for configuration failure in a test application is quite useful
in my opinion, as it can help catching regressions, isn't it?
Maxime
> Thanks
> Nic
>
>
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Tuesday, October 17, 2023 9:43 PM
>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>> <qi.z.zhang@intel.com>
>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
>>
>>
>>
>> On 9/29/23 20:13, Hernan Vargas wrote:
>>> Stop test if rte_bbdev_queue_configure fails to configure queue.
>>>
>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>> ---
>>> app/test-bbdev/test_bbdev.c | 3 ++-
>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/app/test-bbdev/test_bbdev.c b/app/test-bbdev/test_bbdev.c
>>> index 65805977aead..cf224dca5d04 100644
>>> --- a/app/test-bbdev/test_bbdev.c
>>> +++ b/app/test-bbdev/test_bbdev.c
>>> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
>>> * - queue should be started if deferred_start ==
>>> */
>>> ts_params->qconf.deferred_start = 0;
>>> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
>>> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
>> &ts_params->qconf),
>>> + "Failed test for rte_bbdev_queue_configure");
>>> rte_bbdev_start(dev_id);
>>>
>>> TEST_ASSERT_SUCCESS(return_value =
>> rte_bbdev_queue_info_get(dev_id,
>>
>> If should be a fix IMO.
>> With fixes tag added and stable cc'ed:
>>
>> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>
>> Thanks,
>> Maxime
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-17 19:07 ` Maxime Coquelin
@ 2023-10-19 9:01 ` Chautru, Nicolas
2023-10-19 9:19 ` Maxime Coquelin
0 siblings, 1 reply; 37+ messages in thread
From: Chautru, Nicolas @ 2023-10-19 9:01 UTC (permalink / raw)
To: Maxime Coquelin, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
Hi Maxime,
I believe there was some historical discrepancy, even in doc both appeared but none of the 2 -t options with the cap.
https://doc.dpdk.org/guides/tools/testbbdev.html
Resolving this historical issue here.
Thanks
Nic
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Tuesday, October 17, 2023 9:08 PM
> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>
> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>
>
>
> On 9/29/23 20:13, Hernan Vargas wrote:
> > Update the timeout argument and default values.
> > Update EAL help message and default value.
> > Add iter_max and snr arguments.
> >
> > Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> > ---
> > app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
> > app/test-bbdev/test_bbdev_perf.c | 2 +-
> > 2 files changed, 19 insertions(+), 5 deletions(-)
> >
> > diff --git a/app/test-bbdev/test-bbdev.py
> > b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d 100755
> > --- a/app/test-bbdev/test-bbdev.py
> > +++ b/app/test-bbdev/test-bbdev.py
> > @@ -25,12 +25,12 @@ def kill(process):
> > help="specifies path to the bbdev test app",
> > default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-bbdev")
> > parser.add_argument("-e", "--eal-params",
> > - help="EAL arguments which are passed to the test app",
> > - default="--vdev=baseband_null0")
> > -parser.add_argument("-t", "--timeout",
> > + help="EAL arguments which must be passed to the test app",
> > + default="--vdev=baseband_null0 -a00:00.0")
> > +parser.add_argument("-T", "--timeout",
> > type=int,
> > help="Timeout in seconds",
> > - default=300)
> > + default=600)
> > parser.add_argument("-c", "--test-cases",
> > nargs="+",
> > help="Defines test cases to run. Run all if not
> > specified") @@ -48,6 +48,14 @@ def kill(process):
> > type=int,
> > help="Operations enqueue/dequeue burst size.",
> > default=[32])
> > +parser.add_argument("-s", "--snr",
> > + type=int,
> > + help="SNR in dB for BLER tests",
> > + default=0)
> > +parser.add_argument("-t", "--iter-max",
>
> We shouldn't change parameters meaning, it will silently break existing scripts
> making use of it.
>
> > + type=int,
> > + help="Max iterations",
> > + default=6)
> > parser.add_argument("-l", "--num-lcores",
> > type=int,
> > help="Number of lcores to run.", @@ -68,6 +76,12
> > @@ def kill(process):
> >
> > params.extend(["--"])
> >
> > +if args.snr:
> > + params.extend(["-s", str(args.snr)])
> > +
> > +if args.iter_max:
> > + params.extend(["-t", str(args.iter_max)])
> > +
> > if args.num_ops:
> > params.extend(["-n", str(args.num_ops)])
> >
> > diff --git a/app/test-bbdev/test_bbdev_perf.c
> > b/app/test-bbdev/test_bbdev_perf.c
> > index 276bbf0a2e6d..faea26c10eed 100644
> > --- a/app/test-bbdev/test_bbdev_perf.c
> > +++ b/app/test-bbdev/test_bbdev_perf.c
> > @@ -26,7 +26,7 @@
> >
> > #define MAX_QUEUES RTE_MAX_LCORE
> > #define TEST_REPETITIONS 100
> > -#define TIME_OUT_POLL 1e8
> > +#define TIME_OUT_POLL 1e9
> > #define WAIT_OFFLOAD_US 1000
> >
> > #ifdef RTE_BASEBAND_FPGA_LTE_FEC
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-19 9:01 ` Chautru, Nicolas
@ 2023-10-19 9:19 ` Maxime Coquelin
2023-10-19 12:09 ` Chautru, Nicolas
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-19 9:19 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
On 10/19/23 11:01, Chautru, Nicolas wrote:
> Hi Maxime,
>
> I believe there was some historical discrepancy, even in doc both appeared but none of the 2 -t options with the cap.
> https://doc.dpdk.org/guides/tools/testbbdev.html
> Resolving this historical issue here.
Ok, then we should fix the doc, not the code.
Thanks,
Maxime
> Thanks
> Nic
>
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Tuesday, October 17, 2023 9:08 PM
>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>> <qi.z.zhang@intel.com>
>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>>
>>
>>
>> On 9/29/23 20:13, Hernan Vargas wrote:
>>> Update the timeout argument and default values.
>>> Update EAL help message and default value.
>>> Add iter_max and snr arguments.
>>>
>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>> ---
>>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
>>> app/test-bbdev/test_bbdev_perf.c | 2 +-
>>> 2 files changed, 19 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/app/test-bbdev/test-bbdev.py
>>> b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d 100755
>>> --- a/app/test-bbdev/test-bbdev.py
>>> +++ b/app/test-bbdev/test-bbdev.py
>>> @@ -25,12 +25,12 @@ def kill(process):
>>> help="specifies path to the bbdev test app",
>>> default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-bbdev")
>>> parser.add_argument("-e", "--eal-params",
>>> - help="EAL arguments which are passed to the test app",
>>> - default="--vdev=baseband_null0")
>>> -parser.add_argument("-t", "--timeout",
>>> + help="EAL arguments which must be passed to the test app",
>>> + default="--vdev=baseband_null0 -a00:00.0")
>>> +parser.add_argument("-T", "--timeout",
>>> type=int,
>>> help="Timeout in seconds",
>>> - default=300)
>>> + default=600)
>>> parser.add_argument("-c", "--test-cases",
>>> nargs="+",
>>> help="Defines test cases to run. Run all if not
>>> specified") @@ -48,6 +48,14 @@ def kill(process):
>>> type=int,
>>> help="Operations enqueue/dequeue burst size.",
>>> default=[32])
>>> +parser.add_argument("-s", "--snr",
>>> + type=int,
>>> + help="SNR in dB for BLER tests",
>>> + default=0)
>>> +parser.add_argument("-t", "--iter-max",
>>
>> We shouldn't change parameters meaning, it will silently break existing scripts
>> making use of it.
>>
>>> + type=int,
>>> + help="Max iterations",
>>> + default=6)
>>> parser.add_argument("-l", "--num-lcores",
>>> type=int,
>>> help="Number of lcores to run.", @@ -68,6 +76,12
>>> @@ def kill(process):
>>>
>>> params.extend(["--"])
>>>
>>> +if args.snr:
>>> + params.extend(["-s", str(args.snr)])
>>> +
>>> +if args.iter_max:
>>> + params.extend(["-t", str(args.iter_max)])
>>> +
>>> if args.num_ops:
>>> params.extend(["-n", str(args.num_ops)])
>>>
>>> diff --git a/app/test-bbdev/test_bbdev_perf.c
>>> b/app/test-bbdev/test_bbdev_perf.c
>>> index 276bbf0a2e6d..faea26c10eed 100644
>>> --- a/app/test-bbdev/test_bbdev_perf.c
>>> +++ b/app/test-bbdev/test_bbdev_perf.c
>>> @@ -26,7 +26,7 @@
>>>
>>> #define MAX_QUEUES RTE_MAX_LCORE
>>> #define TEST_REPETITIONS 100
>>> -#define TIME_OUT_POLL 1e8
>>> +#define TIME_OUT_POLL 1e9
>>> #define WAIT_OFFLOAD_US 1000
>>>
>>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-19 9:19 ` Maxime Coquelin
@ 2023-10-19 12:09 ` Chautru, Nicolas
2023-10-19 12:20 ` Maxime Coquelin
2023-10-27 20:02 ` Chautru, Nicolas
0 siblings, 2 replies; 37+ messages in thread
From: Chautru, Nicolas @ 2023-10-19 12:09 UTC (permalink / raw)
To: Maxime Coquelin, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
Hi Maxime,
In practice anyone using that API is already using the one defined in the patch below and not using -t for time out. So not a concern to do it properly through that patch.
Heman, any concern on your side with this change?
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Thursday, October 19, 2023 11:19 AM
> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
> <trix@redhat.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>
>
>
> On 10/19/23 11:01, Chautru, Nicolas wrote:
> > Hi Maxime,
> >
> > I believe there was some historical discrepancy, even in doc both appeared
> but none of the 2 -t options with the cap.
> > https://doc.dpdk.org/guides/tools/testbbdev.html
> > Resolving this historical issue here.
>
> Ok, then we should fix the doc, not the code.
>
> Thanks,
> Maxime
>
> > Thanks
> > Nic
> >
> >> -----Original Message-----
> >> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> >> Sent: Tuesday, October 17, 2023 9:08 PM
> >> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> >> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> >> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> >> <qi.z.zhang@intel.com>
> >> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
> >> parameters
> >>
> >>
> >>
> >> On 9/29/23 20:13, Hernan Vargas wrote:
> >>> Update the timeout argument and default values.
> >>> Update EAL help message and default value.
> >>> Add iter_max and snr arguments.
> >>>
> >>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> >>> ---
> >>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
> >>> app/test-bbdev/test_bbdev_perf.c | 2 +-
> >>> 2 files changed, 19 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/app/test-bbdev/test-bbdev.py
> >>> b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d
> >>> 100755
> >>> --- a/app/test-bbdev/test-bbdev.py
> >>> +++ b/app/test-bbdev/test-bbdev.py
> >>> @@ -25,12 +25,12 @@ def kill(process):
> >>> help="specifies path to the bbdev test app",
> >>> default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-
> bbdev")
> >>> parser.add_argument("-e", "--eal-params",
> >>> - help="EAL arguments which are passed to the test app",
> >>> - default="--vdev=baseband_null0")
> >>> -parser.add_argument("-t", "--timeout",
> >>> + help="EAL arguments which must be passed to the test app",
> >>> + default="--vdev=baseband_null0 -a00:00.0")
> >>> +parser.add_argument("-T", "--timeout",
> >>> type=int,
> >>> help="Timeout in seconds",
> >>> - default=300)
> >>> + default=600)
> >>> parser.add_argument("-c", "--test-cases",
> >>> nargs="+",
> >>> help="Defines test cases to run. Run all if
> >>> not
> >>> specified") @@ -48,6 +48,14 @@ def kill(process):
> >>> type=int,
> >>> help="Operations enqueue/dequeue burst size.",
> >>> default=[32])
> >>> +parser.add_argument("-s", "--snr",
> >>> + type=int,
> >>> + help="SNR in dB for BLER tests",
> >>> + default=0)
> >>> +parser.add_argument("-t", "--iter-max",
> >>
> >> We shouldn't change parameters meaning, it will silently break
> >> existing scripts making use of it.
> >>
> >>> + type=int,
> >>> + help="Max iterations",
> >>> + default=6)
> >>> parser.add_argument("-l", "--num-lcores",
> >>> type=int,
> >>> help="Number of lcores to run.", @@ -68,6
> >>> +76,12 @@ def kill(process):
> >>>
> >>> params.extend(["--"])
> >>>
> >>> +if args.snr:
> >>> + params.extend(["-s", str(args.snr)])
> >>> +
> >>> +if args.iter_max:
> >>> + params.extend(["-t", str(args.iter_max)])
> >>> +
> >>> if args.num_ops:
> >>> params.extend(["-n", str(args.num_ops)])
> >>>
> >>> diff --git a/app/test-bbdev/test_bbdev_perf.c
> >>> b/app/test-bbdev/test_bbdev_perf.c
> >>> index 276bbf0a2e6d..faea26c10eed 100644
> >>> --- a/app/test-bbdev/test_bbdev_perf.c
> >>> +++ b/app/test-bbdev/test_bbdev_perf.c
> >>> @@ -26,7 +26,7 @@
> >>>
> >>> #define MAX_QUEUES RTE_MAX_LCORE
> >>> #define TEST_REPETITIONS 100
> >>> -#define TIME_OUT_POLL 1e8
> >>> +#define TIME_OUT_POLL 1e9
> >>> #define WAIT_OFFLOAD_US 1000
> >>>
> >>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
> >
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-19 8:47 ` Maxime Coquelin
@ 2023-10-19 12:12 ` Chautru, Nicolas
2023-10-23 9:05 ` Maxime Coquelin
0 siblings, 1 reply; 37+ messages in thread
From: Chautru, Nicolas @ 2023-10-19 12:12 UTC (permalink / raw)
To: Maxime Coquelin, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
Hi Maxime,
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Thursday, October 19, 2023 10:47 AM
> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
> <trix@redhat.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
>
> Hi Nicolas,
>
> On 10/19/23 10:41, Chautru, Nicolas wrote:
> > Hi Maxime,
> >
> > Do we really want to make these kind of changes on to the stable release, it
> tends to artificially increase the amount of churn on the stable release which
> can be counterproductive for such changes which don't add much value if any
> to user/developper.
> > Happy to follow your suggestion but a general feedback is lack of appetite for
> very large amount of changes in stable patches which inhibit adoption, so
> would expect to put things there that we would genuinely flag as a bug.
> > Kindly share your thoughts.
>
> Checking for configuration failure in a test application is quite useful in my
> opinion, as it can help catching regressions, isn't it?
I don’t personally think this (or for other commit on that serie) hits that bar for being required in stable release. This ends up being counterproductive having stable release with a huge amount of commits that are not really required, and it ends up being a reason for people not to move to stable release.
But if you are really convinced, ok to follow your reco.
>
> Maxime
> > Thanks
> > Nic
> >
> >
> >> -----Original Message-----
> >> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> >> Sent: Tuesday, October 17, 2023 9:43 PM
> >> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> >> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> >> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> >> <qi.z.zhang@intel.com>
> >> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
> >> queue configure
> >>
> >>
> >>
> >> On 9/29/23 20:13, Hernan Vargas wrote:
> >>> Stop test if rte_bbdev_queue_configure fails to configure queue.
> >>>
> >>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> >>> ---
> >>> app/test-bbdev/test_bbdev.c | 3 ++-
> >>> 1 file changed, 2 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/app/test-bbdev/test_bbdev.c
> >>> b/app/test-bbdev/test_bbdev.c index 65805977aead..cf224dca5d04
> >>> 100644
> >>> --- a/app/test-bbdev/test_bbdev.c
> >>> +++ b/app/test-bbdev/test_bbdev.c
> >>> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
> >>> * - queue should be started if deferred_start ==
> >>> */
> >>> ts_params->qconf.deferred_start = 0;
> >>> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
> >>> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
> >> &ts_params->qconf),
> >>> + "Failed test for rte_bbdev_queue_configure");
> >>> rte_bbdev_start(dev_id);
> >>>
> >>> TEST_ASSERT_SUCCESS(return_value =
> >> rte_bbdev_queue_info_get(dev_id,
> >>
> >> If should be a fix IMO.
> >> With fixes tag added and stable cc'ed:
> >>
> >> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> >>
> >> Thanks,
> >> Maxime
> >
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-19 12:09 ` Chautru, Nicolas
@ 2023-10-19 12:20 ` Maxime Coquelin
2023-10-27 20:02 ` Chautru, Nicolas
1 sibling, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-19 12:20 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
Hi Nicolas,
On 10/19/23 14:09, Chautru, Nicolas wrote:
> Hi Maxime,
> In practice anyone using that API is already using the one defined in the patch below and not using -t for time out. So not a concern to do it properly through that patch.
Sorry, I'm not sure to follow you.
For example in RHEL, we use this script for BBDEV validation for our
downstream packages.
Maxime
> Heman, any concern on your side with this change?
>
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Thursday, October 19, 2023 11:19 AM
>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>> <trix@redhat.com>
>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>>
>>
>>
>> On 10/19/23 11:01, Chautru, Nicolas wrote:
>>> Hi Maxime,
>>>
>>> I believe there was some historical discrepancy, even in doc both appeared
>> but none of the 2 -t options with the cap.
>>> https://doc.dpdk.org/guides/tools/testbbdev.html
>>> Resolving this historical issue here.
>>
>> Ok, then we should fix the doc, not the code.
>>
>> Thanks,
>> Maxime
>>
>>> Thanks
>>> Nic
>>>
>>>> -----Original Message-----
>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>> Sent: Tuesday, October 17, 2023 9:08 PM
>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>> <qi.z.zhang@intel.com>
>>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
>>>> parameters
>>>>
>>>>
>>>>
>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>> Update the timeout argument and default values.
>>>>> Update EAL help message and default value.
>>>>> Add iter_max and snr arguments.
>>>>>
>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>> ---
>>>>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
>>>>> app/test-bbdev/test_bbdev_perf.c | 2 +-
>>>>> 2 files changed, 19 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/app/test-bbdev/test-bbdev.py
>>>>> b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d
>>>>> 100755
>>>>> --- a/app/test-bbdev/test-bbdev.py
>>>>> +++ b/app/test-bbdev/test-bbdev.py
>>>>> @@ -25,12 +25,12 @@ def kill(process):
>>>>> help="specifies path to the bbdev test app",
>>>>> default=dpdk_path + "/" + dpdk_target + "/app/dpdk-test-
>> bbdev")
>>>>> parser.add_argument("-e", "--eal-params",
>>>>> - help="EAL arguments which are passed to the test app",
>>>>> - default="--vdev=baseband_null0")
>>>>> -parser.add_argument("-t", "--timeout",
>>>>> + help="EAL arguments which must be passed to the test app",
>>>>> + default="--vdev=baseband_null0 -a00:00.0")
>>>>> +parser.add_argument("-T", "--timeout",
>>>>> type=int,
>>>>> help="Timeout in seconds",
>>>>> - default=300)
>>>>> + default=600)
>>>>> parser.add_argument("-c", "--test-cases",
>>>>> nargs="+",
>>>>> help="Defines test cases to run. Run all if
>>>>> not
>>>>> specified") @@ -48,6 +48,14 @@ def kill(process):
>>>>> type=int,
>>>>> help="Operations enqueue/dequeue burst size.",
>>>>> default=[32])
>>>>> +parser.add_argument("-s", "--snr",
>>>>> + type=int,
>>>>> + help="SNR in dB for BLER tests",
>>>>> + default=0)
>>>>> +parser.add_argument("-t", "--iter-max",
>>>>
>>>> We shouldn't change parameters meaning, it will silently break
>>>> existing scripts making use of it.
>>>>
>>>>> + type=int,
>>>>> + help="Max iterations",
>>>>> + default=6)
>>>>> parser.add_argument("-l", "--num-lcores",
>>>>> type=int,
>>>>> help="Number of lcores to run.", @@ -68,6
>>>>> +76,12 @@ def kill(process):
>>>>>
>>>>> params.extend(["--"])
>>>>>
>>>>> +if args.snr:
>>>>> + params.extend(["-s", str(args.snr)])
>>>>> +
>>>>> +if args.iter_max:
>>>>> + params.extend(["-t", str(args.iter_max)])
>>>>> +
>>>>> if args.num_ops:
>>>>> params.extend(["-n", str(args.num_ops)])
>>>>>
>>>>> diff --git a/app/test-bbdev/test_bbdev_perf.c
>>>>> b/app/test-bbdev/test_bbdev_perf.c
>>>>> index 276bbf0a2e6d..faea26c10eed 100644
>>>>> --- a/app/test-bbdev/test_bbdev_perf.c
>>>>> +++ b/app/test-bbdev/test_bbdev_perf.c
>>>>> @@ -26,7 +26,7 @@
>>>>>
>>>>> #define MAX_QUEUES RTE_MAX_LCORE
>>>>> #define TEST_REPETITIONS 100
>>>>> -#define TIME_OUT_POLL 1e8
>>>>> +#define TIME_OUT_POLL 1e9
>>>>> #define WAIT_OFFLOAD_US 1000
>>>>>
>>>>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
>>>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-19 12:12 ` Chautru, Nicolas
@ 2023-10-23 9:05 ` Maxime Coquelin
2023-10-23 9:07 ` Maxime Coquelin
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-23 9:05 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom; +Cc: Zhang, Qi Z
On 10/19/23 14:12, Chautru, Nicolas wrote:
> Hi Maxime,
>
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Thursday, October 19, 2023 10:47 AM
>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>> <trix@redhat.com>
>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
>>
>> Hi Nicolas,
>>
>> On 10/19/23 10:41, Chautru, Nicolas wrote:
>>> Hi Maxime,
>>>
>>> Do we really want to make these kind of changes on to the stable release, it
>> tends to artificially increase the amount of churn on the stable release which
>> can be counterproductive for such changes which don't add much value if any
>> to user/developper.
>>> Happy to follow your suggestion but a general feedback is lack of appetite for
>> very large amount of changes in stable patches which inhibit adoption, so
>> would expect to put things there that we would genuinely flag as a bug.
>>> Kindly share your thoughts.
>>
>> Checking for configuration failure in a test application is quite useful in my
>> opinion, as it can help catching regressions, isn't it?
>
> I don’t personally think this (or for other commit on that serie) hits that bar for being required in stable release. This ends up being counterproductive having stable release with a huge amount of commits that are not really required, and it ends up being a reason for people not to move to stable release.
> But if you are really convinced, ok to follow your reco.
Adding LTS maintainers if they want to step in.
Personally, I think ot should be backported.
Maxime
>>
>> Maxime
>>> Thanks
>>> Nic
>>>
>>>
>>>> -----Original Message-----
>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>> Sent: Tuesday, October 17, 2023 9:43 PM
>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>> <qi.z.zhang@intel.com>
>>>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
>>>> queue configure
>>>>
>>>>
>>>>
>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>> Stop test if rte_bbdev_queue_configure fails to configure queue.
>>>>>
>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>> ---
>>>>> app/test-bbdev/test_bbdev.c | 3 ++-
>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/app/test-bbdev/test_bbdev.c
>>>>> b/app/test-bbdev/test_bbdev.c index 65805977aead..cf224dca5d04
>>>>> 100644
>>>>> --- a/app/test-bbdev/test_bbdev.c
>>>>> +++ b/app/test-bbdev/test_bbdev.c
>>>>> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
>>>>> * - queue should be started if deferred_start ==
>>>>> */
>>>>> ts_params->qconf.deferred_start = 0;
>>>>> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
>>>>> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
>>>> &ts_params->qconf),
>>>>> + "Failed test for rte_bbdev_queue_configure");
>>>>> rte_bbdev_start(dev_id);
>>>>>
>>>>> TEST_ASSERT_SUCCESS(return_value =
>>>> rte_bbdev_queue_info_get(dev_id,
>>>>
>>>> If should be a fix IMO.
>>>> With fixes tag added and stable cc'ed:
>>>>
>>>> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>
>>>> Thanks,
>>>> Maxime
>>>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-23 9:05 ` Maxime Coquelin
@ 2023-10-23 9:07 ` Maxime Coquelin
2023-10-23 15:10 ` Kevin Traynor
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-10-23 9:07 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom
Cc: Zhang, Qi Z, xuemingl, ktraynor, luca.boccassi
With LTS maintainers actually added... sorry.
On 10/23/23 11:05, Maxime Coquelin wrote:
>
>
> On 10/19/23 14:12, Chautru, Nicolas wrote:
>> Hi Maxime,
>>
>>> -----Original Message-----
>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>> Sent: Thursday, October 19, 2023 10:47 AM
>>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>>> <trix@redhat.com>
>>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
>>> queue configure
>>>
>>> Hi Nicolas,
>>>
>>> On 10/19/23 10:41, Chautru, Nicolas wrote:
>>>> Hi Maxime,
>>>>
>>>> Do we really want to make these kind of changes on to the stable
>>>> release, it
>>> tends to artificially increase the amount of churn on the stable
>>> release which
>>> can be counterproductive for such changes which don't add much value
>>> if any
>>> to user/developper.
>>>> Happy to follow your suggestion but a general feedback is lack of
>>>> appetite for
>>> very large amount of changes in stable patches which inhibit
>>> adoption, so
>>> would expect to put things there that we would genuinely flag as a bug.
>>>> Kindly share your thoughts.
>>>
>>> Checking for configuration failure in a test application is quite
>>> useful in my
>>> opinion, as it can help catching regressions, isn't it?
>>
>> I don’t personally think this (or for other commit on that serie) hits
>> that bar for being required in stable release. This ends up being
>> counterproductive having stable release with a huge amount of commits
>> that are not really required, and it ends up being a reason for people
>> not to move to stable release.
>> But if you are really convinced, ok to follow your reco.
>
> Adding LTS maintainers if they want to step in.
>
> Personally, I think ot should be backported.
>
> Maxime
>
>>>
>>> Maxime
>>>> Thanks
>>>> Nic
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>> Sent: Tuesday, October 17, 2023 9:43 PM
>>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>>> <qi.z.zhang@intel.com>
>>>>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
>>>>> queue configure
>>>>>
>>>>>
>>>>>
>>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>>> Stop test if rte_bbdev_queue_configure fails to configure queue.
>>>>>>
>>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>>> ---
>>>>>> app/test-bbdev/test_bbdev.c | 3 ++-
>>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/app/test-bbdev/test_bbdev.c
>>>>>> b/app/test-bbdev/test_bbdev.c index 65805977aead..cf224dca5d04
>>>>>> 100644
>>>>>> --- a/app/test-bbdev/test_bbdev.c
>>>>>> +++ b/app/test-bbdev/test_bbdev.c
>>>>>> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
>>>>>> * - queue should be started if deferred_start ==
>>>>>> */
>>>>>> ts_params->qconf.deferred_start = 0;
>>>>>> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
>>>>>> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
>>>>> &ts_params->qconf),
>>>>>> + "Failed test for rte_bbdev_queue_configure");
>>>>>> rte_bbdev_start(dev_id);
>>>>>>
>>>>>> TEST_ASSERT_SUCCESS(return_value =
>>>>> rte_bbdev_queue_info_get(dev_id,
>>>>>
>>>>> If should be a fix IMO.
>>>>> With fixes tag added and stable cc'ed:
>>>>>
>>>>> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>>
>>>>> Thanks,
>>>>> Maxime
>>>>
>>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 06/11] test/bbdev: assert failed test for queue configure
2023-10-23 9:07 ` Maxime Coquelin
@ 2023-10-23 15:10 ` Kevin Traynor
0 siblings, 0 replies; 37+ messages in thread
From: Kevin Traynor @ 2023-10-23 15:10 UTC (permalink / raw)
To: Maxime Coquelin, Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom
Cc: Zhang, Qi Z, xuemingl, luca.boccassi
On 23/10/2023 10:07, Maxime Coquelin wrote:
> With LTS maintainers actually added... sorry.
>
> On 10/23/23 11:05, Maxime Coquelin wrote:
>>
>>
>> On 10/19/23 14:12, Chautru, Nicolas wrote:
>>> Hi Maxime,
>>>
>>>> -----Original Message-----
>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>> Sent: Thursday, October 19, 2023 10:47 AM
>>>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>>>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>>>> <trix@redhat.com>
>>>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>>>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
>>>> queue configure
>>>>
>>>> Hi Nicolas,
>>>>
>>>> On 10/19/23 10:41, Chautru, Nicolas wrote:
>>>>> Hi Maxime,
>>>>>
>>>>> Do we really want to make these kind of changes on to the stable
>>>>> release, it
>>>> tends to artificially increase the amount of churn on the stable
>>>> release which
>>>> can be counterproductive for such changes which don't add much value
>>>> if any
>>>> to user/developper.
>>>>> Happy to follow your suggestion but a general feedback is lack of
>>>>> appetite for
>>>> very large amount of changes in stable patches which inhibit
>>>> adoption, so
>>>> would expect to put things there that we would genuinely flag as a bug.
>>>>> Kindly share your thoughts.
>>>>
>>>> Checking for configuration failure in a test application is quite
>>>> useful in my
>>>> opinion, as it can help catching regressions, isn't it?
>>>
>>> I don’t personally think this (or for other commit on that serie) hits
>>> that bar for being required in stable release. This ends up being
>>> counterproductive having stable release with a huge amount of commits
>>> that are not really required, and it ends up being a reason for people
>>> not to move to stable release.
>>> But if you are really convinced, ok to follow your reco.
>>
>> Adding LTS maintainers if they want to step in.
>>
>> Personally, I think ot should be backported.
>>
We wrote the policy [0] with exactly this type of discussion in mind :-)
"All patches accepted on the main branch with a Fixes: tag should be
backported to the relevant stable/LTS branches, unless the submitter
indicates otherwise. If there are exceptions, they will be discussed on
the mailing lists."
The idea behind the policy is to try and avoid spending time on
subjective discussions about how bad the bug being fixed should be
before it is backported, and to avoid different LTS maintainers making
different judgements about the same fixes on different branches.
So we try to keep it simple - if it's a bugfix, backport it. If there's
a specific reason not too, fine.
So if it's fixing something, please add the Fixes: tag and we'll take it
from there into the LTS.
thanks,
Kevin.
[0]
http://doc.dpdk.org/guides/contributing/stable.html#what-changes-should-be-backported
>> Maxime
>>
>>>>
>>>> Maxime
>>>>> Thanks
>>>>> Nic
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>>> Sent: Tuesday, October 17, 2023 9:43 PM
>>>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>>>> <qi.z.zhang@intel.com>
>>>>>> Subject: Re: [PATCH v1 06/11] test/bbdev: assert failed test for
>>>>>> queue configure
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>>>> Stop test if rte_bbdev_queue_configure fails to configure queue.
>>>>>>>
>>>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>>>> ---
>>>>>>> app/test-bbdev/test_bbdev.c | 3 ++-
>>>>>>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>>>>>>
>>>>>>> diff --git a/app/test-bbdev/test_bbdev.c
>>>>>>> b/app/test-bbdev/test_bbdev.c index 65805977aead..cf224dca5d04
>>>>>>> 100644
>>>>>>> --- a/app/test-bbdev/test_bbdev.c
>>>>>>> +++ b/app/test-bbdev/test_bbdev.c
>>>>>>> @@ -366,7 +366,8 @@ test_bbdev_configure_stop_queue(void)
>>>>>>> * - queue should be started if deferred_start ==
>>>>>>> */
>>>>>>> ts_params->qconf.deferred_start = 0;
>>>>>>> - rte_bbdev_queue_configure(dev_id, queue_id, &ts_params->qconf);
>>>>>>> + TEST_ASSERT_SUCCESS(rte_bbdev_queue_configure(dev_id, queue_id,
>>>>>> &ts_params->qconf),
>>>>>>> + "Failed test for rte_bbdev_queue_configure");
>>>>>>> rte_bbdev_start(dev_id);
>>>>>>>
>>>>>>> TEST_ASSERT_SUCCESS(return_value =
>>>>>> rte_bbdev_queue_info_get(dev_id,
>>>>>>
>>>>>> If should be a fix IMO.
>>>>>> With fixes tag added and stable cc'ed:
>>>>>>
>>>>>> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>>>
>>>>>> Thanks,
>>>>>> Maxime
>>>>>
>>>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-19 12:09 ` Chautru, Nicolas
2023-10-19 12:20 ` Maxime Coquelin
@ 2023-10-27 20:02 ` Chautru, Nicolas
2023-11-02 17:00 ` Maxime Coquelin
1 sibling, 1 reply; 37+ messages in thread
From: Chautru, Nicolas @ 2023-10-27 20:02 UTC (permalink / raw)
To: Coquelin, Maxime, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
Hi Maxime,
Back on this discussion and there was some misunderstanding. This is really a bug for the python script helper only.
The -t option is already reserved for bbdev-test application (and in doc) for setting the iter_max (see main.c).
The problem is that the python script introduced -t by mistake for an additional time out when calling the binary to be handled in the script only, now resolving this by using -T to avoid clash with existing -t option.
No one is genuinely using -t for timeout.
Ping me if still unclear
Nic
> -----Original Message-----
> From: Chautru, Nicolas
> Sent: Thursday, October 19, 2023 8:10 AM
> To: Maxime Coquelin <maxime.coquelin@redhat.com>; Vargas, Hernan
> <Hernan.Vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> Subject: RE: [PATCH v1 02/11] test/bbdev: update python script parameters
>
> Hi Maxime,
> In practice anyone using that API is already using the one defined in the
> patch below and not using -t for time out. So not a concern to do it properly
> through that patch.
> Heman, any concern on your side with this change?
>
> > -----Original Message-----
> > From: Maxime Coquelin <maxime.coquelin@redhat.com>
> > Sent: Thursday, October 19, 2023 11:19 AM
> > To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
> > <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
> Tom
> > <trix@redhat.com>
> > Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> > Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
> > parameters
> >
> >
> >
> > On 10/19/23 11:01, Chautru, Nicolas wrote:
> > > Hi Maxime,
> > >
> > > I believe there was some historical discrepancy, even in doc both
> > > appeared
> > but none of the 2 -t options with the cap.
> > > https://doc.dpdk.org/guides/tools/testbbdev.html
> > > Resolving this historical issue here.
> >
> > Ok, then we should fix the doc, not the code.
> >
> > Thanks,
> > Maxime
> >
> > > Thanks
> > > Nic
> > >
> > >> -----Original Message-----
> > >> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> > >> Sent: Tuesday, October 17, 2023 9:08 PM
> > >> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> > >> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> > >> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> > >> <qi.z.zhang@intel.com>
> > >> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
> > >> parameters
> > >>
> > >>
> > >>
> > >> On 9/29/23 20:13, Hernan Vargas wrote:
> > >>> Update the timeout argument and default values.
> > >>> Update EAL help message and default value.
> > >>> Add iter_max and snr arguments.
> > >>>
> > >>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> > >>> ---
> > >>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
> > >>> app/test-bbdev/test_bbdev_perf.c | 2 +-
> > >>> 2 files changed, 19 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/app/test-bbdev/test-bbdev.py
> > >>> b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d
> > >>> 100755
> > >>> --- a/app/test-bbdev/test-bbdev.py
> > >>> +++ b/app/test-bbdev/test-bbdev.py
> > >>> @@ -25,12 +25,12 @@ def kill(process):
> > >>> help="specifies path to the bbdev test app",
> > >>> default=dpdk_path + "/" + dpdk_target +
> > >>> "/app/dpdk-test-
> > bbdev")
> > >>> parser.add_argument("-e", "--eal-params",
> > >>> - help="EAL arguments which are passed to the test app",
> > >>> - default="--vdev=baseband_null0")
> > >>> -parser.add_argument("-t", "--timeout",
> > >>> + help="EAL arguments which must be passed to the test
> app",
> > >>> + default="--vdev=baseband_null0 -a00:00.0")
> > >>> +parser.add_argument("-T", "--timeout",
> > >>> type=int,
> > >>> help="Timeout in seconds",
> > >>> - default=300)
> > >>> + default=600)
> > >>> parser.add_argument("-c", "--test-cases",
> > >>> nargs="+",
> > >>> help="Defines test cases to run. Run all if
> > >>> not
> > >>> specified") @@ -48,6 +48,14 @@ def kill(process):
> > >>> type=int,
> > >>> help="Operations enqueue/dequeue burst size.",
> > >>> default=[32])
> > >>> +parser.add_argument("-s", "--snr",
> > >>> + type=int,
> > >>> + help="SNR in dB for BLER tests",
> > >>> + default=0)
> > >>> +parser.add_argument("-t", "--iter-max",
> > >>
> > >> We shouldn't change parameters meaning, it will silently break
> > >> existing scripts making use of it.
> > >>
> > >>> + type=int,
> > >>> + help="Max iterations",
> > >>> + default=6)
> > >>> parser.add_argument("-l", "--num-lcores",
> > >>> type=int,
> > >>> help="Number of lcores to run.", @@ -68,6
> > >>> +76,12 @@ def kill(process):
> > >>>
> > >>> params.extend(["--"])
> > >>>
> > >>> +if args.snr:
> > >>> + params.extend(["-s", str(args.snr)])
> > >>> +
> > >>> +if args.iter_max:
> > >>> + params.extend(["-t", str(args.iter_max)])
> > >>> +
> > >>> if args.num_ops:
> > >>> params.extend(["-n", str(args.num_ops)])
> > >>>
> > >>> diff --git a/app/test-bbdev/test_bbdev_perf.c
> > >>> b/app/test-bbdev/test_bbdev_perf.c
> > >>> index 276bbf0a2e6d..faea26c10eed 100644
> > >>> --- a/app/test-bbdev/test_bbdev_perf.c
> > >>> +++ b/app/test-bbdev/test_bbdev_perf.c
> > >>> @@ -26,7 +26,7 @@
> > >>>
> > >>> #define MAX_QUEUES RTE_MAX_LCORE
> > >>> #define TEST_REPETITIONS 100
> > >>> -#define TIME_OUT_POLL 1e8
> > >>> +#define TIME_OUT_POLL 1e9
> > >>> #define WAIT_OFFLOAD_US 1000
> > >>>
> > >>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
> > >
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-10-27 20:02 ` Chautru, Nicolas
@ 2023-11-02 17:00 ` Maxime Coquelin
2023-11-02 18:18 ` Chautru, Nicolas
0 siblings, 1 reply; 37+ messages in thread
From: Maxime Coquelin @ 2023-11-02 17:00 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
Hi Nicolas,
On 10/27/23 22:02, Chautru, Nicolas wrote:
> Hi Maxime,
>
> Back on this discussion and there was some misunderstanding. This is really a bug for the python script helper only.
> The -t option is already reserved for bbdev-test application (and in doc) for setting the iter_max (see main.c).
> The problem is that the python script introduced -t by mistake for an additional time out when calling the binary to be handled in the script only, now resolving this by using -T to avoid clash with existing -t option.
> No one is genuinely using -t for timeout.
> Ping me if still unclear
I actually understood it from the beginning, -t was used as timeout
option in the test-bbdev.py script, this patch changes -t to now
represent the maximum number of iterations.
I'm sure you can see the problem if someone was using -t for timeout in
some CI (Neither me or you can guarantee this is not used)?
If you think we really should change the meaning of this option, we
should have a deprecation notice, have both -t and -T to represent
timeout during the deprecation period and emit a warning when -t is
used. Once deprecated, you can assign -t to max iterations.
Sounds good?
Regards,
Maxime
> Nic
>
>> -----Original Message-----
>> From: Chautru, Nicolas
>> Sent: Thursday, October 19, 2023 8:10 AM
>> To: Maxime Coquelin <maxime.coquelin@redhat.com>; Vargas, Hernan
>> <Hernan.Vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>> Subject: RE: [PATCH v1 02/11] test/bbdev: update python script parameters
>>
>> Hi Maxime,
>> In practice anyone using that API is already using the one defined in the
>> patch below and not using -t for time out. So not a concern to do it properly
>> through that patch.
>> Heman, any concern on your side with this change?
>>
>>> -----Original Message-----
>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>> Sent: Thursday, October 19, 2023 11:19 AM
>>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
>> Tom
>>> <trix@redhat.com>
>>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
>>> parameters
>>>
>>>
>>>
>>> On 10/19/23 11:01, Chautru, Nicolas wrote:
>>>> Hi Maxime,
>>>>
>>>> I believe there was some historical discrepancy, even in doc both
>>>> appeared
>>> but none of the 2 -t options with the cap.
>>>> https://doc.dpdk.org/guides/tools/testbbdev.html
>>>> Resolving this historical issue here.
>>>
>>> Ok, then we should fix the doc, not the code.
>>>
>>> Thanks,
>>> Maxime
>>>
>>>> Thanks
>>>> Nic
>>>>
>>>>> -----Original Message-----
>>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>> Sent: Tuesday, October 17, 2023 9:08 PM
>>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>>> <qi.z.zhang@intel.com>
>>>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
>>>>> parameters
>>>>>
>>>>>
>>>>>
>>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>>> Update the timeout argument and default values.
>>>>>> Update EAL help message and default value.
>>>>>> Add iter_max and snr arguments.
>>>>>>
>>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>>> ---
>>>>>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
>>>>>> app/test-bbdev/test_bbdev_perf.c | 2 +-
>>>>>> 2 files changed, 19 insertions(+), 5 deletions(-)
>>>>>>
>>>>>> diff --git a/app/test-bbdev/test-bbdev.py
>>>>>> b/app/test-bbdev/test-bbdev.py index 9cdb4659724d..8d0145076e4d
>>>>>> 100755
>>>>>> --- a/app/test-bbdev/test-bbdev.py
>>>>>> +++ b/app/test-bbdev/test-bbdev.py
>>>>>> @@ -25,12 +25,12 @@ def kill(process):
>>>>>> help="specifies path to the bbdev test app",
>>>>>> default=dpdk_path + "/" + dpdk_target +
>>>>>> "/app/dpdk-test-
>>> bbdev")
>>>>>> parser.add_argument("-e", "--eal-params",
>>>>>> - help="EAL arguments which are passed to the test app",
>>>>>> - default="--vdev=baseband_null0")
>>>>>> -parser.add_argument("-t", "--timeout",
>>>>>> + help="EAL arguments which must be passed to the test
>> app",
>>>>>> + default="--vdev=baseband_null0 -a00:00.0")
>>>>>> +parser.add_argument("-T", "--timeout",
>>>>>> type=int,
>>>>>> help="Timeout in seconds",
>>>>>> - default=300)
>>>>>> + default=600)
>>>>>> parser.add_argument("-c", "--test-cases",
>>>>>> nargs="+",
>>>>>> help="Defines test cases to run. Run all if
>>>>>> not
>>>>>> specified") @@ -48,6 +48,14 @@ def kill(process):
>>>>>> type=int,
>>>>>> help="Operations enqueue/dequeue burst size.",
>>>>>> default=[32])
>>>>>> +parser.add_argument("-s", "--snr",
>>>>>> + type=int,
>>>>>> + help="SNR in dB for BLER tests",
>>>>>> + default=0)
>>>>>> +parser.add_argument("-t", "--iter-max",
>>>>>
>>>>> We shouldn't change parameters meaning, it will silently break
>>>>> existing scripts making use of it.
>>>>>
>>>>>> + type=int,
>>>>>> + help="Max iterations",
>>>>>> + default=6)
>>>>>> parser.add_argument("-l", "--num-lcores",
>>>>>> type=int,
>>>>>> help="Number of lcores to run.", @@ -68,6
>>>>>> +76,12 @@ def kill(process):
>>>>>>
>>>>>> params.extend(["--"])
>>>>>>
>>>>>> +if args.snr:
>>>>>> + params.extend(["-s", str(args.snr)])
>>>>>> +
>>>>>> +if args.iter_max:
>>>>>> + params.extend(["-t", str(args.iter_max)])
>>>>>> +
>>>>>> if args.num_ops:
>>>>>> params.extend(["-n", str(args.num_ops)])
>>>>>>
>>>>>> diff --git a/app/test-bbdev/test_bbdev_perf.c
>>>>>> b/app/test-bbdev/test_bbdev_perf.c
>>>>>> index 276bbf0a2e6d..faea26c10eed 100644
>>>>>> --- a/app/test-bbdev/test_bbdev_perf.c
>>>>>> +++ b/app/test-bbdev/test_bbdev_perf.c
>>>>>> @@ -26,7 +26,7 @@
>>>>>>
>>>>>> #define MAX_QUEUES RTE_MAX_LCORE
>>>>>> #define TEST_REPETITIONS 100
>>>>>> -#define TIME_OUT_POLL 1e8
>>>>>> +#define TIME_OUT_POLL 1e9
>>>>>> #define WAIT_OFFLOAD_US 1000
>>>>>>
>>>>>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
>>>>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* RE: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-11-02 17:00 ` Maxime Coquelin
@ 2023-11-02 18:18 ` Chautru, Nicolas
2023-11-03 9:48 ` Maxime Coquelin
0 siblings, 1 reply; 37+ messages in thread
From: Chautru, Nicolas @ 2023-11-02 18:18 UTC (permalink / raw)
To: Coquelin, Maxime, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
Hi Maxime,
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Thursday, November 2, 2023 10:00 AM
> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>
> Hi Nicolas,
>
> On 10/27/23 22:02, Chautru, Nicolas wrote:
> > Hi Maxime,
> >
> > Back on this discussion and there was some misunderstanding. This is really
> a bug for the python script helper only.
> > The -t option is already reserved for bbdev-test application (and in doc) for
> setting the iter_max (see main.c).
> > The problem is that the python script introduced -t by mistake for an
> additional time out when calling the binary to be handled in the script only,
> now resolving this by using -T to avoid clash with existing -t option.
> > No one is genuinely using -t for timeout.
> > Ping me if still unclear
>
> I actually understood it from the beginning, -t was used as timeout option in
> the test-bbdev.py script, this patch changes -t to now represent the maximum
> number of iterations.
>
> I'm sure you can see the problem if someone was using -t for timeout in some
> CI (Neither me or you can guarantee this is not used)?
>
> If you think we really should change the meaning of this option, we should
> have a deprecation notice, have both -t and -T to represent timeout during
> the deprecation period and emit a warning when -t is used. Once deprecated,
> you can assign -t to max iterations.
>
> Sounds good?
The problem with your option is that during that period of time the script is still broken since you cannot set the number of iterations which is what -t is meant for in the binary application.
This is really a fix, and until that fix is applied the python script should not be used, instead the binary should be called directly.
If you want to do it your suggested way and then do the formal fix in 24.03 that is possible even if not ideal to me, but it would still mean the script should arguably not be used during that period of time from my point of view.
Let me know
>
> Regards,
> Maxime
>
> > Nic
> >
> >> -----Original Message-----
> >> From: Chautru, Nicolas
> >> Sent: Thursday, October 19, 2023 8:10 AM
> >> To: Maxime Coquelin <maxime.coquelin@redhat.com>; Vargas, Hernan
> >> <Hernan.Vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
> Tom
> >> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
> >> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> >> Subject: RE: [PATCH v1 02/11] test/bbdev: update python script
> >> parameters
> >>
> >> Hi Maxime,
> >> In practice anyone using that API is already using the one defined in
> >> the patch below and not using -t for time out. So not a concern to do
> >> it properly through that patch.
> >> Heman, any concern on your side with this change?
> >>
> >>> -----Original Message-----
> >>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> >>> Sent: Thursday, October 19, 2023 11:19 AM
> >>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
> >>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
> >> Tom
> >>> <trix@redhat.com>
> >>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
> >>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
> >>> parameters
> >>>
> >>>
> >>>
> >>> On 10/19/23 11:01, Chautru, Nicolas wrote:
> >>>> Hi Maxime,
> >>>>
> >>>> I believe there was some historical discrepancy, even in doc both
> >>>> appeared
> >>> but none of the 2 -t options with the cap.
> >>>> https://doc.dpdk.org/guides/tools/testbbdev.html
> >>>> Resolving this historical issue here.
> >>>
> >>> Ok, then we should fix the doc, not the code.
> >>>
> >>> Thanks,
> >>> Maxime
> >>>
> >>>> Thanks
> >>>> Nic
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> >>>>> Sent: Tuesday, October 17, 2023 9:08 PM
> >>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
> >>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
> >>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
> >>>>> <qi.z.zhang@intel.com>
> >>>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
> >>>>> parameters
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 9/29/23 20:13, Hernan Vargas wrote:
> >>>>>> Update the timeout argument and default values.
> >>>>>> Update EAL help message and default value.
> >>>>>> Add iter_max and snr arguments.
> >>>>>>
> >>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
> >>>>>> ---
> >>>>>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
> >>>>>> app/test-bbdev/test_bbdev_perf.c | 2 +-
> >>>>>> 2 files changed, 19 insertions(+), 5 deletions(-)
> >>>>>>
> >>>>>> diff --git a/app/test-bbdev/test-bbdev.py
> >>>>>> b/app/test-bbdev/test-bbdev.py index
> 9cdb4659724d..8d0145076e4d
> >>>>>> 100755
> >>>>>> --- a/app/test-bbdev/test-bbdev.py
> >>>>>> +++ b/app/test-bbdev/test-bbdev.py
> >>>>>> @@ -25,12 +25,12 @@ def kill(process):
> >>>>>> help="specifies path to the bbdev test app",
> >>>>>> default=dpdk_path + "/" + dpdk_target +
> >>>>>> "/app/dpdk-test-
> >>> bbdev")
> >>>>>> parser.add_argument("-e", "--eal-params",
> >>>>>> - help="EAL arguments which are passed to the test app",
> >>>>>> - default="--vdev=baseband_null0")
> >>>>>> -parser.add_argument("-t", "--timeout",
> >>>>>> + help="EAL arguments which must be passed to
> >>>>>> + the test
> >> app",
> >>>>>> + default="--vdev=baseband_null0 -a00:00.0")
> >>>>>> +parser.add_argument("-T", "--timeout",
> >>>>>> type=int,
> >>>>>> help="Timeout in seconds",
> >>>>>> - default=300)
> >>>>>> + default=600)
> >>>>>> parser.add_argument("-c", "--test-cases",
> >>>>>> nargs="+",
> >>>>>> help="Defines test cases to run. Run all
> >>>>>> if not
> >>>>>> specified") @@ -48,6 +48,14 @@ def kill(process):
> >>>>>> type=int,
> >>>>>> help="Operations enqueue/dequeue burst size.",
> >>>>>> default=[32])
> >>>>>> +parser.add_argument("-s", "--snr",
> >>>>>> + type=int,
> >>>>>> + help="SNR in dB for BLER tests",
> >>>>>> + default=0)
> >>>>>> +parser.add_argument("-t", "--iter-max",
> >>>>>
> >>>>> We shouldn't change parameters meaning, it will silently break
> >>>>> existing scripts making use of it.
> >>>>>
> >>>>>> + type=int,
> >>>>>> + help="Max iterations",
> >>>>>> + default=6)
> >>>>>> parser.add_argument("-l", "--num-lcores",
> >>>>>> type=int,
> >>>>>> help="Number of lcores to run.", @@ -68,6
> >>>>>> +76,12 @@ def kill(process):
> >>>>>>
> >>>>>> params.extend(["--"])
> >>>>>>
> >>>>>> +if args.snr:
> >>>>>> + params.extend(["-s", str(args.snr)])
> >>>>>> +
> >>>>>> +if args.iter_max:
> >>>>>> + params.extend(["-t", str(args.iter_max)])
> >>>>>> +
> >>>>>> if args.num_ops:
> >>>>>> params.extend(["-n", str(args.num_ops)])
> >>>>>>
> >>>>>> diff --git a/app/test-bbdev/test_bbdev_perf.c
> >>>>>> b/app/test-bbdev/test_bbdev_perf.c
> >>>>>> index 276bbf0a2e6d..faea26c10eed 100644
> >>>>>> --- a/app/test-bbdev/test_bbdev_perf.c
> >>>>>> +++ b/app/test-bbdev/test_bbdev_perf.c
> >>>>>> @@ -26,7 +26,7 @@
> >>>>>>
> >>>>>> #define MAX_QUEUES RTE_MAX_LCORE
> >>>>>> #define TEST_REPETITIONS 100
> >>>>>> -#define TIME_OUT_POLL 1e8
> >>>>>> +#define TIME_OUT_POLL 1e9
> >>>>>> #define WAIT_OFFLOAD_US 1000
> >>>>>>
> >>>>>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
> >>>>
> >
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v1 02/11] test/bbdev: update python script parameters
2023-11-02 18:18 ` Chautru, Nicolas
@ 2023-11-03 9:48 ` Maxime Coquelin
0 siblings, 0 replies; 37+ messages in thread
From: Maxime Coquelin @ 2023-11-03 9:48 UTC (permalink / raw)
To: Chautru, Nicolas, Vargas, Hernan, dev, gakhil, Rix, Tom, Hemant Agrawal
Cc: Zhang, Qi Z
On 11/2/23 19:18, Chautru, Nicolas wrote:
> Hi Maxime,
>
>> -----Original Message-----
>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>> Sent: Thursday, November 2, 2023 10:00 AM
>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix, Tom
>> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script parameters
>>
>> Hi Nicolas,
>>
>> On 10/27/23 22:02, Chautru, Nicolas wrote:
>>> Hi Maxime,
>>>
>>> Back on this discussion and there was some misunderstanding. This is really
>> a bug for the python script helper only.
>>> The -t option is already reserved for bbdev-test application (and in doc) for
>> setting the iter_max (see main.c).
>>> The problem is that the python script introduced -t by mistake for an
>> additional time out when calling the binary to be handled in the script only,
>> now resolving this by using -T to avoid clash with existing -t option.
>>> No one is genuinely using -t for timeout.
>>> Ping me if still unclear
>>
>> I actually understood it from the beginning, -t was used as timeout option in
>> the test-bbdev.py script, this patch changes -t to now represent the maximum
>> number of iterations.
>>
>> I'm sure you can see the problem if someone was using -t for timeout in some
>> CI (Neither me or you can guarantee this is not used)?
>>
>> If you think we really should change the meaning of this option, we should
>> have a deprecation notice, have both -t and -T to represent timeout during
>> the deprecation period and emit a warning when -t is used. Once deprecated,
>> you can assign -t to max iterations.
>>
>> Sounds good?
>
> The problem with your option is that during that period of time the script is still broken since you cannot set the number of iterations which is what -t is meant for in the binary application.
> This is really a fix, and until that fix is applied the python script should not be used, instead the binary should be called directly.
> If you want to do it your suggested way and then do the formal fix in 24.03 that is possible even if not ideal to me, but it would still mean the script should arguably not be used during that period of time from my point of view.
You will be able to use --iter-max during the transition period, I think
it is a good compromise.
Ok for you?
Thanks,
Maxime
> Let me know
>
>
>>
>> Regards,
>> Maxime
>>
>>> Nic
>>>
>>>> -----Original Message-----
>>>> From: Chautru, Nicolas
>>>> Sent: Thursday, October 19, 2023 8:10 AM
>>>> To: Maxime Coquelin <maxime.coquelin@redhat.com>; Vargas, Hernan
>>>> <Hernan.Vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
>> Tom
>>>> <trix@redhat.com>; Hemant Agrawal <hemant.agrawal@nxp.com>
>>>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>>>> Subject: RE: [PATCH v1 02/11] test/bbdev: update python script
>>>> parameters
>>>>
>>>> Hi Maxime,
>>>> In practice anyone using that API is already using the one defined in
>>>> the patch below and not using -t for time out. So not a concern to do
>>>> it properly through that patch.
>>>> Heman, any concern on your side with this change?
>>>>
>>>>> -----Original Message-----
>>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>> Sent: Thursday, October 19, 2023 11:19 AM
>>>>> To: Chautru, Nicolas <nicolas.chautru@intel.com>; Vargas, Hernan
>>>>> <hernan.vargas@intel.com>; dev@dpdk.org; gakhil@marvell.com; Rix,
>>>> Tom
>>>>> <trix@redhat.com>
>>>>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>
>>>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
>>>>> parameters
>>>>>
>>>>>
>>>>>
>>>>> On 10/19/23 11:01, Chautru, Nicolas wrote:
>>>>>> Hi Maxime,
>>>>>>
>>>>>> I believe there was some historical discrepancy, even in doc both
>>>>>> appeared
>>>>> but none of the 2 -t options with the cap.
>>>>>> https://doc.dpdk.org/guides/tools/testbbdev.html
>>>>>> Resolving this historical issue here.
>>>>>
>>>>> Ok, then we should fix the doc, not the code.
>>>>>
>>>>> Thanks,
>>>>> Maxime
>>>>>
>>>>>> Thanks
>>>>>> Nic
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Maxime Coquelin <maxime.coquelin@redhat.com>
>>>>>>> Sent: Tuesday, October 17, 2023 9:08 PM
>>>>>>> To: Vargas, Hernan <hernan.vargas@intel.com>; dev@dpdk.org;
>>>>>>> gakhil@marvell.com; Rix, Tom <trix@redhat.com>
>>>>>>> Cc: Chautru, Nicolas <nicolas.chautru@intel.com>; Zhang, Qi Z
>>>>>>> <qi.z.zhang@intel.com>
>>>>>>> Subject: Re: [PATCH v1 02/11] test/bbdev: update python script
>>>>>>> parameters
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 9/29/23 20:13, Hernan Vargas wrote:
>>>>>>>> Update the timeout argument and default values.
>>>>>>>> Update EAL help message and default value.
>>>>>>>> Add iter_max and snr arguments.
>>>>>>>>
>>>>>>>> Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
>>>>>>>> ---
>>>>>>>> app/test-bbdev/test-bbdev.py | 22 ++++++++++++++++++----
>>>>>>>> app/test-bbdev/test_bbdev_perf.c | 2 +-
>>>>>>>> 2 files changed, 19 insertions(+), 5 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/app/test-bbdev/test-bbdev.py
>>>>>>>> b/app/test-bbdev/test-bbdev.py index
>> 9cdb4659724d..8d0145076e4d
>>>>>>>> 100755
>>>>>>>> --- a/app/test-bbdev/test-bbdev.py
>>>>>>>> +++ b/app/test-bbdev/test-bbdev.py
>>>>>>>> @@ -25,12 +25,12 @@ def kill(process):
>>>>>>>> help="specifies path to the bbdev test app",
>>>>>>>> default=dpdk_path + "/" + dpdk_target +
>>>>>>>> "/app/dpdk-test-
>>>>> bbdev")
>>>>>>>> parser.add_argument("-e", "--eal-params",
>>>>>>>> - help="EAL arguments which are passed to the test app",
>>>>>>>> - default="--vdev=baseband_null0")
>>>>>>>> -parser.add_argument("-t", "--timeout",
>>>>>>>> + help="EAL arguments which must be passed to
>>>>>>>> + the test
>>>> app",
>>>>>>>> + default="--vdev=baseband_null0 -a00:00.0")
>>>>>>>> +parser.add_argument("-T", "--timeout",
>>>>>>>> type=int,
>>>>>>>> help="Timeout in seconds",
>>>>>>>> - default=300)
>>>>>>>> + default=600)
>>>>>>>> parser.add_argument("-c", "--test-cases",
>>>>>>>> nargs="+",
>>>>>>>> help="Defines test cases to run. Run all
>>>>>>>> if not
>>>>>>>> specified") @@ -48,6 +48,14 @@ def kill(process):
>>>>>>>> type=int,
>>>>>>>> help="Operations enqueue/dequeue burst size.",
>>>>>>>> default=[32])
>>>>>>>> +parser.add_argument("-s", "--snr",
>>>>>>>> + type=int,
>>>>>>>> + help="SNR in dB for BLER tests",
>>>>>>>> + default=0)
>>>>>>>> +parser.add_argument("-t", "--iter-max",
>>>>>>>
>>>>>>> We shouldn't change parameters meaning, it will silently break
>>>>>>> existing scripts making use of it.
>>>>>>>
>>>>>>>> + type=int,
>>>>>>>> + help="Max iterations",
>>>>>>>> + default=6)
>>>>>>>> parser.add_argument("-l", "--num-lcores",
>>>>>>>> type=int,
>>>>>>>> help="Number of lcores to run.", @@ -68,6
>>>>>>>> +76,12 @@ def kill(process):
>>>>>>>>
>>>>>>>> params.extend(["--"])
>>>>>>>>
>>>>>>>> +if args.snr:
>>>>>>>> + params.extend(["-s", str(args.snr)])
>>>>>>>> +
>>>>>>>> +if args.iter_max:
>>>>>>>> + params.extend(["-t", str(args.iter_max)])
>>>>>>>> +
>>>>>>>> if args.num_ops:
>>>>>>>> params.extend(["-n", str(args.num_ops)])
>>>>>>>>
>>>>>>>> diff --git a/app/test-bbdev/test_bbdev_perf.c
>>>>>>>> b/app/test-bbdev/test_bbdev_perf.c
>>>>>>>> index 276bbf0a2e6d..faea26c10eed 100644
>>>>>>>> --- a/app/test-bbdev/test_bbdev_perf.c
>>>>>>>> +++ b/app/test-bbdev/test_bbdev_perf.c
>>>>>>>> @@ -26,7 +26,7 @@
>>>>>>>>
>>>>>>>> #define MAX_QUEUES RTE_MAX_LCORE
>>>>>>>> #define TEST_REPETITIONS 100
>>>>>>>> -#define TIME_OUT_POLL 1e8
>>>>>>>> +#define TIME_OUT_POLL 1e9
>>>>>>>> #define WAIT_OFFLOAD_US 1000
>>>>>>>>
>>>>>>>> #ifdef RTE_BASEBAND_FPGA_LTE_FEC
>>>>>>
>>>
>
^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2023-11-03 9:48 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-29 18:13 [PATCH v1 00/11] test-bbdev changes for 23.11 Hernan Vargas
2023-09-29 18:13 ` [PATCH v1 01/11] test/bbdev: fix python script subprocess Hernan Vargas
2023-10-17 19:05 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 02/11] test/bbdev: update python script parameters Hernan Vargas
2023-10-17 19:07 ` Maxime Coquelin
2023-10-19 9:01 ` Chautru, Nicolas
2023-10-19 9:19 ` Maxime Coquelin
2023-10-19 12:09 ` Chautru, Nicolas
2023-10-19 12:20 ` Maxime Coquelin
2023-10-27 20:02 ` Chautru, Nicolas
2023-11-02 17:00 ` Maxime Coquelin
2023-11-02 18:18 ` Chautru, Nicolas
2023-11-03 9:48 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 03/11] test/bbdev: rename macros from acc200 to vrb Hernan Vargas
2023-10-17 19:30 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 04/11] test/bbdev: handle exception for LLR generation Hernan Vargas
2023-10-17 19:30 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 05/11] test/bbdev: improve test log messages Hernan Vargas
2023-10-17 19:40 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 06/11] test/bbdev: assert failed test for queue configure Hernan Vargas
2023-10-17 19:43 ` Maxime Coquelin
2023-10-19 8:41 ` Chautru, Nicolas
2023-10-19 8:47 ` Maxime Coquelin
2023-10-19 12:12 ` Chautru, Nicolas
2023-10-23 9:05 ` Maxime Coquelin
2023-10-23 9:07 ` Maxime Coquelin
2023-10-23 15:10 ` Kevin Traynor
2023-09-29 18:13 ` [PATCH v1 07/11] test/bbdev: ldpc encoder concatenation vector Hernan Vargas
2023-10-17 19:44 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 08/11] test/bbdev: increase max burst size Hernan Vargas
2023-10-17 19:45 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 09/11] test/bbdev: add MLD support Hernan Vargas
2023-10-17 20:03 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 10/11] test/bbdev: support new FFT capabilities Hernan Vargas
2023-10-17 20:06 ` Maxime Coquelin
2023-09-29 18:13 ` [PATCH v1 11/11] test/bbdev: support 4 bit LLR compression Hernan Vargas
2023-10-17 20:08 ` Maxime Coquelin
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).