> During throughput running, re-filling the test data will > impact the performance test result. So for now, to run > decrypt throughput testing is not supported since the > test data is not filled. > > But if user requires OOP(out-of-place) mode, the test > data from source mbuf will never be modified, and if > the test data can be prepared out of the running loop, > the decryption test should be fine. > > This commit adds the support of out-of-place decryption > testing for throughput. >
> Signed-off-by: Suanming Mou <suanmi...@nvidia.com> > --- > app/test-crypto-perf/cperf_ops.c | 5 ++- > app/test-crypto-perf/cperf_options_parsing.c | 8 +++++ > app/test-crypto-perf/cperf_test_throughput.c | 37 +++++++++++++++++--- > 3 files changed, 44 insertions(+), 6 deletions(-) > > diff --git a/app/test-crypto-perf/cperf_ops.c > b/app/test-crypto-perf/cperf_ops.c > index 84945d1313..1d57b78c2b 100644 > --- a/app/test-crypto-perf/cperf_ops.c > +++ b/app/test-crypto-perf/cperf_ops.c > @@ -608,7 +608,10 @@ cperf_set_ops_aead(struct rte_crypto_op **ops, > } > > if ((options->test == CPERF_TEST_TYPE_VERIFY) || > - (options->test == CPERF_TEST_TYPE_LATENCY)) { > + (options->test == CPERF_TEST_TYPE_LATENCY) || > + (options->test == CPERF_TEST_TYPE_THROUGHPUT && > + (options->aead_op == RTE_CRYPTO_AEAD_OP_DECRYPT || > + options->cipher_op == RTE_CRYPTO_CIPHER_OP_DECRYPT))) { > for (i = 0; i < nb_ops; i++) { > uint8_t *iv_ptr = rte_crypto_op_ctod_offset(ops[i], > uint8_t *, iv_offset); > diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto- > perf/cperf_options_parsing.c > index 75afedc7fd..6caca44371 100644 > --- a/app/test-crypto-perf/cperf_options_parsing.c > +++ b/app/test-crypto-perf/cperf_options_parsing.c > @@ -1291,6 +1291,14 @@ cperf_options_check(struct cperf_options *options) > } > } > > + if (options->test == CPERF_TEST_TYPE_THROUGHPUT && > + (options->aead_op == RTE_CRYPTO_AEAD_OP_DECRYPT || > + options->cipher_op == RTE_CRYPTO_CIPHER_OP_DECRYPT) && > + !options->out_of_place) { > + RTE_LOG(ERR, USER1, "Only out-of-place is allowed in > throughput decryption.\n"); > + return -EINVAL; > + } This check is blocking cipher_only decryption which should pass irrespective of inplace/oop and Data correct/incorrect. > + > if (options->op_type == CPERF_CIPHER_ONLY || > options->op_type == CPERF_CIPHER_THEN_AUTH || > options->op_type == CPERF_AUTH_THEN_CIPHER) { > diff --git a/app/test-crypto-perf/cperf_test_throughput.c b/app/test-crypto- > perf/cperf_test_throughput.c > index f8f8bd717f..eab25ec863 100644 > --- a/app/test-crypto-perf/cperf_test_throughput.c > +++ b/app/test-crypto-perf/cperf_test_throughput.c > @@ -98,6 +98,29 @@ cperf_throughput_test_constructor(struct rte_mempool > *sess_mp, > return NULL; > } > > +static void > +cperf_verify_init_ops(struct rte_mempool *mp __rte_unused, > + void *opaque_arg, > + void *obj, > + __rte_unused unsigned int i) > +{ > + uint16_t iv_offset = sizeof(struct rte_crypto_op) + > + sizeof(struct rte_crypto_sym_op); > + uint32_t imix_idx = 0; > + struct cperf_throughput_ctx *ctx = opaque_arg; > + struct rte_crypto_op *op = obj; > + > + (ctx->populate_ops)(&op, ctx->src_buf_offset, > + ctx->dst_buf_offset, > + 1, ctx->sess, ctx->options, > + ctx->test_vector, iv_offset, &imix_idx, NULL); > + > + cperf_mbuf_set(op->sym->m_src, > + ctx->options, > + ctx->test_vector); Unnecessary line break. > + Extra line > +} > + > int > cperf_throughput_test_runner(void *test_ctx) > { > @@ -143,6 +166,9 @@ cperf_throughput_test_runner(void *test_ctx) > uint16_t iv_offset = sizeof(struct rte_crypto_op) + > sizeof(struct rte_crypto_sym_op); > > + if (ctx->options->out_of_place) > + rte_mempool_obj_iter(ctx->pool, cperf_verify_init_ops, (void > *)ctx); > + > while (test_burst_size <= ctx->options->max_burst_size) { > uint64_t ops_enqd = 0, ops_enqd_total = 0, ops_enqd_failed = 0; > uint64_t ops_deqd = 0, ops_deqd_total = 0, ops_deqd_failed = 0; > @@ -175,11 +201,12 @@ cperf_throughput_test_runner(void *test_ctx) > } > > /* Setup crypto op, attach mbuf etc */ > - (ctx->populate_ops)(ops, ctx->src_buf_offset, > - ctx->dst_buf_offset, > - ops_needed, ctx->sess, > - ctx->options, ctx->test_vector, > - iv_offset, &imix_idx, &tsc_start); > + if (!ctx->options->out_of_place) > + (ctx->populate_ops)(ops, ctx->src_buf_offset, > + ctx->dst_buf_offset, > + ops_needed, ctx->sess, > + ctx->options, ctx->test_vector, > + iv_offset, &imix_idx, > &tsc_start); > > /** > * When ops_needed is smaller than ops_enqd, the > -- > 2.34.1