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