[Accel-config] [PATCH 3/8] enable shadow compression
"Guo, Lingyan" <[email protected]> Fri, 27 Oct 2023 11:06:50 +0800
| Newsgroups | dev.linux.lists.accel-config |
|---|---|
| Message-ID | <[email protected]> |
From: lingyan <[email protected]> change: current compress could be reuse by chaining, so make the refactory Signed-off-by: lingyan <[email protected]> --- test/accel_test.c | 2 ++ test/accel_test.h | 14 +++++++++----- test/iaa.c | 35 +++++++++++++++++++++++++++-------- test/iaa.h | 1 + test/iaa_prep.c | 16 +++++++++++++--- test/iaa_test.c | 7 +++++++ 6 files changed, 59 insertions(+), 16 deletions(-) diff --git a/test/accel_test.c b/test/accel_test.c index 61d9944..52a999c 100644 --- a/test/accel_test.c +++ b/test/accel_test.c @@ -491,6 +491,8 @@ void __clean_task(struct task *tsk) free(tsk->dst2); free(tsk->input); free(tsk->output); + if (tsk->is_shadow_compress) + free(tsk->shadown_src2); } void free_batch_task(struct batch_task *btsk) diff --git a/test/accel_test.h b/test/accel_test.h index fea0fe6..71f948c 100644 --- a/test/accel_test.h +++ b/test/accel_test.h @@ -55,6 +55,8 @@ struct task { uint32_t opcode; void *src1; void *src2; + int is_shadow_compress; //For chain operation & decompress use + void *shadown_src2; void *dst1; void *dst2; void *delta1; @@ -65,6 +67,7 @@ struct task { uint64_t pattern2; uint64_t xfer_size; uint32_t dflags; + uint32_t shadow_dflags; int test_flags; int crc_seed; unsigned long long *crc_seed_addr; @@ -81,14 +84,15 @@ struct task { uint16_t iaa_crc64_flags; uint16_t iaa_cipher_flags; }; - uint32_t iaa_max_dst_size; - uint32_t iaa_src2_xfer_size; + uint32_t iaa_max_dst_size; //Maximum Destination Size + uint32_t iaa_src2_xfer_size; //Source 2 Transfer Size + uint32_t iaa_shadow_src2_xfer_size; //Shadow Source 2 Transfer Size union { struct { - uint32_t iaa_filter_flags; - uint32_t iaa_num_inputs; + uint32_t iaa_filter_flags; //Filter Flags + uint32_t iaa_num_inputs; //Number of Input Elements }; - uint64_t iaa_crc64_poly; + uint64_t iaa_crc64_poly; //CRC Polynomial }; struct { uint8_t algorithm; diff --git a/test/iaa.c b/test/iaa.c index 61d71fb..7ed639c 100644 --- a/test/iaa.c +++ b/test/iaa.c @@ -275,6 +275,13 @@ static int init_decompress(struct task *tsk, int tflags, int opcode, unsigned lo memset_pattern(tsk->src1, 0, IAA_DECOMPRESS_MAX_DEST_SIZE); memcpy(tsk->src1, tsk->input, src1_xfer_size); + if (tsk->is_shadow_compress) { + tsk->shadown_src2 = aligned_alloc(32, IAA_COMPRESS_SRC2_SIZE); + if (!tsk->shadown_src2) + return -ENOMEM; + memset_pattern(tsk->shadown_src2, 0, IAA_COMPRESS_SRC2_SIZE); + } + tsk->src2 = aligned_alloc(32, IAA_DECOMPRESS_SRC2_SIZE); if (!tsk->src2) return -ENOMEM; @@ -1360,22 +1367,27 @@ static int iaa_wait_decompress(struct acctest_context *ctx, struct task *tsk) return ACCTEST_STATUS_OK; } -int iaa_decompress_multi_task_nodes(struct acctest_context *ctx) +int iaa_prehook_compress_multi_task_nodes(struct acctest_context *ctx) { struct task_node *tsk_node = ctx->multi_task_node; int ret = ACCTEST_STATUS_OK; // Compress while (tsk_node) { + if (tsk_node->tsk->is_shadow_compress != 1) + err("Error drop to prehook compress"); + tsk_node->tsk->opcode = IAX_OPCODE_COMPRESS; - tsk_node->tsk->dflags |= (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR); + tsk_node->tsk->shadow_dflags = (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR); if ((tsk_node->tsk->test_flags & TEST_FLAGS_BOF) && ctx->bof) - tsk_node->tsk->dflags |= IDXD_OP_FLAG_BOF; + tsk_node->tsk->shadow_dflags |= IDXD_OP_FLAG_BOF; - tsk_node->tsk->dflags |= (IDXD_OP_FLAG_WR_SRC2_CMPL | IDXD_OP_FLAG_RD_SRC2_AECS); - tsk_node->tsk->iaa_src2_xfer_size = IAA_COMPRESS_AECS_SIZE; + tsk_node->tsk->shadow_dflags |= (IDXD_OP_FLAG_WR_SRC2_CMPL + | IDXD_OP_FLAG_RD_SRC2_AECS); + tsk_node->tsk->iaa_shadow_src2_xfer_size = IAA_COMPRESS_AECS_SIZE; - memcpy(tsk_node->tsk->src2, (void *)iaa_compress_aecs, IAA_COMPRESS_AECS_SIZE); + memcpy(tsk_node->tsk->shadown_src2, (void *)iaa_compress_aecs, + IAA_COMPRESS_AECS_SIZE); tsk_node->tsk->iaa_compr_flags = (IDXD_COMPRESS_FLAG_EOB_BFINAL | IDXD_COMPRESS_FLAG_FLUSH_OUTPUT); @@ -1402,9 +1414,15 @@ int iaa_decompress_multi_task_nodes(struct acctest_context *ctx) } if (ret) { - printf("Before decompress, compress failed\n"); + printf("Prehook, compress failed\n"); return ret; } +} + +int iaa_decompress_multi_task_nodes(struct acctest_context *ctx) +{ + struct task_node *tsk_node = ctx->multi_task_node; + int ret = ACCTEST_STATUS_OK; // Decompress tsk_node = ctx->multi_task_node; @@ -1416,13 +1434,14 @@ int iaa_decompress_multi_task_nodes(struct acctest_context *ctx) tsk_node->tsk->opcode = IAX_OPCODE_DECOMPRESS; tsk_node->tsk->xfer_size = tsk_node->tsk->comp->iax_output_size; - tsk_node->tsk->dflags |= (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR); + tsk_node->tsk->dflags = (IDXD_OP_FLAG_CRAV | IDXD_OP_FLAG_RCR); if ((tsk_node->tsk->test_flags & TEST_FLAGS_BOF) && ctx->bof) tsk_node->tsk->dflags |= IDXD_OP_FLAG_BOF; tsk_node->tsk->dflags &= ~(IDXD_OP_FLAG_WR_SRC2_CMPL | IDXD_OP_FLAG_RD_SRC2_AECS); tsk_node->tsk->iaa_src2_xfer_size = 0; + free(tsk_node->tsk->src2); tsk_node->tsk->src2 = 0; tsk_node->tsk->iaa_decompr_flags = (IDXD_DECOMPRESS_FLAG_SELECT_EOB_BFINAL | diff --git a/test/iaa.h b/test/iaa.h index bbb4bad..ddbf1d9 100644 --- a/test/iaa.h +++ b/test/iaa.h @@ -18,6 +18,7 @@ int iaa_zdecompress16_multi_task_nodes(struct acctest_context *ctx); int iaa_zcompress32_multi_task_nodes(struct acctest_context *ctx); int iaa_zdecompress32_multi_task_nodes(struct acctest_context *ctx); int iaa_compress_multi_task_nodes(struct acctest_context *ctx); +int iaa_prehook_compress_multi_task_nodes(struct acctest_context *ctx); int iaa_decompress_multi_task_nodes(struct acctest_context *ctx); int iaa_scan_multi_task_nodes(struct acctest_context *ctx); int iaa_set_membership_multi_task_nodes(struct acctest_context *ctx); diff --git a/test/iaa_prep.c b/test/iaa_prep.c index 981a347..add8bf0 100644 --- a/test/iaa_prep.c +++ b/test/iaa_prep.c @@ -101,13 +101,23 @@ void iaa_prep_zdecompress32(struct task *tsk) void iaa_prep_compress(struct task *tsk) { info("preparing descriptor for compress\n"); + uint32_t dflags = tsk->dflags; + + if (tsk->is_shadow_compress) + dflags = tsk->shadow_dflags; acctest_prep_desc_common(tsk->desc, tsk->opcode, (uint64_t)(tsk->dst1), - (uint64_t)(tsk->src1), tsk->xfer_size, tsk->dflags); + (uint64_t)(tsk->src1), tsk->xfer_size, dflags); + tsk->desc->completion_addr = (uint64_t)(tsk->comp); tsk->desc->iax_compr_flags = tsk->iaa_compr_flags; - tsk->desc->iax_src2_addr = (uint64_t)(tsk->src2); - tsk->desc->iax_src2_xfer_size = tsk->iaa_src2_xfer_size; + if (tsk->is_shadow_compress) { + tsk->desc->iax_src2_addr = (uint64_t)(tsk->shadown_src2); + tsk->desc->iax_src2_xfer_size = tsk->iaa_shadow_src2_xfer_size; + } else { + tsk->desc->iax_src2_addr = (uint64_t)(tsk->src2); + tsk->desc->iax_src2_xfer_size = tsk->iaa_src2_xfer_size; + } tsk->desc->iax_max_dst_size = tsk->iaa_max_dst_size; tsk->comp->status = 0; } diff --git a/test/iaa_test.c b/test/iaa_test.c index 1417924..da76aef 100644 --- a/test/iaa_test.c +++ b/test/iaa_test.c @@ -273,6 +273,9 @@ static int test_compress(struct acctest_context *ctx, size_t buf_size, int tflag /* allocate memory to src and dest buffers and fill in the desc for all the nodes*/ tsk_node = ctx->multi_task_node; while (tsk_node) { + if (opcode == IAX_OPCODE_DECOMPRESS) + tsk_node->tsk->is_shadow_compress = 1; + tsk_node->tsk->iaa_compr_flags = extra_flags; rc = init_task(tsk_node->tsk, tflags, opcode, buf_size); @@ -294,6 +297,10 @@ static int test_compress(struct acctest_context *ctx, size_t buf_size, int tflag return rc; break; case IAX_OPCODE_DECOMPRESS: + rc = iaa_prehook_compress_multi_task_nodes(ctx); + if (rc != ACCTEST_STATUS_OK) + return rc; + rc = iaa_decompress_multi_task_nodes(ctx); if (rc != ACCTEST_STATUS_OK) return rc; -- 2.34.1