From patchwork Fri Feb 15 09:44:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Jozwiak X-Patchwork-Id: 50335 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C23081B4A1; Fri, 15 Feb 2019 10:44:39 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 135D7271 for ; Fri, 15 Feb 2019 10:44:37 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Feb 2019 01:44:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,372,1544515200"; d="scan'208";a="147096454" Received: from tjozwiax-mobl.ger.corp.intel.com (HELO tojo-Virtual-Machine.mshome.net) ([10.104.12.176]) by fmsmga001.fm.intel.com with ESMTP; 15 Feb 2019 01:44:36 -0800 From: Tomasz Jozwiak To: dev@dpdk.org, fiona.trahe@intel.com, tomaszx.jozwiak@intel.com Date: Fri, 15 Feb 2019 10:44:32 +0100 Message-Id: <1550223873-17119-2-git-send-email-tomaszx.jozwiak@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550223873-17119-1-git-send-email-tomaszx.jozwiak@intel.com> References: <1550223873-17119-1-git-send-email-tomaszx.jozwiak@intel.com> Subject: [dpdk-dev] [PATCH] compress/qat: add fallback to fixed compression X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Fiona Trahe --- doc/guides/cryptodevs/qat.rst | 10 +++++----- drivers/compress/qat/qat_comp.c | 24 ++++++++++++++++++++++++ drivers/compress/qat/qat_comp.h | 3 +++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst index b079aa3..907c2a9 100644 --- a/doc/guides/cryptodevs/qat.rst +++ b/doc/guides/cryptodevs/qat.rst @@ -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 diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c index 32ca753..b9367d3 100644 --- a/drivers/compress/qat/qat_comp.c +++ b/drivers/compress/qat/qat_comp.c @@ -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) - diff --git a/drivers/compress/qat/qat_comp.h b/drivers/compress/qat/qat_comp.h index 19f48df..12b37b1 100644 --- a/drivers/compress/qat/qat_comp.h +++ b/drivers/compress/qat/qat_comp.h @@ -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,