compress/qat: add fallback to fixed compression
This patch adds fallback to fixed compression feature during dynamic compression, when the input data size is greater than IM buffer size / 1.1. This feature doesn't stop compression proccess when IM buffer can be too small to handle produced data. Signed-off-by: Tomasz Jozwiak <tomaszx.jozwiak@intel.com> Acked-by: Fiona Trahe <fiona.trahe@intel.com>
This commit is contained in:
parent
fff7b0ddce
commit
a720e6740a
@ -188,11 +188,11 @@ allocated while for GEN1 devices, 12 buffers are allocated, plus 1472 bytes over
|
||||
|
||||
If the compressed output of a Deflate operation using Dynamic Huffman
|
||||
Encoding is too big to fit in an intermediate buffer, then the
|
||||
operation will return RTE_COMP_OP_STATUS_ERROR and an error will be
|
||||
displayed. Options for the application in this case
|
||||
are to split the input data into smaller chunks and resubmit
|
||||
in multiple operations or to configure QAT with
|
||||
larger intermediate buffers.
|
||||
operation will fall back to fixed compression rather than failing the operation.
|
||||
To avoid this less performant case, applications should configure
|
||||
the intermediate buffer size to be larger than the expected input data size
|
||||
(compressed output size is usually unknown, so the only option is to make
|
||||
larger than the input size).
|
||||
|
||||
|
||||
Device and driver naming
|
||||
|
@ -43,6 +43,30 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg,
|
||||
rte_mov128(out_msg, tmpl);
|
||||
comp_req->comn_mid.opaque_data = (uint64_t)(uintptr_t)op;
|
||||
|
||||
if (likely(qat_xform->qat_comp_request_type ==
|
||||
QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS)) {
|
||||
if (unlikely(op->src.length > QAT_FALLBACK_THLD)) {
|
||||
|
||||
/* fallback to fixed compression */
|
||||
comp_req->comn_hdr.service_cmd_id =
|
||||
ICP_QAT_FW_COMP_CMD_STATIC;
|
||||
|
||||
ICP_QAT_FW_COMN_NEXT_ID_SET(&comp_req->comp_cd_ctrl,
|
||||
ICP_QAT_FW_SLICE_DRAM_WR);
|
||||
|
||||
ICP_QAT_FW_COMN_NEXT_ID_SET(&comp_req->u2.xlt_cd_ctrl,
|
||||
ICP_QAT_FW_SLICE_NULL);
|
||||
ICP_QAT_FW_COMN_CURR_ID_SET(&comp_req->u2.xlt_cd_ctrl,
|
||||
ICP_QAT_FW_SLICE_NULL);
|
||||
|
||||
QAT_DP_LOG(DEBUG, "QAT PMD: fallback to fixed "
|
||||
"compression! IM buffer size can be too low "
|
||||
"for produced data.\n Please use input "
|
||||
"buffer length lower than %d bytes",
|
||||
QAT_FALLBACK_THLD);
|
||||
}
|
||||
}
|
||||
|
||||
/* common for sgl and flat buffers */
|
||||
comp_req->comp_pars.comp_len = op->src.length;
|
||||
comp_req->comp_pars.out_buffer_sz = rte_pktmbuf_pkt_len(op->m_dst) -
|
||||
|
@ -21,6 +21,9 @@
|
||||
|
||||
#define ERR_CODE_QAT_COMP_WRONG_FW -99
|
||||
|
||||
/* fallback to fixed compression threshold */
|
||||
#define QAT_FALLBACK_THLD ((uint32_t)(RTE_PMD_QAT_COMP_IM_BUFFER_SIZE / 1.1))
|
||||
|
||||
enum qat_comp_request_type {
|
||||
QAT_COMP_REQUEST_FIXED_COMP_STATELESS,
|
||||
QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS,
|
||||
|
Loading…
x
Reference in New Issue
Block a user