[v3,4/4] compressdev: add huffman encoding flags

Message ID 20180704141037.44021-4-pablo.de.lara.guarch@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Pablo de Lara Guarch
Headers
Series [v3,1/4] doc: cleanup ISA-L PMD feature matrix |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

De Lara Guarch, Pablo July 4, 2018, 2:10 p.m. UTC
  Added Huffman fixed and dynamic encoding feature flags,
so an application can query if a device supports
these two types, when performing DEFLATE compression.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
---

Changes in v3:

- No change

Changes in v2:

- Fixed typo

 drivers/compress/isal/isal_compress_pmd_ops.c |  4 +++-
 lib/librte_compressdev/rte_comp.c             |  4 ++++
 lib/librte_compressdev/rte_comp.h             |  4 ++++
 test/test/test_compressdev.c                  | 16 ++++++++++++++++
 4 files changed, 27 insertions(+), 1 deletion(-)
  

Comments

Verma, Shally July 5, 2018, 8:14 a.m. UTC | #1
>-----Original Message-----
>From: Pablo de Lara [mailto:pablo.de.lara.guarch@intel.com]
>Sent: 04 July 2018 19:41
>To: Verma, Shally <Shally.Verma@cavium.com>; Gupta, Ashish <Ashish.Gupta@cavium.com>; fiona.trahe@intel.com;
>lee.daly@intel.com
>Cc: dev@dpdk.org; Pablo de Lara <pablo.de.lara.guarch@intel.com>
>Subject: [PATCH v3 4/4] compressdev: add huffman encoding flags
>
>External Email
>
>Added Huffman fixed and dynamic encoding feature flags,
>so an application can query if a device supports
>these two types, when performing DEFLATE compression.
>
>Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
>Acked-by: Fiona Trahe <fiona.trahe@intel.com>
>---
>
>Changes in v3:
>
>- No change
>
>Changes in v2:
>
>- Fixed typo
>
> drivers/compress/isal/isal_compress_pmd_ops.c |  4 +++-
> lib/librte_compressdev/rte_comp.c             |  4 ++++
> lib/librte_compressdev/rte_comp.h             |  4 ++++
> test/test/test_compressdev.c                  | 16 ++++++++++++++++
> 4 files changed, 27 insertions(+), 1 deletion(-)
>

//snip

