From 237aad88245b554071e124f7a4eedadf6c430f9c Mon Sep 17 00:00:00 2001 From: Raja Zidane Date: Thu, 29 Jul 2021 17:11:08 +0300 Subject: [PATCH] compress/mlx5: fix compression level translation Compression Level is interpreted by each PMD differently. However, lower numbers give faster compression at the expense of compression ratio, while higher numbers may give better compression ratios but are likely slower. The level affects the block size, which affects performance, the bigger the block, the faster the compression is. The problem was that higher levels caused bigger blocks: size = min_block_size - 1 + level. the solution is to reverse the above: size = max_block_size + 1 - level. Fixes: 39a2c8715f8f ("compress/mlx5: add transformation operations") Cc: stable@dpdk.org Signed-off-by: Raja Zidane Acked-by: Matan Azrad --- drivers/compress/mlx5/mlx5_compress.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c index 5c2b9dc859..883e720ec1 100644 --- a/drivers/compress/mlx5/mlx5_compress.c +++ b/drivers/compress/mlx5/mlx5_compress.c @@ -316,12 +316,19 @@ mlx5_compress_xform_create(struct rte_compressdev *dev, size /= MLX5_GGA_COMP_WIN_SIZE_UNITS; xfrm->gga_ctrl1 += RTE_MIN(rte_log2_u32(size), MLX5_COMP_MAX_WIN_SIZE_CONF) << - WQE_GGA_COMP_WIN_SIZE_OFFSET; - if (xform->compress.level == RTE_COMP_LEVEL_PMD_DEFAULT) + WQE_GGA_COMP_WIN_SIZE_OFFSET; + switch (xform->compress.level) { + case RTE_COMP_LEVEL_PMD_DEFAULT: size = MLX5_GGA_COMP_LOG_BLOCK_SIZE_MAX; - else - size = priv->min_block_size - 1 + - xform->compress.level; + break; + case RTE_COMP_LEVEL_MAX: + size = priv->min_block_size; + break; + default: + size = RTE_MAX(MLX5_GGA_COMP_LOG_BLOCK_SIZE_MAX + + 1 - xform->compress.level, + priv->min_block_size); + } xfrm->gga_ctrl1 += RTE_MIN(size, MLX5_GGA_COMP_LOG_BLOCK_SIZE_MAX) << WQE_GGA_COMP_BLOCK_SIZE_OFFSET; -- 2.20.1