12695db95SArtur Trybula /* SPDX-License-Identifier: BSD-3-Clause
22695db95SArtur Trybula * Copyright(c) 2018 Intel Corporation
32695db95SArtur Trybula */
42695db95SArtur Trybula
572b452c5SDmitry Kozlyuk #include <stdlib.h>
672b452c5SDmitry Kozlyuk
72695db95SArtur Trybula #include <rte_malloc.h>
82695db95SArtur Trybula #include <rte_eal.h>
92695db95SArtur Trybula #include <rte_log.h>
102695db95SArtur Trybula #include <rte_cycles.h>
112695db95SArtur Trybula #include <rte_compressdev.h>
122695db95SArtur Trybula
132695db95SArtur Trybula #include "comp_perf_test_throughput.h"
142695db95SArtur Trybula
152695db95SArtur Trybula void
cperf_throughput_test_destructor(void * arg)162695db95SArtur Trybula cperf_throughput_test_destructor(void *arg)
172695db95SArtur Trybula {
182695db95SArtur Trybula if (arg) {
192695db95SArtur Trybula comp_perf_free_memory(
202695db95SArtur Trybula ((struct cperf_benchmark_ctx *)arg)->ver.options,
212695db95SArtur Trybula &((struct cperf_benchmark_ctx *)arg)->ver.mem);
222695db95SArtur Trybula rte_free(arg);
232695db95SArtur Trybula }
242695db95SArtur Trybula }
252695db95SArtur Trybula
262695db95SArtur Trybula void *
cperf_throughput_test_constructor(uint8_t dev_id,uint16_t qp_id,struct comp_test_data * options)272695db95SArtur Trybula cperf_throughput_test_constructor(uint8_t dev_id, uint16_t qp_id,
282695db95SArtur Trybula struct comp_test_data *options)
292695db95SArtur Trybula {
302695db95SArtur Trybula struct cperf_benchmark_ctx *ctx = NULL;
312695db95SArtur Trybula
322695db95SArtur Trybula ctx = rte_malloc(NULL, sizeof(struct cperf_benchmark_ctx), 0);
332695db95SArtur Trybula
342695db95SArtur Trybula if (ctx == NULL)
352695db95SArtur Trybula return NULL;
362695db95SArtur Trybula
372695db95SArtur Trybula ctx->ver.mem.dev_id = dev_id;
382695db95SArtur Trybula ctx->ver.mem.qp_id = qp_id;
392695db95SArtur Trybula ctx->ver.options = options;
402695db95SArtur Trybula ctx->ver.silent = 1; /* ver. part will be silent */
412695db95SArtur Trybula
422695db95SArtur Trybula if (!comp_perf_allocate_memory(ctx->ver.options, &ctx->ver.mem)
432695db95SArtur Trybula && !prepare_bufs(ctx->ver.options, &ctx->ver.mem))
442695db95SArtur Trybula return ctx;
452695db95SArtur Trybula
462695db95SArtur Trybula cperf_throughput_test_destructor(ctx);
472695db95SArtur Trybula return NULL;
482695db95SArtur Trybula }
492695db95SArtur Trybula
502695db95SArtur Trybula static int
main_loop(struct cperf_benchmark_ctx * ctx,enum rte_comp_xform_type type)512695db95SArtur Trybula main_loop(struct cperf_benchmark_ctx *ctx, enum rte_comp_xform_type type)
522695db95SArtur Trybula {
532695db95SArtur Trybula struct comp_test_data *test_data = ctx->ver.options;
542695db95SArtur Trybula struct cperf_mem_resources *mem = &ctx->ver.mem;
552695db95SArtur Trybula uint8_t dev_id = mem->dev_id;
562695db95SArtur Trybula uint32_t i, iter, num_iter;
572695db95SArtur Trybula struct rte_comp_op **ops, **deq_ops;
582695db95SArtur Trybula void *priv_xform = NULL;
592695db95SArtur Trybula struct rte_comp_xform xform;
602695db95SArtur Trybula struct rte_mbuf **input_bufs, **output_bufs;
612695db95SArtur Trybula int res = 0;
622695db95SArtur Trybula int allocated = 0;
632695db95SArtur Trybula uint32_t out_seg_sz;
642695db95SArtur Trybula
652695db95SArtur Trybula if (test_data == NULL || !test_data->burst_sz) {
662695db95SArtur Trybula RTE_LOG(ERR, USER1,
672695db95SArtur Trybula "Unknown burst size\n");
682695db95SArtur Trybula return -1;
692695db95SArtur Trybula }
702695db95SArtur Trybula
712695db95SArtur Trybula ops = rte_zmalloc_socket(NULL,
722695db95SArtur Trybula 2 * mem->total_bufs * sizeof(struct rte_comp_op *),
732695db95SArtur Trybula 0, rte_socket_id());
742695db95SArtur Trybula
752695db95SArtur Trybula if (ops == NULL) {
762695db95SArtur Trybula RTE_LOG(ERR, USER1,
777be78d02SJosh Soref "Can't allocate memory for ops structures\n");
782695db95SArtur Trybula return -1;
792695db95SArtur Trybula }
802695db95SArtur Trybula
812695db95SArtur Trybula deq_ops = &ops[mem->total_bufs];
822695db95SArtur Trybula
832695db95SArtur Trybula if (type == RTE_COMP_COMPRESS) {
842695db95SArtur Trybula xform = (struct rte_comp_xform) {
852695db95SArtur Trybula .type = RTE_COMP_COMPRESS,
862695db95SArtur Trybula .compress = {
8772c64a34SMichael Baum .algo = test_data->test_algo,
882695db95SArtur Trybula .level = test_data->level,
892695db95SArtur Trybula .window_size = test_data->window_sz,
902695db95SArtur Trybula .chksum = RTE_COMP_CHECKSUM_NONE,
912695db95SArtur Trybula .hash_algo = RTE_COMP_HASH_ALGO_NONE
922695db95SArtur Trybula }
932695db95SArtur Trybula };
9472c64a34SMichael Baum if (test_data->test_algo == RTE_COMP_ALGO_DEFLATE)
9572c64a34SMichael Baum xform.compress.deflate.huffman = test_data->huffman_enc;
9672c64a34SMichael Baum else if (test_data->test_algo == RTE_COMP_ALGO_LZ4)
9772c64a34SMichael Baum xform.compress.lz4.flags = test_data->lz4_flags;
982695db95SArtur Trybula input_bufs = mem->decomp_bufs;
992695db95SArtur Trybula output_bufs = mem->comp_bufs;
1002695db95SArtur Trybula out_seg_sz = test_data->out_seg_sz;
1012695db95SArtur Trybula } else {
1022695db95SArtur Trybula xform = (struct rte_comp_xform) {
1032695db95SArtur Trybula .type = RTE_COMP_DECOMPRESS,
1042695db95SArtur Trybula .decompress = {
10572c64a34SMichael Baum .algo = test_data->test_algo,
1062695db95SArtur Trybula .chksum = RTE_COMP_CHECKSUM_NONE,
1072695db95SArtur Trybula .window_size = test_data->window_sz,
1082695db95SArtur Trybula .hash_algo = RTE_COMP_HASH_ALGO_NONE
1092695db95SArtur Trybula }
1102695db95SArtur Trybula };
11172c64a34SMichael Baum if (test_data->test_algo == RTE_COMP_ALGO_LZ4)
11272c64a34SMichael Baum xform.decompress.lz4.flags = test_data->lz4_flags;
1132695db95SArtur Trybula input_bufs = mem->comp_bufs;
1142695db95SArtur Trybula output_bufs = mem->decomp_bufs;
1152695db95SArtur Trybula out_seg_sz = test_data->seg_sz;
1162695db95SArtur Trybula }
1172695db95SArtur Trybula
1182695db95SArtur Trybula /* Create private xform */
1192695db95SArtur Trybula if (rte_compressdev_private_xform_create(dev_id, &xform,
1202695db95SArtur Trybula &priv_xform) < 0) {
1212695db95SArtur Trybula RTE_LOG(ERR, USER1, "Private xform could not be created\n");
1222695db95SArtur Trybula res = -1;
1232695db95SArtur Trybula goto end;
1242695db95SArtur Trybula }
1252695db95SArtur Trybula
1262695db95SArtur Trybula uint64_t tsc_start, tsc_end, tsc_duration;
1272695db95SArtur Trybula
1282695db95SArtur Trybula num_iter = test_data->num_iter;
1292695db95SArtur Trybula tsc_start = tsc_end = tsc_duration = 0;
1302695db95SArtur Trybula tsc_start = rte_rdtsc_precise();
1312695db95SArtur Trybula
1322695db95SArtur Trybula for (iter = 0; iter < num_iter; iter++) {
1332695db95SArtur Trybula uint32_t total_ops = mem->total_bufs;
1342695db95SArtur Trybula uint32_t remaining_ops = mem->total_bufs;
1352695db95SArtur Trybula uint32_t total_deq_ops = 0;
1362695db95SArtur Trybula uint32_t total_enq_ops = 0;
1372695db95SArtur Trybula uint16_t ops_unused = 0;
1382695db95SArtur Trybula uint16_t num_enq = 0;
1392695db95SArtur Trybula uint16_t num_deq = 0;
1402695db95SArtur Trybula
1412695db95SArtur Trybula while (remaining_ops > 0) {
1422695db95SArtur Trybula uint16_t num_ops = RTE_MIN(remaining_ops,
1432695db95SArtur Trybula test_data->burst_sz);
1442695db95SArtur Trybula uint16_t ops_needed = num_ops - ops_unused;
1452695db95SArtur Trybula
1462695db95SArtur Trybula /*
1472695db95SArtur Trybula * Move the unused operations from the previous
1482695db95SArtur Trybula * enqueue_burst call to the front, to maintain order
1492695db95SArtur Trybula */
1502695db95SArtur Trybula if ((ops_unused > 0) && (num_enq > 0)) {
1512695db95SArtur Trybula size_t nb_b_to_mov =
1522695db95SArtur Trybula ops_unused * sizeof(struct rte_comp_op *);
1532695db95SArtur Trybula
1542695db95SArtur Trybula memmove(ops, &ops[num_enq], nb_b_to_mov);
1552695db95SArtur Trybula }
1562695db95SArtur Trybula
1572695db95SArtur Trybula /* Allocate compression operations */
1582695db95SArtur Trybula if (ops_needed && !rte_comp_op_bulk_alloc(
1592695db95SArtur Trybula mem->op_pool,
1602695db95SArtur Trybula &ops[ops_unused],
1612695db95SArtur Trybula ops_needed)) {
1622695db95SArtur Trybula RTE_LOG(ERR, USER1,
1632695db95SArtur Trybula "Could not allocate enough operations\n");
1642695db95SArtur Trybula res = -1;
1652695db95SArtur Trybula goto end;
1662695db95SArtur Trybula }
1672695db95SArtur Trybula allocated += ops_needed;
1682695db95SArtur Trybula
1692695db95SArtur Trybula for (i = 0; i < ops_needed; i++) {
1702695db95SArtur Trybula /*
1712695db95SArtur Trybula * Calculate next buffer to attach to operation
1722695db95SArtur Trybula */
1732695db95SArtur Trybula uint32_t buf_id = total_enq_ops + i +
1742695db95SArtur Trybula ops_unused;
1752695db95SArtur Trybula uint16_t op_id = ops_unused + i;
1762695db95SArtur Trybula /* Reset all data in output buffers */
1772695db95SArtur Trybula struct rte_mbuf *m = output_bufs[buf_id];
1782695db95SArtur Trybula
1792695db95SArtur Trybula m->pkt_len = out_seg_sz * m->nb_segs;
1802695db95SArtur Trybula while (m) {
1812695db95SArtur Trybula m->data_len = m->buf_len - m->data_off;
1822695db95SArtur Trybula m = m->next;
1832695db95SArtur Trybula }
1842695db95SArtur Trybula ops[op_id]->m_src = input_bufs[buf_id];
1852695db95SArtur Trybula ops[op_id]->m_dst = output_bufs[buf_id];
1862695db95SArtur Trybula ops[op_id]->src.offset = 0;
1872695db95SArtur Trybula ops[op_id]->src.length =
1882695db95SArtur Trybula rte_pktmbuf_pkt_len(input_bufs[buf_id]);
1892695db95SArtur Trybula ops[op_id]->dst.offset = 0;
1902695db95SArtur Trybula ops[op_id]->flush_flag = RTE_COMP_FLUSH_FINAL;
1912695db95SArtur Trybula ops[op_id]->input_chksum = buf_id;
1922695db95SArtur Trybula ops[op_id]->private_xform = priv_xform;
1932695db95SArtur Trybula }
1942695db95SArtur Trybula
1952695db95SArtur Trybula if (unlikely(test_data->perf_comp_force_stop))
1962695db95SArtur Trybula goto end;
1972695db95SArtur Trybula
1982695db95SArtur Trybula num_enq = rte_compressdev_enqueue_burst(dev_id,
1992695db95SArtur Trybula mem->qp_id, ops,
2002695db95SArtur Trybula num_ops);
2012695db95SArtur Trybula if (num_enq == 0) {
2022695db95SArtur Trybula struct rte_compressdev_stats stats;
2032695db95SArtur Trybula
2042695db95SArtur Trybula rte_compressdev_stats_get(dev_id, &stats);
2052695db95SArtur Trybula if (stats.enqueue_err_count) {
2062695db95SArtur Trybula res = -1;
2072695db95SArtur Trybula goto end;
2082695db95SArtur Trybula }
2092695db95SArtur Trybula }
2102695db95SArtur Trybula
2112695db95SArtur Trybula ops_unused = num_ops - num_enq;
2122695db95SArtur Trybula remaining_ops -= num_enq;
2132695db95SArtur Trybula total_enq_ops += num_enq;
2142695db95SArtur Trybula
2152695db95SArtur Trybula num_deq = rte_compressdev_dequeue_burst(dev_id,
2162695db95SArtur Trybula mem->qp_id,
2172695db95SArtur Trybula deq_ops,
2182695db95SArtur Trybula test_data->burst_sz);
2192695db95SArtur Trybula total_deq_ops += num_deq;
2202695db95SArtur Trybula
2212695db95SArtur Trybula if (iter == num_iter - 1) {
2222695db95SArtur Trybula for (i = 0; i < num_deq; i++) {
2232695db95SArtur Trybula struct rte_comp_op *op = deq_ops[i];
2242695db95SArtur Trybula
2252695db95SArtur Trybula if (op->status !=
2262695db95SArtur Trybula RTE_COMP_OP_STATUS_SUCCESS) {
2272695db95SArtur Trybula RTE_LOG(ERR, USER1,
2282695db95SArtur Trybula "Some operations were not successful\n");
2292695db95SArtur Trybula goto end;
2302695db95SArtur Trybula }
2312695db95SArtur Trybula
2322695db95SArtur Trybula struct rte_mbuf *m = op->m_dst;
2332695db95SArtur Trybula
2342695db95SArtur Trybula m->pkt_len = op->produced;
2352695db95SArtur Trybula uint32_t remaining_data = op->produced;
2362695db95SArtur Trybula uint16_t data_to_append;
2372695db95SArtur Trybula
2382695db95SArtur Trybula while (remaining_data > 0) {
2392695db95SArtur Trybula data_to_append =
2402695db95SArtur Trybula RTE_MIN(remaining_data,
2412695db95SArtur Trybula out_seg_sz);
2422695db95SArtur Trybula m->data_len = data_to_append;
2432695db95SArtur Trybula remaining_data -=
2442695db95SArtur Trybula data_to_append;
2452695db95SArtur Trybula m = m->next;
2462695db95SArtur Trybula }
2472695db95SArtur Trybula }
2482695db95SArtur Trybula }
2492695db95SArtur Trybula rte_mempool_put_bulk(mem->op_pool,
2502695db95SArtur Trybula (void **)deq_ops, num_deq);
2512695db95SArtur Trybula allocated -= num_deq;
2522695db95SArtur Trybula }
2532695db95SArtur Trybula
2542695db95SArtur Trybula /* Dequeue the last operations */
2552695db95SArtur Trybula while (total_deq_ops < total_ops) {
2562695db95SArtur Trybula if (unlikely(test_data->perf_comp_force_stop))
2572695db95SArtur Trybula goto end;
2582695db95SArtur Trybula
2592695db95SArtur Trybula num_deq = rte_compressdev_dequeue_burst(dev_id,
2602695db95SArtur Trybula mem->qp_id,
2612695db95SArtur Trybula deq_ops,
2622695db95SArtur Trybula test_data->burst_sz);
2632695db95SArtur Trybula if (num_deq == 0) {
2642695db95SArtur Trybula struct rte_compressdev_stats stats;
2652695db95SArtur Trybula
2662695db95SArtur Trybula rte_compressdev_stats_get(dev_id, &stats);
2672695db95SArtur Trybula if (stats.dequeue_err_count) {
2682695db95SArtur Trybula res = -1;
2692695db95SArtur Trybula goto end;
2702695db95SArtur Trybula }
2712695db95SArtur Trybula }
2722695db95SArtur Trybula
2732695db95SArtur Trybula total_deq_ops += num_deq;
2742695db95SArtur Trybula
2752695db95SArtur Trybula if (iter == num_iter - 1) {
2762695db95SArtur Trybula for (i = 0; i < num_deq; i++) {
2772695db95SArtur Trybula struct rte_comp_op *op = deq_ops[i];
2782695db95SArtur Trybula
2792695db95SArtur Trybula if (op->status !=
2802695db95SArtur Trybula RTE_COMP_OP_STATUS_SUCCESS) {
2812695db95SArtur Trybula RTE_LOG(ERR, USER1,
2822695db95SArtur Trybula "Some operations were not successful\n");
2832695db95SArtur Trybula goto end;
2842695db95SArtur Trybula }
2852695db95SArtur Trybula
2862695db95SArtur Trybula struct rte_mbuf *m = op->m_dst;
2872695db95SArtur Trybula
2882695db95SArtur Trybula m->pkt_len = op->produced;
2892695db95SArtur Trybula uint32_t remaining_data = op->produced;
2902695db95SArtur Trybula uint16_t data_to_append;
2912695db95SArtur Trybula
2922695db95SArtur Trybula while (remaining_data > 0) {
2932695db95SArtur Trybula data_to_append =
2942695db95SArtur Trybula RTE_MIN(remaining_data,
2952695db95SArtur Trybula out_seg_sz);
2962695db95SArtur Trybula m->data_len = data_to_append;
2972695db95SArtur Trybula remaining_data -=
2982695db95SArtur Trybula data_to_append;
2992695db95SArtur Trybula m = m->next;
3002695db95SArtur Trybula }
3012695db95SArtur Trybula }
3022695db95SArtur Trybula }
3032695db95SArtur Trybula rte_mempool_put_bulk(mem->op_pool,
3042695db95SArtur Trybula (void **)deq_ops, num_deq);
3052695db95SArtur Trybula allocated -= num_deq;
3062695db95SArtur Trybula }
3072695db95SArtur Trybula }
3082695db95SArtur Trybula
3092695db95SArtur Trybula tsc_end = rte_rdtsc_precise();
3102695db95SArtur Trybula tsc_duration = tsc_end - tsc_start;
3112695db95SArtur Trybula
3122695db95SArtur Trybula if (type == RTE_COMP_COMPRESS)
3132695db95SArtur Trybula ctx->comp_tsc_duration[test_data->level] =
3142695db95SArtur Trybula tsc_duration / num_iter;
3152695db95SArtur Trybula else
3162695db95SArtur Trybula ctx->decomp_tsc_duration[test_data->level] =
3172695db95SArtur Trybula tsc_duration / num_iter;
3182695db95SArtur Trybula
3192695db95SArtur Trybula end:
3202695db95SArtur Trybula rte_mempool_put_bulk(mem->op_pool, (void **)ops, allocated);
3212695db95SArtur Trybula rte_compressdev_private_xform_free(dev_id, priv_xform);
3222695db95SArtur Trybula rte_free(ops);
3232695db95SArtur Trybula
3242695db95SArtur Trybula if (test_data->perf_comp_force_stop) {
3252695db95SArtur Trybula RTE_LOG(ERR, USER1,
3262695db95SArtur Trybula "lcore: %d Perf. test has been aborted by user\n",
3272695db95SArtur Trybula mem->lcore_id);
3282695db95SArtur Trybula res = -1;
3292695db95SArtur Trybula }
3302695db95SArtur Trybula return res;
3312695db95SArtur Trybula }
3322695db95SArtur Trybula
3332695db95SArtur Trybula int
cperf_throughput_test_runner(void * test_ctx)3342695db95SArtur Trybula cperf_throughput_test_runner(void *test_ctx)
3352695db95SArtur Trybula {
3362695db95SArtur Trybula struct cperf_benchmark_ctx *ctx = test_ctx;
3372695db95SArtur Trybula struct comp_test_data *test_data = ctx->ver.options;
3382695db95SArtur Trybula uint32_t lcore = rte_lcore_id();
339*b6a7e685STyler Retzlaff static RTE_ATOMIC(uint16_t) display_once;
3402695db95SArtur Trybula int i, ret = EXIT_SUCCESS;
3412695db95SArtur Trybula
3422695db95SArtur Trybula ctx->ver.mem.lcore_id = lcore;
3432695db95SArtur Trybula
344d3fcd87cSJoyce Kong uint16_t exp = 0;
3452695db95SArtur Trybula /*
3462695db95SArtur Trybula * printing information about current compression thread
3472695db95SArtur Trybula */
348*b6a7e685STyler Retzlaff if (rte_atomic_compare_exchange_strong_explicit(&ctx->ver.mem.print_info_once, &exp,
349*b6a7e685STyler Retzlaff 1, rte_memory_order_relaxed, rte_memory_order_relaxed))
3502695db95SArtur Trybula printf(" lcore: %u,"
3512695db95SArtur Trybula " driver name: %s,"
3522695db95SArtur Trybula " device name: %s,"
3532695db95SArtur Trybula " device id: %u,"
3542695db95SArtur Trybula " socket id: %u,"
3552695db95SArtur Trybula " queue pair id: %u\n",
3562695db95SArtur Trybula lcore,
3572695db95SArtur Trybula ctx->ver.options->driver_name,
3582695db95SArtur Trybula rte_compressdev_name_get(ctx->ver.mem.dev_id),
3592695db95SArtur Trybula ctx->ver.mem.dev_id,
3602695db95SArtur Trybula rte_compressdev_socket_id(ctx->ver.mem.dev_id),
3612695db95SArtur Trybula ctx->ver.mem.qp_id);
3622695db95SArtur Trybula
3632695db95SArtur Trybula /*
3642695db95SArtur Trybula * First the verification part is needed
3652695db95SArtur Trybula */
3662695db95SArtur Trybula if (cperf_verify_test_runner(&ctx->ver)) {
3672695db95SArtur Trybula ret = EXIT_FAILURE;
3682695db95SArtur Trybula goto end;
3692695db95SArtur Trybula }
3702695db95SArtur Trybula
37183cc3b90SMichael Baum if (test_data->test_op & COMPRESS) {
3722695db95SArtur Trybula /*
37383cc3b90SMichael Baum * Run the test twice, discarding the first performance
3742695db95SArtur Trybula * results, before the cache is warmed up
3752695db95SArtur Trybula */
3762695db95SArtur Trybula for (i = 0; i < 2; i++) {
3772695db95SArtur Trybula if (main_loop(ctx, RTE_COMP_COMPRESS) < 0) {
3782695db95SArtur Trybula ret = EXIT_FAILURE;
3792695db95SArtur Trybula goto end;
3802695db95SArtur Trybula }
3812695db95SArtur Trybula }
3822695db95SArtur Trybula
38383cc3b90SMichael Baum ctx->comp_tsc_byte =
38483cc3b90SMichael Baum (double)(ctx->comp_tsc_duration[test_data->level]) /
38583cc3b90SMichael Baum test_data->input_data_sz;
38683cc3b90SMichael Baum ctx->comp_gbps = rte_get_tsc_hz() / ctx->comp_tsc_byte * 8 /
38783cc3b90SMichael Baum 1000000000;
38883cc3b90SMichael Baum } else {
38983cc3b90SMichael Baum ctx->comp_tsc_byte = 0;
39083cc3b90SMichael Baum ctx->comp_gbps = 0;
39183cc3b90SMichael Baum }
39283cc3b90SMichael Baum
39383cc3b90SMichael Baum if (test_data->test_op & DECOMPRESS) {
39483cc3b90SMichael Baum /*
39583cc3b90SMichael Baum * Run the test twice, discarding the first performance
39683cc3b90SMichael Baum * results, before the cache is warmed up
39783cc3b90SMichael Baum */
3982695db95SArtur Trybula for (i = 0; i < 2; i++) {
3992695db95SArtur Trybula if (main_loop(ctx, RTE_COMP_DECOMPRESS) < 0) {
4002695db95SArtur Trybula ret = EXIT_FAILURE;
4012695db95SArtur Trybula goto end;
4022695db95SArtur Trybula }
4032695db95SArtur Trybula }
4042695db95SArtur Trybula
4052695db95SArtur Trybula ctx->decomp_tsc_byte =
4062695db95SArtur Trybula (double)(ctx->decomp_tsc_duration[test_data->level]) /
4072695db95SArtur Trybula test_data->input_data_sz;
4082695db95SArtur Trybula ctx->decomp_gbps = rte_get_tsc_hz() / ctx->decomp_tsc_byte * 8 /
4092695db95SArtur Trybula 1000000000;
41083cc3b90SMichael Baum } else {
41183cc3b90SMichael Baum ctx->decomp_tsc_byte = 0;
41283cc3b90SMichael Baum ctx->decomp_gbps = 0;
41383cc3b90SMichael Baum }
4142695db95SArtur Trybula
415d3fcd87cSJoyce Kong exp = 0;
416*b6a7e685STyler Retzlaff if (rte_atomic_compare_exchange_strong_explicit(&display_once, &exp, 1,
417*b6a7e685STyler Retzlaff rte_memory_order_relaxed, rte_memory_order_relaxed)) {
4182695db95SArtur Trybula printf("\n%12s%6s%12s%17s%15s%16s\n",
4192695db95SArtur Trybula "lcore id", "Level", "Comp size", "Comp ratio [%]",
4202695db95SArtur Trybula "Comp [Gbps]", "Decomp [Gbps]");
4212695db95SArtur Trybula }
4222695db95SArtur Trybula
4232695db95SArtur Trybula printf("%12u%6u%12zu%17.2f%15.2f%16.2f\n",
4242695db95SArtur Trybula ctx->ver.mem.lcore_id,
4252695db95SArtur Trybula test_data->level, ctx->ver.comp_data_sz, ctx->ver.ratio,
4262695db95SArtur Trybula ctx->comp_gbps,
4272695db95SArtur Trybula ctx->decomp_gbps);
4282695db95SArtur Trybula
4292695db95SArtur Trybula end:
4302695db95SArtur Trybula return ret;
4312695db95SArtur Trybula }
432