app/test-crypto-perf: improve dequeue logic
Checks
Commit Message
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.goyal@nxp.com>
---
app/test-crypto-perf/cperf_test_throughput.c | 40 +++++++++++---------
1 file changed, 23 insertions(+), 17 deletions(-)
Comments
Hi Akhil,
This patch seems introduced performance degradation on my server with
QAT DH895XCC by more than 10% for big packets (>=256).
Fiona/Pablo, could you have a try with it?
Regards,
Fan
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Akhil Goyal
> Sent: Wednesday, March 27, 2019 11:48 AM
> To: dev@dpdk.org
> Cc: Doherty, Declan <declan.doherty@intel.com>; Akhil Goyal
> <akhil.goyal@nxp.com>
> Subject: [dpdk-dev] [PATCH] app/test-crypto-perf: improve dequeue logic
>
> 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.goyal@nxp.com>
> ---
On 27/03/2019 11:47, Akhil Goyal wrote:
> 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.
>
Please add Fixes: tag and stable tag if appropriate.
> Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
@@ -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);
}