From patchwork Thu Mar 2 20:22:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hernan Vargas X-Patchwork-Id: 124746 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2582741DB8; Thu, 2 Mar 2023 21:23:03 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 381C842D3A; Thu, 2 Mar 2023 21:22:09 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 51C3A42D1A for ; Thu, 2 Mar 2023 21:22:03 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1677788523; x=1709324523; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sfMWY+PrH2Nt32jm1wJ6vXs+HyvwZYAONVwxMRkkGyU=; b=Bm4Mo4xevmTQX5E7T5x0pDmXNszBC7wUyLaup7ttcNa6uZOGvfgP8pF+ z8BLvQOeYzhB+DNLIQBqwm2p8fxooXTj1GIWIfsE5CD0BNhlXox/eYHfw DKljJ+m0DRS8n9EtTq4BHG8rlQSLnbPc8w75HrKyGNT2M/XyHgnso7DIZ BCj82HE+HOcSUv7cJNnvyXN8TNb+8S0Eem7LP454h/9ql6GFRmHgRJMxS XOMU3z9rMsZkS5rJfdBFOr81oJk/7GgEJIX6zrv9bchZJdcDs9DHRBmbZ S11K4Tg5pWB6PpaNI6gL77n6u0KeqeOCL9jcOrG5EhkVNRAdemVEMlzNV Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10637"; a="334871200" X-IronPort-AV: E=Sophos;i="5.98,228,1673942400"; d="scan'208";a="334871200" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Mar 2023 12:22:02 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10637"; a="705398118" X-IronPort-AV: E=Sophos;i="5.98,228,1673942400"; d="scan'208";a="705398118" Received: from unknown (HELO csl-npg-qt0.la.intel.com) ([10.233.181.103]) by orsmga008.jf.intel.com with ESMTP; 02 Mar 2023 12:22:01 -0800 From: Hernan Vargas To: dev@dpdk.org, gakhil@marvell.com, trix@redhat.com, maxime.coquelin@redhat.com Cc: nicolas.chautru@intel.com, qi.z.zhang@intel.com, Hernan Vargas Subject: [PATCH v3 09/17] test/bbdev: add timeout for enq/deq loops Date: Thu, 2 Mar 2023 12:22:03 -0800 Message-Id: <20230302202211.170017-10-hernan.vargas@intel.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230302202211.170017-1-hernan.vargas@intel.com> References: <20230302202211.170017-1-hernan.vargas@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Added timeout to prevent infinite loop condition if the device doesn't enqueue/dequeue. Signed-off-by: Hernan Vargas Reviewed-by: Maxime Coquelin --- app/test-bbdev/test_bbdev_perf.c | 133 ++++++++++++++++++++++++++----- 1 file changed, 113 insertions(+), 20 deletions(-) diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c index 7bfc4cd5779e..7a4841a069ee 100644 --- a/app/test-bbdev/test_bbdev_perf.c +++ b/app/test-bbdev/test_bbdev_perf.c @@ -192,6 +192,15 @@ struct test_time_stats { typedef int (test_case_function)(struct active_device *ad, struct test_op_params *op_params); +/* Get device status before timeout exit */ +static inline void +timeout_exit(uint8_t dev_id) +{ + struct rte_bbdev_info info; + rte_bbdev_info_get(dev_id, &info); + printf("Device Status %s\n", rte_bbdev_device_status_str(info.drv.device_status)); +} + static inline void mbuf_reset(struct rte_mbuf *m) { @@ -3553,7 +3562,7 @@ throughput_pmd_lcore_dec(void *arg) 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]->turbo_dec.hard_output.data); if (so_enable) @@ -3573,12 +3582,23 @@ throughput_pmd_lcore_dec(void *arg) deq += rte_bbdev_dequeue_dec_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_dec_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; @@ -3669,6 +3689,7 @@ bler_pmd_lcore_ldpc_dec(void *arg) ops_enq[j]->opaque_data = (void *)(uintptr_t)j; for (i = 0; i < 1; ++i) { /* Could add more iterations */ + uint32_t time_out = 0; for (j = 0; j < num_ops; ++j) { if (!loopback) mbuf_reset( @@ -3692,12 +3713,23 @@ bler_pmd_lcore_ldpc_dec(void *arg) deq += rte_bbdev_dequeue_ldpc_dec_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_ldpc_dec_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; @@ -3796,6 +3828,7 @@ throughput_pmd_lcore_ldpc_dec(void *arg) 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) { if (!loopback) mbuf_reset( @@ -3820,12 +3853,23 @@ throughput_pmd_lcore_ldpc_dec(void *arg) deq += rte_bbdev_dequeue_ldpc_dec_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_ldpc_dec_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; @@ -3907,7 +3951,7 @@ throughput_pmd_lcore_enc(void *arg) ops_enq[j]->opaque_data = (void *)(uintptr_t)j; for (i = 0; i < TEST_REPETITIONS; ++i) { - + uint32_t time_out = 0; if (test_vector.op_type != RTE_BBDEV_OP_NONE) for (j = 0; j < num_ops; ++j) mbuf_reset(ops_enq[j]->turbo_enc.output.data); @@ -3925,12 +3969,23 @@ throughput_pmd_lcore_enc(void *arg) deq += rte_bbdev_dequeue_enc_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_enc_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; @@ -3997,7 +4052,7 @@ throughput_pmd_lcore_ldpc_enc(void *arg) ops_enq[j]->opaque_data = (void *)(uintptr_t)j; for (i = 0; i < TEST_REPETITIONS; ++i) { - + uint32_t time_out = 0; if (test_vector.op_type != RTE_BBDEV_OP_NONE) for (j = 0; j < num_ops; ++j) mbuf_reset(ops_enq[j]->turbo_enc.output.data); @@ -4015,12 +4070,23 @@ throughput_pmd_lcore_ldpc_enc(void *arg) deq += rte_bbdev_dequeue_ldpc_enc_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_ldpc_enc_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; @@ -4086,7 +4152,7 @@ throughput_pmd_lcore_fft(void *arg) 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]->fft.base_output.data); @@ -4103,12 +4169,23 @@ throughput_pmd_lcore_fft(void *arg) deq += rte_bbdev_dequeue_fft_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_fft_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; @@ -4481,6 +4558,7 @@ latency_test_dec(struct rte_mempool *mempool, 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; @@ -4523,6 +4601,11 @@ latency_test_dec(struct rte_mempool *mempool, 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); @@ -4615,7 +4698,11 @@ latency_test_ldpc_dec(struct rte_mempool *mempool, first_time = false; } time_out++; - } while ((burst_sz != deq) && (time_out < TIME_OUT_POLL)); + 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); @@ -4624,14 +4711,8 @@ latency_test_ldpc_dec(struct rte_mempool *mempool, if (extDdr) retrieve_harq_ddr(dev_id, queue_id, ops_enq, burst_sz); - if (burst_sz != deq) { - struct rte_bbdev_info info; - ret = TEST_FAILED; - rte_bbdev_info_get(dev_id, &info); - TEST_ASSERT_SUCCESS(ret, "Dequeue timeout!"); - } else if (test_vector.op_type != RTE_BBDEV_OP_NONE) { - ret = validate_ldpc_dec_op(ops_deq, burst_sz, ref_op, - vector_mask); + if (test_vector.op_type != RTE_BBDEV_OP_NONE) { + ret = validate_ldpc_dec_op(ops_deq, burst_sz, ref_op, vector_mask); TEST_ASSERT_SUCCESS(ret, "Validation failed!"); } @@ -4692,17 +4773,17 @@ latency_test_enc(struct rte_mempool *mempool, first_time = false; } time_out++; - } while ((burst_sz != deq) && (time_out < TIME_OUT_POLL)); + 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 (burst_sz != deq) { - struct rte_bbdev_info info; - ret = TEST_FAILED; - rte_bbdev_info_get(dev_id, &info); - TEST_ASSERT_SUCCESS(ret, "Dequeue timeout!"); - } else if (test_vector.op_type != RTE_BBDEV_OP_NONE) { + + if (test_vector.op_type != RTE_BBDEV_OP_NONE) { ret = validate_enc_op(ops_deq, burst_sz, ref_op); TEST_ASSERT_SUCCESS(ret, "Validation failed!"); } @@ -4728,6 +4809,7 @@ latency_test_ldpc_enc(struct rte_mempool *mempool, 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; @@ -4763,6 +4845,11 @@ latency_test_ldpc_enc(struct rte_mempool *mempool, 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); @@ -4796,6 +4883,7 @@ latency_test_fft(struct rte_mempool *mempool, 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; @@ -4831,6 +4919,11 @@ latency_test_fft(struct rte_mempool *mempool, 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);