regex/mlx5: introduce driver for BlueField 2
This commit introduce the RegEx poll mode drivers class, and adds Mellanox RegEx PMD. Signed-off-by: Yuval Avnery <yuvalav@mellanox.com> Signed-off-by: Ori Kam <orika@mellanox.com>
This commit is contained in:
parent
3a66b2f90b
commit
cf9b3c36e5
1
.gitignore
vendored
1
.gitignore
vendored
@ -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
|
||||
|
||||
|
11
MAINTAINERS
11
MAINTAINERS
@ -454,6 +454,7 @@ RegEx API - EXPERIMENTAL
|
||||
M: Ori Kam <orika@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 <jerinj@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 <orika@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
|
||||
|
@ -374,6 +374,11 @@ CONFIG_RTE_LIBRTE_MLX4_DEBUG=n
|
||||
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
|
||||
#
|
||||
|
@ -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',
|
||||
|
@ -20,6 +20,7 @@ DPDK documentation
|
||||
cryptodevs/index
|
||||
compressdevs/index
|
||||
vdpadevs/index
|
||||
regexdevs/index
|
||||
eventdevs/index
|
||||
rawdevs/index
|
||||
mempool/index
|
||||
|
32
doc/guides/regexdevs/features/default.ini
Normal file
32
doc/guides/regexdevs/features/default.ini
Normal file
@ -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 =
|
8
doc/guides/regexdevs/features/mlx5.ini
Normal file
8
doc/guides/regexdevs/features/mlx5.ini
Normal file
@ -0,0 +1,8 @@
|
||||
;
|
||||
; Supported features of the 'mlx5' RegEx driver.
|
||||
;
|
||||
; Refer to default.ini for the full list of available driver features.
|
||||
;
|
||||
[Features]
|
||||
Armv8 = Y
|
||||
x86 = Y
|
100
doc/guides/regexdevs/features_overview.rst
Normal file
100
doc/guides/regexdevs/features_overview.rst
Normal file
@ -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.
|
15
doc/guides/regexdevs/index.rst
Normal file
15
doc/guides/regexdevs/index.rst
Normal file
@ -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
|
53
doc/guides/regexdevs/mlx5.rst
Normal file
53
doc/guides/regexdevs/mlx5.rst
Normal file
@ -0,0 +1,53 @@
|
||||
.. 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.
|
||||
|
||||
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.
|
||||
|
||||
Mellanox mlx5 pci device can be probed by number of different pci devices,
|
||||
for example net / vDPA / RegEx. To select the RegEx PMD ``class=regex`` should
|
||||
be specified as device parameter. The RegEx device can be probed and used with
|
||||
other Mellanox devices, by adding more options in the class.
|
||||
For example: ``class=net:regex`` will probe both the net PMD and the RegEx PMD.
|
||||
|
||||
Supported NICs
|
||||
--------------
|
||||
|
||||
* Mellanox\ |reg| BlueField 2 SmartNIC
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
- BlueField 2 running Mellanox supported kernel.
|
||||
- Enable the RegEx capabilities using system call from the BlueField 2.
|
||||
- Official support is not yet released.
|
||||
|
||||
Run-time configuration
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- **ethtool** operations on related kernel interfaces also affect the PMD.
|
@ -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
|
||||
|
@ -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 bus
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_VHOST) += vdpa
|
||||
DEPDIRS-vdpa := common bus mempool
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -210,6 +210,7 @@ int mlx5_get_ifname_sysfs(const char *ibdev_path, char *ifname);
|
||||
enum mlx5_class {
|
||||
MLX5_CLASS_NET,
|
||||
MLX5_CLASS_VDPA,
|
||||
MLX5_CLASS_REGEX,
|
||||
MLX5_CLASS_INVALID,
|
||||
};
|
||||
|
||||
|
@ -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.
|
||||
|
8
drivers/regex/Makefile
Normal file
8
drivers/regex/Makefile
Normal file
@ -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
|
7
drivers/regex/meson.build
Normal file
7
drivers/regex/meson.build
Normal file
@ -0,0 +1,7 @@
|
||||
# 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
|
||||
config_flag_fmt = 'RTE_LIBRTE_@0@_PMD'
|
||||
driver_name_fmt = 'rte_pmd_@0@'
|
34
drivers/regex/mlx5/Makefile
Normal file
34
drivers/regex/mlx5/Makefile
Normal file
@ -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 -lrte_regexdev
|
||||
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
|
26
drivers/regex/mlx5/meson.build
Normal file
26
drivers/regex/mlx5/meson.build
Normal file
@ -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', 'regexdev']
|
||||
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
|
5
drivers/regex/mlx5/mlx5_regex.c
Normal file
5
drivers/regex/mlx5/mlx5_regex.c
Normal file
@ -0,0 +1,5 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
* Copyright 2020 Mellanox Technologies, Ltd
|
||||
*/
|
||||
|
||||
#include "mlx5_regex.h"
|
8
drivers/regex/mlx5/mlx5_regex.h
Normal file
8
drivers/regex/mlx5/mlx5_regex.h
Normal file
@ -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 */
|
3
drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map
Normal file
3
drivers/regex/mlx5/rte_pmd_mlx5_regex_version.map
Normal file
@ -0,0 +1,3 @@
|
||||
DPDK_21 {
|
||||
local: *;
|
||||
};
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user