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: 39a2c8715f ("compress/mlx5: add transformation operations")
Cc: stable@dpdk.org

Signed-off-by: Raja Zidane <rzidane@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
Raja Zidane 2021-07-29 17:11:08 +03:00 committed by Thomas Monjalon
parent cd9e2578d9
commit 237aad8824

View File

@ -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;