Hi Suanming,

This change looks ok to me.

> -----Original Message-----
> From: Akhil Goyal <gak...@marvell.com>
> Sent: Thursday, July 18, 2024 8:57 PM
> To: Suanming Mou <suanmi...@nvidia.com>; Dooley, Brian
> <brian.doo...@intel.com>; Mcnamara, John <john.mcnam...@intel.com>; Ji,
> Kai <kai...@intel.com>; Kusztal, ArkadiuszX <arkadiuszx.kusz...@intel.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH v2] app/test-crypto-perf: add throughput OOP
> decryption
> 
> > Hi Brian,
> >
> > Since Ciara is no longer available and you are the new maintainer, can
> > you investigate this patch?
> > There were some concerns which Ciara highlighted. Can you check?
> >
> 
> Any update on this patch?
> 
> 
> > > > Subject: [PATCH v2] app/test-crypto-perf: add throughput OOP
> > > > decryption
> > > >
> > > > 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.
> > > >
> > > > [1]:
> > > > https://urldefense.proofpoint.com/v2/url?u=http-
> > > 3A__mails.dpdk.org_archives_dev_2023-
> > >
> >
> 2DJuly_273328.html&d=DwIFAg&c=nKjWec2b6R0mOyPaz7xtfQ&r=DnL7Si2
> wl_P
> > > RwpZ9TWey3eu68gBzn7DkPwuqhd6WNyo&m=eTj0O7iYH-
> > > xiTQ6dNUZpsOXPqnyC1O_-
> > >
> _IKt0j_yQ_N__vy0wIBLb_QyMQtodUrr&s=eDz_NLjqkUH2cYMilKEtdWImOPj
> 5f-
> > > CVKV5UW8P9frk&e=
> > > >
> > > > 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 | 34
> > > > +++++++++++++++++---
> > > >  3 files changed, 41 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-
> > > perf/cperf_ops.c
> > > > index d3fd115bc0..714616c697 100644
> > > > --- a/app/test-crypto-perf/cperf_ops.c
> > > > +++ b/app/test-crypto-perf/cperf_ops.c
> > > > @@ -644,7 +644,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
> > > > 8c20974273..90526e676f 100644
> > > > --- a/app/test-crypto-perf/cperf_options_parsing.c
> > > > +++ b/app/test-crypto-perf/cperf_options_parsing.c
> > > > @@ -1341,6 +1341,14 @@ cperf_options_check(struct cperf_options
> > > > *options)
> > > >                 }
> > > >         }
> > > >
> > > > +       if (options->test == CPERF_TEST_TYPE_THROUGHPUT &&
> > > > +           (options->aead_op == RTE_CRYPTO_AEAD_OP_DECRYPT ||
> > > > +            options->auth_op == RTE_CRYPTO_AUTH_OP_VERIFY) &&
> > > > +           !options->out_of_place) {
> > > > +               RTE_LOG(ERR, USER1, "Only out-of-place is allowed in
> > > > throughput decryption.\n");
> > > > +               return -EINVAL;
> > > > +       }
> > >
> > > Not totally following some of this, why do we only want to add this
> > > for OOP mode?
> > >
> > > For example an inplace command I can use before this patch but not after:
> > > ./build/app/dpdk-test-crypto-perf -l 2,3 -- --ptest throughput
> > > --optype aead -- aead-algo aes-gcm --aead-op decrypt --devtype
> > > crypto_qat --aead-key-sz 16
> > >
> > > I get an error;
> > > USER1: Only out-of-place is allowed in throughput decryption.
> > > USER1: Checking one or more user options failed
> > >
> > > Do we want to always force the user to use OOP + test vector file
> > > for these throughput decryption tests?
> > > Or should we just add a warning that the throughput may not be
> > > reflecting the "success" verify path in PMD if using inplace and the dummy
> data.
> > >
> > > I am not sure.
> > > If we do want to add the limitation on the throughput tests, these
> > > changes I
> > think
> > > are ok for that.
> > >
> > > Thanks,
> > > Ciara
> > >
> > > > +
> > > >         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 e3d266d7a4..b347baa913 100644
> > > > --- a/app/test-crypto-perf/cperf_test_throughput.c
> > > > +++ b/app/test-crypto-perf/cperf_test_throughput.c
> > > > @@ -99,6 +99,26 @@ 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);
> > > > +}
> > > > +
> > > >  int
> > > >  cperf_throughput_test_runner(void *test_ctx)  { @@ -144,6 +164,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;
> > > > @@ -176,11 +199,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

Acked-by: Brian Dooley <brian.doo...@intel.com>

Reply via email to