Add test cases to test legacy and rte_ring_xxx_elem APIs for burst enqueue/dequeue test cases.
Signed-off-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> Reviewed-by: Gavin Hu <gavin...@arm.com> --- app/test/test_ring_perf.c | 78 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/app/test/test_ring_perf.c b/app/test/test_ring_perf.c index 5829718c1..508c688dc 100644 --- a/app/test/test_ring_perf.c +++ b/app/test/test_ring_perf.c @@ -397,47 +397,40 @@ test_single_enqueue_dequeue(struct rte_ring *r, const int esize, } /* - * Test that does both enqueue and dequeue on a core using the burst() API calls - * instead of the bulk() calls used in other tests. Results should be the same - * as for the bulk function called on a single lcore. + * Test that does both enqueue and dequeue on a core using the burst/bulk API + * calls Results should be the same as for the bulk function called on a + * single lcore. */ -static void -test_burst_enqueue_dequeue(struct rte_ring *r) +static int +test_burst_bulk_enqueue_dequeue(struct rte_ring *r, const int esize, + const unsigned int api_type) { - const unsigned iter_shift = 23; - const unsigned iterations = 1<<iter_shift; - unsigned sz, i = 0; - void *burst[MAX_BURST] = {0}; + int ret; + const unsigned int iter_shift = 23; + const unsigned int iterations = 1 << iter_shift; + unsigned int sz, i = 0; + void **burst = NULL; - for (sz = 0; sz < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); sz++) { - const uint64_t sc_start = rte_rdtsc(); - for (i = 0; i < iterations; i++) { - rte_ring_sp_enqueue_burst(r, burst, - bulk_sizes[sz], NULL); - rte_ring_sc_dequeue_burst(r, burst, - bulk_sizes[sz], NULL); - } - const uint64_t sc_end = rte_rdtsc(); + (void)ret; + burst = test_ring_calloc(MAX_BURST, esize); + if (burst == NULL) + return -1; - const uint64_t mc_start = rte_rdtsc(); + for (sz = 0; sz < RTE_DIM(bulk_sizes); sz++) { + const uint64_t start = rte_rdtsc(); for (i = 0; i < iterations; i++) { - rte_ring_mp_enqueue_burst(r, burst, - bulk_sizes[sz], NULL); - rte_ring_mc_dequeue_burst(r, burst, - bulk_sizes[sz], NULL); + TEST_RING_ENQUEUE(r, burst, esize, bulk_sizes[sz], + ret, api_type); + TEST_RING_DEQUEUE(r, burst, esize, bulk_sizes[sz], + ret, api_type); } - const uint64_t mc_end = rte_rdtsc(); - - double mc_avg = ((double)(mc_end-mc_start) / iterations) / - bulk_sizes[sz]; - double sc_avg = ((double)(sc_end-sc_start) / iterations) / - bulk_sizes[sz]; + const uint64_t end = rte_rdtsc(); - printf("SP/SC burst enq/dequeue (size: %u): %.2F\n", - bulk_sizes[sz], sc_avg); - printf("MP/MC burst enq/dequeue (size: %u): %.2F\n", - bulk_sizes[sz], mc_avg); + test_ring_print_test_string(api_type, esize, bulk_sizes[sz], + ((double)(end - start)) / iterations); } + + return 0; } /* Times enqueue and dequeue on a single lcore */ @@ -499,7 +492,13 @@ test_ring_perf(void) return -1; if (test_single_enqueue_dequeue(r, -1, TEST_RING_M | TEST_RING_SL) < 0) return -1; - + printf("\n### Testing burst enq/deq ###\n"); + if (test_burst_bulk_enqueue_dequeue(r, -1, + TEST_RING_S | TEST_RING_BR) < 0) + return -1; + if (test_burst_bulk_enqueue_dequeue(r, -1, + TEST_RING_M | TEST_RING_BR) < 0) + return -1; rte_ring_free(r); TEST_RING_CREATE(RING_NAME, 16, RING_SIZE, rte_socket_id(), 0, r); @@ -511,16 +510,19 @@ test_ring_perf(void) return -1; if (test_single_enqueue_dequeue(r, 16, TEST_RING_M | TEST_RING_SL) < 0) return -1; - + printf("\n### Testing burst enq/deq ###\n"); + if (test_burst_bulk_enqueue_dequeue(r, 16, + TEST_RING_S | TEST_RING_BR) < 0) + return -1; + if (test_burst_bulk_enqueue_dequeue(r, 16, + TEST_RING_M | TEST_RING_BR) < 0) + return -1; rte_ring_free(r); r = rte_ring_create(RING_NAME, RING_SIZE, rte_socket_id(), 0); if (r == NULL) return -1; - printf("### Testing single element and burst enq/deq ###\n"); - test_burst_enqueue_dequeue(r); - printf("\n### Testing empty dequeue ###\n"); test_empty_dequeue(r); -- 2.17.1