In case of hardware PMDs (which may take a longer duration
for processing the packets), there may be a case when the
number of enqueued packets are more than the dequeued.

So if the difference is more than 8 times the burst size,
more dequeue operations should be performed otherwise all
the buffers will be blocked in hardware.

Signed-off-by: Akhil Goyal <akhil.go...@nxp.com>
---
 app/test-crypto-perf/cperf_test_throughput.c | 40 +++++++++++---------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/app/test-crypto-perf/cperf_test_throughput.c 
b/app/test-crypto-perf/cperf_test_throughput.c
index 2767f4ea8..d24a6dda0 100644
--- a/app/test-crypto-perf/cperf_test_throughput.c
+++ b/app/test-crypto-perf/cperf_test_throughput.c
@@ -208,23 +208,29 @@ cperf_throughput_test_runner(void *test_ctx)
 
 
                        /* Dequeue processed burst of ops from crypto device */
-                       ops_deqd = rte_cryptodev_dequeue_burst(ctx->dev_id, 
ctx->qp_id,
-                                       ops_processed, test_burst_size);
-
-                       if (likely(ops_deqd))  {
-                               /* Free crypto ops so they can be reused. */
-                               rte_mempool_put_bulk(ctx->pool,
-                                               (void **)ops_processed, 
ops_deqd);
-
-                               ops_deqd_total += ops_deqd;
-                       } else {
-                               /**
-                                * Count dequeue polls which didn't return any
-                                * processed operations. This statistic is 
mainly
-                                * relevant to hw accelerators.
-                                */
-                               ops_deqd_failed++;
-                       }
+                       do {
+                               ops_deqd = rte_cryptodev_dequeue_burst(
+                                               ctx->dev_id, ctx->qp_id,
+                                               ops_processed, test_burst_size);
+
+                               if (likely(ops_deqd))  {
+                                       /* Free crypto ops for reuse */
+                                       rte_mempool_put_bulk(ctx->pool,
+                                                       (void **)ops_processed,
+                                                       ops_deqd);
+
+                                       ops_deqd_total += ops_deqd;
+                               } else {
+                                       /**
+                                        * Count dequeue polls which didn't
+                                        * return any processed operations.
+                                        * This statistic is mainly relevant
+                                        * to hw accelerators.
+                                        */
+                                       ops_deqd_failed++;
+                               }
+                       } while (ops_enqd_total - ops_deqd_total >
+                                       test_burst_size * 8);
 
                }
 
-- 
2.17.1

Reply via email to