>diff --git a/lib/librte_compressdev/rte_comp.c b/lib/librte_compressdev/rte_comp.c
>index f5bd3a6c0..5ed1d0daa 100644
>--- a/lib/librte_compressdev/rte_comp.c
>+++ b/lib/librte_compressdev/rte_comp.c
>@@ -36,6 +36,10 @@ rte_comp_get_feature_name(uint64_t flag)
>                return "SHA2_SHA256_HASH";
>        case RTE_COMP_FF_SHAREABLE_PRIV_XFORM:
>                return "SHAREABLE_PRIV_XFORM";
>+       case RTE_COMP_FF_HUFFMAN_FIXED:
>+               return "HUFFMAN_FIXED";
>+       case RTE_COMP_FF_HUFFMAN_DYNAMIC:
>+               return "HUFFMAN_DYNAMIC";
>        default:
>                return NULL;
>        }
>diff --git a/lib/librte_compressdev/rte_comp.h b/lib/librte_compressdev/rte_comp.h
>index 6660cee82..c9245cce1 100644
>--- a/lib/librte_compressdev/rte_comp.h
>+++ b/lib/librte_compressdev/rte_comp.h
>@@ -62,6 +62,10 @@ extern "C" {
>  * to create as many priv_xforms as it expects to have stateless
>  * operations in-flight.
>  */
>+#define RTE_COMP_FF_HUFFMAN_FIXED              (1ULL << 13)
>+/**< Fixed huffman encoding is supported */
>+#define RTE_COMP_FF_HUFFMAN_DYNAMIC            (1ULL << 14)
>+/**< Dynamic huffman encoding is supported */
>

[Shally] As such okay to have this feature. But while looking at this, got a question:

rte_compressdev_info_get() returns feature flags of type RTE_COMPDEV_FF_xxx
and, rte_compressdev_capability_get() returns PMD capability for specific algo 
using feature flags of type RTE_COMP_FF_xxx. So,
 
1. should rte_compressdev_capability_get() and "struct rte_compressdev_capabilities" be changed to
rte_compressdev_comp_capability_get() or rte_compressdev_algo_capability_get()?

2. where does RTE_COMPDEV_FF_HW_ACCELERATED be set? in dev_info->feature flag or capability->feature_flag?
What if PMD support hw acceleration of one algo but have sw support of another. (say, deflate HW accelerated and LZS sw?)

Thanks
Shally

> /** Status of comp operation */
> enum rte_comp_op_status {
>diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c
>index 640942bac..f960963a4 100644
>--- a/test/test/test_compressdev.c
>+++ b/test/test/test_compressdev.c
>@@ -846,6 +846,14 @@ test_compressdev_deflate_stateless_fixed(void)
>        const char *test_buffer;
>        uint16_t i;
>        int ret;
>+       const struct rte_compressdev_capabilities *capab;
>+
>+       capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);
>+       TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities");
>+
>+       if ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0)
>+               return -ENOTSUP;
>+
>        struct rte_comp_xform *compress_xform =
>                        rte_malloc(NULL, sizeof(struct rte_comp_xform), 0);
>
>@@ -905,6 +913,14 @@ test_compressdev_deflate_stateless_dynamic(void)
>        struct rte_comp_xform *compress_xform =
>                        rte_malloc(NULL, sizeof(struct rte_comp_xform), 0);
>
>+       const struct rte_compressdev_capabilities *capab;
>+
>+       capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);
>+       TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities");
>+
>+       if ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)
>+               return -ENOTSUP;
>+
>        if (compress_xform == NULL) {
>                RTE_LOG(ERR, USER1,
>                        "Compress xform could not be created\n");
>--
>2.14.4
  
De Lara Guarch, Pablo July 5, 2018, 11:21 a.m. UTC | #2
> -----Original Message-----
> From: Verma, Shally [mailto:Shally.Verma@cavium.com]
> Sent: Thursday, July 5, 2018 9:14 AM
> To: De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Gupta, Ashish
> <Ashish.Gupta@cavium.com>; Trahe, Fiona <fiona.trahe@intel.com>; Daly, Lee
> <lee.daly@intel.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH v3 4/4] compressdev: add huffman encoding flags
> 
> 
> 
> >-----Original Message-----
> >From: Pablo de Lara [mailto:pablo.de.lara.guarch@intel.com]
> >Sent: 04 July 2018 19:41
> >To: Verma, Shally <Shally.Verma@cavium.com>; Gupta, Ashish
> ><Ashish.Gupta@cavium.com>; fiona.trahe@intel.com; lee.daly@intel.com
> >Cc: dev@dpdk.org; Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >Subject: [PATCH v3 4/4] compressdev: add huffman encoding flags
> >
> >External Email
> >
> >Added Huffman fixed and dynamic encoding feature flags, so an
> >application can query if a device supports these two types, when
> >performing DEFLATE compression.
> >
> >Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
> >Acked-by: Fiona Trahe <fiona.trahe@intel.com>
> >---
> >
> >Changes in v3:
> >
> >- No change
> >
> >Changes in v2:
> >
> >- Fixed typo
> >
> > drivers/compress/isal/isal_compress_pmd_ops.c |  4 +++-
> > lib/librte_compressdev/rte_comp.c             |  4 ++++
> > lib/librte_compressdev/rte_comp.h             |  4 ++++
> > test/test/test_compressdev.c                  | 16 ++++++++++++++++
> > 4 files changed, 27 insertions(+), 1 deletion(-)
> >
> 
> //snip
> 
> >diff --git a/lib/librte_compressdev/rte_comp.c
> >b/lib/librte_compressdev/rte_comp.c
> >index f5bd3a6c0..5ed1d0daa 100644
> >--- a/lib/librte_compressdev/rte_comp.c
> >+++ b/lib/librte_compressdev/rte_comp.c
> >@@ -36,6 +36,10 @@ rte_comp_get_feature_name(uint64_t flag)
> >                return "SHA2_SHA256_HASH";
> >        case RTE_COMP_FF_SHAREABLE_PRIV_XFORM:
> >                return "SHAREABLE_PRIV_XFORM";
> >+       case RTE_COMP_FF_HUFFMAN_FIXED:
> >+               return "HUFFMAN_FIXED";
> >+       case RTE_COMP_FF_HUFFMAN_DYNAMIC:
> >+               return "HUFFMAN_DYNAMIC";
> >        default:
> >                return NULL;
> >        }
> >diff --git a/lib/librte_compressdev/rte_comp.h
> >b/lib/librte_compressdev/rte_comp.h
> >index 6660cee82..c9245cce1 100644
> >--- a/lib/librte_compressdev/rte_comp.h
> >+++ b/lib/librte_compressdev/rte_comp.h
> >@@ -62,6 +62,10 @@ extern "C" {
> >  * to create as many priv_xforms as it expects to have stateless
> >  * operations in-flight.
> >  */
> >+#define RTE_COMP_FF_HUFFMAN_FIXED              (1ULL << 13)
> >+/**< Fixed huffman encoding is supported */
> >+#define RTE_COMP_FF_HUFFMAN_DYNAMIC            (1ULL << 14)
> >+/**< Dynamic huffman encoding is supported */
> >
> 
> [Shally] As such okay to have this feature. But while looking at this, got a
> question:
> 
> rte_compressdev_info_get() returns feature flags of type
> RTE_COMPDEV_FF_xxx and, rte_compressdev_capability_get() returns PMD
> capability for specific algo using feature flags of type RTE_COMP_FF_xxx. So,
> 
> 1. should rte_compressdev_capability_get() and "struct
> rte_compressdev_capabilities" be changed to
> rte_compressdev_comp_capability_get() or
> rte_compressdev_algo_capability_get()?

I would prefer to leave it as it is, as it matches the function name in cryptodev, which is doing something similar.
However, I don't have an strong opinion on this. Maybe Fiona can break the tie? :)

> 
> 2. where does RTE_COMPDEV_FF_HW_ACCELERATED be set? in dev_info-
> >feature flag or capability->feature_flag?
> What if PMD support hw acceleration of one algo but have sw support of
> another. (say, deflate HW accelerated and LZS sw?)

It is set in dev_info->feature_flag.
As far as I know, this is not expected. HW_ACCELERATED should apply to the whole device.
The device will be either hardware or software. If it is hardware, but it uses software-based
Implementation for an algorithm, still the device is hardware.

> 
> Thanks
> Shally
  

Patch

diff --git a/drivers/compress/isal/isal_compress_pmd_ops.c b/drivers/compress/isal/isal_compress_pmd_ops.c
index 970a0413b..585f22802 100644
--- a/drivers/compress/isal/isal_compress_pmd_ops.c
+++ b/drivers/compress/isal/isal_compress_pmd_ops.c
@@ -12,7 +12,9 @@ 
 static const struct rte_compressdev_capabilities isal_pmd_capabilities[] = {
 	{
 		.algo = RTE_COMP_ALGO_DEFLATE,
-		.comp_feature_flags =	RTE_COMP_FF_SHAREABLE_PRIV_XFORM,
+		.comp_feature_flags =	RTE_COMP_FF_SHAREABLE_PRIV_XFORM |
+					RTE_COMP_FF_HUFFMAN_FIXED |
+					RTE_COMP_FF_HUFFMAN_DYNAMIC,
 		.window_size = {
 			.min = 15,
 			.max = 15,
diff --git a/lib/librte_compressdev/rte_comp.c b/lib/librte_compressdev/rte_comp.c
index f5bd3a6c0..5ed1d0daa 100644
--- a/lib/librte_compressdev/rte_comp.c
+++ b/lib/librte_compressdev/rte_comp.c
@@ -36,6 +36,10 @@  rte_comp_get_feature_name(uint64_t flag)
 		return "SHA2_SHA256_HASH";
 	case RTE_COMP_FF_SHAREABLE_PRIV_XFORM:
 		return "SHAREABLE_PRIV_XFORM";
+	case RTE_COMP_FF_HUFFMAN_FIXED:
+		return "HUFFMAN_FIXED";
+	case RTE_COMP_FF_HUFFMAN_DYNAMIC:
+		return "HUFFMAN_DYNAMIC";
 	default:
 		return NULL;
 	}
diff --git a/lib/librte_compressdev/rte_comp.h b/lib/librte_compressdev/rte_comp.h
index 6660cee82..c9245cce1 100644
--- a/lib/librte_compressdev/rte_comp.h
+++ b/lib/librte_compressdev/rte_comp.h
@@ -62,6 +62,10 @@  extern "C" {
  * to create as many priv_xforms as it expects to have stateless
  * operations in-flight.
  */
+#define RTE_COMP_FF_HUFFMAN_FIXED		(1ULL << 13)
+/**< Fixed huffman encoding is supported */
+#define RTE_COMP_FF_HUFFMAN_DYNAMIC		(1ULL << 14)
+/**< Dynamic huffman encoding is supported */
 
 /** Status of comp operation */
 enum rte_comp_op_status {
diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c
index 640942bac..f960963a4 100644
--- a/test/test/test_compressdev.c
+++ b/test/test/test_compressdev.c
@@ -846,6 +846,14 @@  test_compressdev_deflate_stateless_fixed(void)
 	const char *test_buffer;
 	uint16_t i;
 	int ret;
+	const struct rte_compressdev_capabilities *capab;
+
+	capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);
+	TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities");
+
+	if ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0)
+		return -ENOTSUP;
+
 	struct rte_comp_xform *compress_xform =
 			rte_malloc(NULL, sizeof(struct rte_comp_xform), 0);
 
@@ -905,6 +913,14 @@  test_compressdev_deflate_stateless_dynamic(void)
 	struct rte_comp_xform *compress_xform =
 			rte_malloc(NULL, sizeof(struct rte_comp_xform), 0);
 
+	const struct rte_compressdev_capabilities *capab;
+
+	capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);
+	TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities");
+
+	if ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)
+		return -ENOTSUP;
+
 	if (compress_xform == NULL) {
 		RTE_LOG(ERR, USER1,
 			"Compress xform could not be created\n");