From: Yuval Avnery <yuva...@mellanox.com> This commit introduce the RegEx poll mode drivers class, and adds Mellanox RegEx PMD.
Signed-off-by: Yuval Avnery <yuva...@mellanox.com> Signed-off-by: Ori Kam <or...@mellanox.com> --- v3: * Address ML comments. v2: * Add docs. --- .gitignore | 1 + MAINTAINERS | 11 +++ config/common_base | 5 ++ doc/guides/conf.py | 7 +- doc/guides/index.rst | 1 + doc/guides/regexdevs/features/default.ini | 32 +++++++ doc/guides/regexdevs/features/mlx5.ini | 9 ++ doc/guides/regexdevs/features_overview.rst | 100 ++++++++++++++++++++++ doc/guides/regexdevs/index.rst | 15 ++++ doc/guides/regexdevs/mlx5.rst | 70 +++++++++++++++ doc/guides/rel_notes/release_20_08.rst | 2 + drivers/Makefile | 2 + drivers/common/Makefile | 2 +- drivers/common/mlx5/Makefile | 4 +- drivers/meson.build | 1 + drivers/regex/Makefile | 8 ++ drivers/regex/meson.build | 9 ++ drivers/regex/mlx5/Makefile | 34 ++++++++ drivers/regex/mlx5/meson.build | 26 ++++++ drivers/regex/mlx5/mlx5_regex.c | 5 ++ drivers/regex/mlx5/mlx5_regex.h | 8 ++ drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map | 3 + mk/rte.app.mk | 5 +- 23 files changed, 354 insertions(+), 6 deletions(-) create mode 100644 doc/guides/regexdevs/features/default.ini create mode 100644 doc/guides/regexdevs/features/mlx5.ini create mode 100644 doc/guides/regexdevs/features_overview.rst create mode 100644 doc/guides/regexdevs/index.rst create mode 100644 doc/guides/regexdevs/mlx5.rst create mode 100644 drivers/regex/Makefile create mode 100644 drivers/regex/meson.build create mode 100644 drivers/regex/mlx5/Makefile create mode 100644 drivers/regex/mlx5/meson.build create mode 100644 drivers/regex/mlx5/mlx5_regex.c create mode 100644 drivers/regex/mlx5/mlx5_regex.h create mode 100644 drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map diff --git a/.gitignore b/.gitignore index f2f8892..f73d93c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ doc/guides/cryptodevs/overview_auth_table.txt doc/guides/cryptodevs/overview_aead_table.txt doc/guides/cryptodevs/overview_asym_table.txt doc/guides/compressdevs/overview_feature_table.txt +doc/guides/regexdevs/overview_feature_table.txt doc/guides/vdpadevs/overview_feature_table.txt doc/guides/bbdevs/overview_feature_table.txt diff --git a/MAINTAINERS b/MAINTAINERS index 3cd402b..66ceb09 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -454,6 +454,7 @@ RegEx API - EXPERIMENTAL M: Ori Kam <or...@mellanox.com> F: lib/librte_regexdev/ F: doc/guides/prog_guide/regexdev.rst +F: doc/guides/regexdevs/features/default.ini Eventdev API M: Jerin Jacob <jer...@marvell.com> @@ -1128,6 +1129,16 @@ F: doc/guides/compressdevs/zlib.rst F: doc/guides/compressdevs/features/zlib.ini +RegEx Drivers +------------- + +Mellanox MLX5 +M: Ori Kam <or...@mellanox.com> +F: drivers/regex/mlx5/ +F: doc/guides/regexdevs/mlx5.rst +F: doc/guides/regexdevs/features/mlx5.ini + + vDPA Drivers ------------ T: git://dpdk.org/next/dpdk-next-virtio diff --git a/config/common_base b/config/common_base index f7a8824..f76585f 100644 --- a/config/common_base +++ b/config/common_base @@ -375,6 +375,11 @@ CONFIG_RTE_LIBRTE_MLX5_PMD=n CONFIG_RTE_LIBRTE_MLX5_DEBUG=n # +# Compile regex-oriented Mellanox PMD +# +CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD=n + +# # Compile vdpa-oriented Mellanox ConnectX-6 & BlueField (MLX5) PMD # CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD=n diff --git a/doc/guides/conf.py b/doc/guides/conf.py index 700e05e..d8fe5cc 100644 --- a/doc/guides/conf.py +++ b/doc/guides/conf.py @@ -47,7 +47,7 @@ master_doc = 'index' # Maximum feature description string length -feature_str_len = 25 +feature_str_len = 30 # Figures, tables and code-blocks automatically numbered if they have caption numfig = True @@ -409,6 +409,11 @@ def setup(app): 'Features', 'Features availability in compression drivers', 'Feature') + table_file = dirname(__file__) + '/regexdevs/overview_feature_table.txt' + generate_overview_table(table_file, 1, + 'Features', + 'Features availability in regex drivers', + 'Feature') table_file = dirname(__file__) + '/vdpadevs/overview_feature_table.txt' generate_overview_table(table_file, 1, 'Features', diff --git a/doc/guides/index.rst b/doc/guides/index.rst index 988c6ea..857f036 100644 --- a/doc/guides/index.rst +++ b/doc/guides/index.rst @@ -20,6 +20,7 @@ DPDK documentation cryptodevs/index compressdevs/index vdpadevs/index + regexdevs/index eventdevs/index rawdevs/index mempool/index diff --git a/doc/guides/regexdevs/features/default.ini b/doc/guides/regexdevs/features/default.ini new file mode 100644 index 0000000..10f6c50 --- /dev/null +++ b/doc/guides/regexdevs/features/default.ini @@ -0,0 +1,32 @@ +; +; Features of a default RegEx driver. +; +; This file defines the features that are valid for inclusion in +; the other driver files and also the order that they appear in +; the features table in the documentation. The feature description +; string should not exceed feature_str_len defined in conf.py. +; +[Features] +Cross buffer = +PCRE start anchor = +PCRE atomic grouping = +PCRE back reference = +PCRE back tracking ctrl = +PCRE call outs = +PCRE forward reference = +PCRE greedy = +PCRE match all = +PCRE match as end = +PCRE match point rst = +PCRE New line conventions = +PCRE new line SEQ = +PCRE look around = +PCRE possessive qualifiers = +PCRE subroutine references = +PCRE UTF 8 = +PCRE UTF 16 = +PCRE UTF 32 = +PCRE word boundary = +Run time compilation = +Armv8 = +x86 = diff --git a/doc/guides/regexdevs/features/mlx5.ini b/doc/guides/regexdevs/features/mlx5.ini new file mode 100644 index 0000000..9fe5f73 --- /dev/null +++ b/doc/guides/regexdevs/features/mlx5.ini @@ -0,0 +1,9 @@ +; +; Supported features of the 'mlx5' RegEx driver. +; +; Refer to default.ini for the full list of available driver features. +; +[Features] +Armv8 = Y +x86 = Y + diff --git a/doc/guides/regexdevs/features_overview.rst b/doc/guides/regexdevs/features_overview.rst new file mode 100644 index 0000000..793cae4 --- /dev/null +++ b/doc/guides/regexdevs/features_overview.rst @@ -0,0 +1,100 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright 2020 Mellanox Technologies, Ltd + +Overview of RegEx Drivers Features +================================== + +This section explains the supported features that are listed in the table below. + +Cross buffer + Support cross buffer detection. + +PCRE start anchor + Support PCRE start anchor. + +PCRE atomic grouping + Support PCRE atomic grouping. + +PCRE back reference + Support PCRE back regerence. + +PCRE back tracking ctrl + Support PCRE back tracking ctrl. + +PCRE call outs + Support PCRE call outes. + +PCRE forward reference + Support Forward reference. + +PCRE greedy + Support PCRE greedy mode. + +PCRE match all + Support PCRE match all. + +PCRE match as end + Support match as end. + +PCRE match point rst + Support PCRE match point reset directive. + +PCRE New line conventions + Support new line conventions. + +PCRE new line SEQ + Support new line sequence. + +PCRE look around + Support PCRE look around. + +PCRE possessive qualifiers + Support PCRE possessive qualifiers. + +PCRE subroutine references + Support PCRE subroutine references. + +PCRE UTF 8 + Support UTF-8. + +PCRE UTF 16 + Support UTF-16. + +PCRE UTF 32 + Support UTF-32. + +PCRE word boundary + Support word boundaries. + +Run time compilation + Support compilation during run time. + +Armv8 + Support armv8 (64bit) architecture. + +x86 + Support x86 architecture. + +.. note:: + + Most of the features capabilities should be provided by the drivers via the + RegEx ``info_get`` operation. + + +References +========== + + * `PCRE: PCRE pattern man page <https://www.pcre.org/original/doc/html/pcrepattern.html>`_ + + +Features Table +============== + +.. _table_regex_pmd_features: + +.. include:: overview_feature_table.txt + +.. Note:: + + Features marked with "P" are partially supported. Refer to the appropriate + driver guide in the following sections for details. diff --git a/doc/guides/regexdevs/index.rst b/doc/guides/regexdevs/index.rst new file mode 100644 index 0000000..04d8723 --- /dev/null +++ b/doc/guides/regexdevs/index.rst @@ -0,0 +1,15 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright 2020 Mellanox Technologies, Ltd + +REGEX Device Drivers +==================== + +The following are a list of RegEx (Regular Expression) device drivers, +which can be used from an application through RegEx API. + +.. toctree:: + :maxdepth: 2 + :numbered: + + features_overview + mlx5 diff --git a/doc/guides/regexdevs/mlx5.rst b/doc/guides/regexdevs/mlx5.rst new file mode 100644 index 0000000..ac340c4 --- /dev/null +++ b/doc/guides/regexdevs/mlx5.rst @@ -0,0 +1,70 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright 2020 Mellanox Technologies, Ltd + +.. include:: <isonum.txt> + +MLX5 RegEx driver +================= + +The MLX5 RegEx (Regular Expression) driver library +(**librte_pmd_mlx5_regex**) provides support for **Mellanox BlueField 2** +families of 25/50/100/200 Gb/s adapters. + +.. note:: + + Due to external dependencies, this driver is disabled in default + configuration of the "make" build. It can be enabled with + ``CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD=y`` or by using "meson" build system which + will detect dependencies. + + +Design +------ + +This PMD is configuring the RegEx HW engine. +For the PMD to work, the application must supply +a precompiled rule file in rof2 format. + +The PMD uses libibverbs and libmlx5 to access the device firmware +or directly the hardware components. +There are different levels of objects and bypassing abilities +to get the best performances: + +- Verbs is a complete high-level generic API +- Direct Verbs is a device-specific API +- DevX allows to access firmware objects + +Enabling librte_pmd_mlx5_regex causes DPDK applications to be linked against +libibverbs. + +A Mellanox mlx5 PCI device can be probed by either net/mlx5 driver or regex/mlx5 +driver but not in parallel. Hence, the user should decide the driver by disabling +the net device using ``CONFIG_RTE_LIBRTE_MLX5_PMD``. when using the make build system +or ``disable_drivers`` option when using the meson build with ``net/mlx5,vdpa/mlx5`` + +Supported NICs +-------------- + +* Mellanox\ |reg| BlueField 2 SmartNIC + +Prerequisites +------------- + +- BlueField 2 running Mellonx supported kernel. +- Enable the RegEx caps using system call from the BlueField 2. +- Official support is not yet released. + +Compilation options +~~~~~~~~~~~~~~~~~~~ + +These options can be modified in the ``.config`` file. + +- ``CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD`` (default **n**) + + Toggle compilation of librte_pmd_mlx5 itself. + + +Run-time configuration +~~~~~~~~~~~~~~~~~~~~~~ + +- **ethtool** operations on related kernel interfaces also affect the PMD. diff --git a/doc/guides/rel_notes/release_20_08.rst b/doc/guides/rel_notes/release_20_08.rst index f19b748..313e5c6 100644 --- a/doc/guides/rel_notes/release_20_08.rst +++ b/doc/guides/rel_notes/release_20_08.rst @@ -81,6 +81,8 @@ New Features Added the RegEx library which provides an API for offload of regular expressions search operations to hardware or software accelerator devices. + Added Mellanox RegEx PMD, allowing to offload RegEx searches. + * **Added eCPRI protocol support in rte_flow.** The ``ECPRI`` item has been added to support eCPRI packet offloading for diff --git a/drivers/Makefile b/drivers/Makefile index c70bdf9..b814e05 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -18,6 +18,8 @@ DIRS-$(CONFIG_RTE_LIBRTE_PMD_QAT) += common/qat DEPDIRS-common/qat := bus mempool DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += compress DEPDIRS-compress := bus mempool +DIRS-$(CONFIG_RTE_LIBRTE_REGEXDEV) += regex +DEPDIRS-regex := common DIRS-$(CONFIG_RTE_LIBRTE_VHOST) += vdpa DEPDIRS-vdpa := common bus mempool DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event diff --git a/drivers/common/Makefile b/drivers/common/Makefile index df2e840..cbc7107 100644 --- a/drivers/common/Makefile +++ b/drivers/common/Makefile @@ -36,7 +36,7 @@ ifneq (,$(findstring y,$(IAVF-y))) DIRS-y += iavf endif -ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)),y) +ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD)),y) DIRS-y += mlx5 endif diff --git a/drivers/common/mlx5/Makefile b/drivers/common/mlx5/Makefile index f6c762b..5f12be3 100644 --- a/drivers/common/mlx5/Makefile +++ b/drivers/common/mlx5/Makefile @@ -10,7 +10,7 @@ LIB_GLUE_BASE = librte_pmd_mlx5_glue.so LIB_GLUE_VERSION = 20.02.0 # Sources. -ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)),y) +ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD)),y) ifneq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y) SRCS-y += linux/mlx5_glue.c endif @@ -344,7 +344,7 @@ mlx5_autoconf.h: mlx5_autoconf.h.new cmp '$<' '$@' $(AUTOCONF_OUTPUT) || \ mv '$<' '$@' -ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)),y) +ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD)),y) $(SRCS-y:.c=.o): mlx5_autoconf.h endif diff --git a/drivers/meson.build b/drivers/meson.build index 161cfda..e76ebdd 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -9,6 +9,7 @@ dpdk_driver_classes = ['common', 'raw', # depends on common, bus and net. 'crypto', # depends on common, bus and mempool (net in future). 'compress', # depends on common, bus, mempool. + 'regex', # depends on common, bus, regexdev. 'vdpa', # depends on common, bus and mempool. 'event', # depends on common, bus, mempool and net. 'baseband'] # depends on common and bus. diff --git a/drivers/regex/Makefile b/drivers/regex/Makefile new file mode 100644 index 0000000..906b205 --- /dev/null +++ b/drivers/regex/Makefile @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 Mellanox Technologies, Ltd + +include $(RTE_SDK)/mk/rte.vars.mk + +DIRS-$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD) += mlx5 + +include $(RTE_SDK)/mk/rte.subdir.mk diff --git a/drivers/regex/meson.build b/drivers/regex/meson.build new file mode 100644 index 0000000..75522e3 --- /dev/null +++ b/drivers/regex/meson.build @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 Mellanox Technologies, Ltd + +drivers = ['mlx5'] +std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc +std_deps += ['bus_pci'] # very many PMDs depend on PCI, so make std +std_deps += ['bus_vdev'] # same with vdev bus +config_flag_fmt = 'RTE_LIBRTE_@0@_PMD' +driver_name_fmt = 'rte_pmd_@0@' diff --git a/drivers/regex/mlx5/Makefile b/drivers/regex/mlx5/Makefile new file mode 100644 index 0000000..1a16ab2 --- /dev/null +++ b/drivers/regex/mlx5/Makefile @@ -0,0 +1,34 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 Mellanox Technologies, Ltd + +include $(RTE_SDK)/mk/rte.vars.mk + +# Library name. +LIB = librte_pmd_mlx5_regex.a + +# Sources. +SRCS-$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD) += mlx5_regex.c + +# Basic CFLAGS. +CFLAGS += -O3 +CFLAGS += -std=c11 -Wall -Wextra +CFLAGS += -g +CFLAGS += -I$(RTE_SDK)/drivers/common/mlx5 +CFLAGS += -I$(BUILDDIR)/drivers/common/mlx5 +CFLAGS += -D_BSD_SOURCE +CFLAGS += -D_DEFAULT_SOURCE +CFLAGS += -D_XOPEN_SOURCE=600 +CFLAGS += $(WERROR_FLAGS) +CFLAGS += -Wno-strict-prototypes +LDLIBS += -lrte_common_mlx5 +LDLIBS += -lm +LDLIBS += -lrte_eal -lrte_mbuf +LDLIBS += -lrte_kvargs +LDLIBS += -lrte_bus_pci + +# A few warnings cannot be avoided in external headers. +CFLAGS += -Wno-error=cast-qual + +EXPORT_MAP := rte_pmd_mlx5_regex_version.map + +include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/regex/mlx5/meson.build b/drivers/regex/mlx5/meson.build new file mode 100644 index 0000000..8af2a3c --- /dev/null +++ b/drivers/regex/mlx5/meson.build @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 Mellanox Technologies, Ltd + +if not is_linux + build = false + reason = 'only supported on Linux' + subdir_done() +endif + +fmt_name = 'mlx5_regex' +deps += ['common_mlx5', 'bus_pci', 'eal'] +sources = files( + 'mlx5_regex.c', +) +cflags_options = [ + '-std=c11', + '-Wno-strict-prototypes', + '-D_BSD_SOURCE', + '-D_DEFAULT_SOURCE', + '-D_XOPEN_SOURCE=600' +] +foreach option:cflags_options + if cc.has_argument(option) + cflags += option + endif +endforeach diff --git a/drivers/regex/mlx5/mlx5_regex.c b/drivers/regex/mlx5/mlx5_regex.c new file mode 100644 index 0000000..b942a75 --- /dev/null +++ b/drivers/regex/mlx5/mlx5_regex.c @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#include "mlx5_regex.h" diff --git a/drivers/regex/mlx5/mlx5_regex.h b/drivers/regex/mlx5/mlx5_regex.h new file mode 100644 index 0000000..0e0495c --- /dev/null +++ b/drivers/regex/mlx5/mlx5_regex.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2020 Mellanox Technologies, Ltd + */ + +#ifndef MLX5_REGEX_H +#define MLX5_REGEX_H + +#endif /* MLX5_REGEX_H */ diff --git a/drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map b/drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map new file mode 100644 index 0000000..4a76d1d --- /dev/null +++ b/drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map @@ -0,0 +1,3 @@ +DPDK_21 { + local: *; +}; diff --git a/mk/rte.app.mk b/mk/rte.app.mk index 0ce8cf5..1b9551e 100644 --- a/mk/rte.app.mk +++ b/mk/rte.app.mk @@ -201,11 +201,12 @@ endif _LDLIBS-$(CONFIG_RTE_LIBRTE_LIO_PMD) += -lrte_pmd_lio _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_MEMIF) += -lrte_pmd_memif _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -lrte_pmd_mlx4 -ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)),y) +ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD)),y) _LDLIBS-y += -lrte_common_mlx5 endif _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += -lrte_pmd_mlx5 _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD) += -lrte_pmd_mlx5_vdpa +_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD) += -lrte_pmd_mlx5_regex ifeq ($(CONFIG_RTE_IBVERBS_LINK_DLOPEN),y) _LDLIBS-y += -ldl else ifeq ($(CONFIG_RTE_IBVERBS_LINK_STATIC),y) @@ -214,7 +215,7 @@ _LDLIBS-y += --no-whole-archive _LDLIBS-y += $(LIBS_IBVERBS_STATIC) _LDLIBS-y += --whole-archive else -ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)),y) +ifeq ($(findstring y,$(CONFIG_RTE_LIBRTE_MLX5_PMD)$(CONFIG_RTE_LIBRTE_MLX5_VDPA_PMD)$(CONFIG_RTE_LIBRTE_MLX5_REGEX_PMD)),y) _LDLIBS-y += -libverbs -lmlx5 endif _LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += -libverbs -lmlx4 -- 1.8.3.1