15. DPDK Release 17.08
15.1. New Features
Increase minimum x86 ISA version to SSE4.2.
Starting with version 17.08, DPDK requires SSE4.2 to run on x86. Previous versions required SSE3.
Added Service Core functionality.
The service core functionality added to EAL allows DPDK to run services such as software PMDs on lcores without the application manually running them. The service core infrastructure allows flexibility of running multiple services on the same service lcore, and provides the application with powerful APIs to configure the mapping from service lcores to services.
Added Generic Receive Offload API.
Added Generic Receive Offload (GRO) API support to reassemble TCP/IPv4 packets. The GRO API assumes all input packets have the correct checksums. GRO API doesn’t update checksums for merged packets. If input packets are IP fragmented, the GRO API assumes they are complete packets (i.e. with L4 headers).
Added Fail-Safe PMD
Added the new Fail-Safe PMD. This virtual device allows applications to support seamless hotplug of devices. See the Fail-safe poll mode driver library guide for more details about this driver.
Added support for generic flow API (rte_flow) on igb NICs.
This API provides a generic means of configuring hardware to match specific ingress or egress traffic, altering its behavior and querying related counters according to any number of user-defined rules.
Added generic flow API support for Ethernet, IPv4, UDP, TCP and RAW pattern items with QUEUE actions. There are four types of filter support for this feature on igb.
Added support for generic flow API (rte_flow) on enic.
Added flow API support for outer Ethernet, VLAN, IPv4, IPv6, UDP, TCP, SCTP, VxLAN and inner Ethernet, VLAN, IPv4, IPv6, UDP and TCP pattern items with QUEUE, MARK, FLAG and VOID actions for ingress traffic.
Added support for Chelsio T6 family of adapters
The CXGBE PMD was updated to run Chelsio T6 family of adapters.
Added latency and performance improvements for cxgbe
the Tx and Rx path in cxgbe were reworked to improve performance. In addition the latency was reduced for slow traffic.
Updated the bnxt PMD.
Updated the bnxt PMD. The major enhancements include:
Support MTU modification.
Add support for LRO.
Add support for VLAN filter and strip functionality.
Additional enhancements to add support for more dev_ops.
Added PMD specific APIs mainly to control VF from PF.
Update HWRM version to 1.7.7
Added support for Rx interrupts on mlx4 driver.
Rx queues can be now be armed with an interrupt which will trigger on the next packet arrival.
Updated mlx5 driver.
Updated the mlx5 driver including the following changes:
Added vectorized Rx/Tx burst for x86.
Added support for isolated mode from flow API.
Reworked the flow drop action to implement in hardware classifier.
Improved Rx interrupts management.
Updated szedata2 PMD.
Added support for firmware with multiple Ethernet ports per physical port.
Updated dpaa2 PMD.
Updated dpaa2 PMD. Major enhancements include:
Added support for MAC Filter configuration.
Added support for Segmented Buffers.
Added support for VLAN filter and strip functionality.
Additional enhancements to add support for more dev_ops.
Optimized the packet receive path
Reorganized the symmetric crypto operation structure.
The crypto operation (
rte_crypto_sym_op
) has been reorganized as follows:Removed the
rte_crypto_sym_op_sess_type
field.Replaced the pointer and physical address of IV with offset from the start of the crypto operation.
Moved length and offset of cipher IV to
rte_crypto_cipher_xform
.Removed “Additional Authentication Data” (AAD) length.
Removed digest length.
Removed AAD pointer and physical address from
auth
structure.Added
aead
structure, containing parameters for AEAD algorithms.
Reorganized the crypto operation structure.
The crypto operation (
rte_crypto_op
) has been reorganized as follows:Added the
rte_crypto_op_sess_type
field.The enumerations
rte_crypto_op_status
andrte_crypto_op_type
have been modified to beuint8_t
values.Removed the field
opaque_data
.Pointer to
rte_crypto_sym_op
has been replaced with a zero length array.
Reorganized the crypto symmetric session structure.
The crypto symmetric session structure (
rte_cryptodev_sym_session
) has been reorganized as follows:The
dev_id
field has been removed.The
driver_id
field has been removed.The mempool pointer
mp
has been removed.Replaced
private
marker with array of pointers to private data sessionssess_private_data
.
Updated cryptodev library.
Added AEAD algorithm specific functions and structures, so it is not necessary to use a combination of cipher and authentication structures anymore.
Added helper functions for crypto device driver identification.
Added support for multi-device sessions, so a single session can be used in multiple drivers.
Added functions to initialize and free individual driver private data with the same session.
Updated dpaa2_sec crypto PMD.
Added support for AES-GCM and AES-CTR.
Updated the AESNI MB PMD.
The AESNI MB PMD has been updated with additional support for:
12-byte IV on AES Counter Mode, apart from the previous 16-byte IV.
Updated the AES-NI GCM PMD.
The AES-NI GCM PMD was migrated from the ISA-L library to the Multi Buffer library, as the latter library has Scatter Gather List support now. The migration entailed adding additional support for 192-bit keys.
Updated the Cryptodev Scheduler PMD.
Added a multicore based distribution mode, which distributes the enqueued crypto operations among several slaves, running on different logical cores.
Added NXP DPAA2 Eventdev PMD.
Added the new dpaa2 eventdev driver for NXP DPAA2 devices. See the “Event Device Drivers” document for more details on this new driver.
Added dpdk-test-eventdev test application.
The dpdk-test-eventdev tool is a Data Plane Development Kit (DPDK) application that allows exercising various eventdev use cases. This application has a generic framework to add new eventdev based test cases to verify functionality and measure the performance parameters of DPDK eventdev devices.
15.2. Known Issues
Starting with version 17.08, libnuma is required to build DPDK.
15.3. API Changes
Modified the _rte_eth_dev_callback_process function in the ethdev library.
The function
_rte_eth_dev_callback_process()
has been modified. The return value has been changed from void to int and an extra parametervoid *ret_param
has been added.Moved bypass functions from the rte_ethdev library to ixgbe PMD
The following rte_ethdev library functions were removed:
rte_eth_dev_bypass_event_show()
rte_eth_dev_bypass_event_store()
rte_eth_dev_bypass_init()
rte_eth_dev_bypass_state_set()
rte_eth_dev_bypass_state_show()
rte_eth_dev_bypass_ver_show()
rte_eth_dev_bypass_wd_reset()
rte_eth_dev_bypass_wd_timeout_show()
rte_eth_dev_wd_timeout_store()
The following ixgbe PMD functions were added:
rte_pmd_ixgbe_bypass_event_show()
rte_pmd_ixgbe_bypass_event_store()
rte_pmd_ixgbe_bypass_init()
rte_pmd_ixgbe_bypass_state_set()
rte_pmd_ixgbe_bypass_state_show()
rte_pmd_ixgbe_bypass_ver_show()
rte_pmd_ixgbe_bypass_wd_reset()
rte_pmd_ixgbe_bypass_wd_timeout_show()
rte_pmd_ixgbe_bypass_wd_timeout_store()
Reworked rte_cryptodev library.
The rte_cryptodev library has been reworked and updated. The following changes have been made to it:
The crypto device type enumeration has been removed from cryptodev library.
The function
rte_crypto_count_devtype()
has been removed, and replaced by the new functionrte_crypto_count_by_driver()
.Moved crypto device driver names definitions to the particular PMDs. These names are not public anymore.
The
rte_cryptodev_configure()
function does not create the session mempool for the device anymore.The
rte_cryptodev_queue_pair_attach_sym_session()
andrte_cryptodev_queue_pair_dettach_sym_session()
functions require the new parameterdevice id
.Parameters of
rte_cryptodev_sym_session_create()
were modified to acceptmempool
, instead ofdevice id
andrte_crypto_sym_xform
.Removed
device id
parameter fromrte_cryptodev_sym_session_free()
.Added a new field
session_pool
torte_cryptodev_queue_pair_setup()
.Removed
aad_size
parameter fromrte_cryptodev_sym_capability_check_auth()
.Added
iv_size
parameter torte_cryptodev_sym_capability_check_auth()
.Removed
RTE_CRYPTO_OP_STATUS_ENQUEUED
from enumrte_crypto_op_status
.
15.4. ABI Changes
Changed type of
domain
field inrte_pci_addr
touint32_t
to follow the PCI standard.Added new
rte_bus
experimental APIs available as operators within therte_bus
structure.Made
rte_devargs
structure internal device representation generic to prepare for a bus-agnostic EAL.Reorganized the crypto operation structures.
Some fields have been modified in the
rte_crypto_op
andrte_crypto_sym_op
structures, as described in the New Features section.Reorganized the crypto symmetric session structure.
Some fields have been modified in the
rte_cryptodev_sym_session
structure, as described in the New Features section.Reorganized the rte_crypto_sym_cipher_xform structure.
Added cipher IV length and offset parameters.
Changed field size of key length from
size_t
touint16_t
.
Reorganized the rte_crypto_sym_auth_xform structure.
Added authentication IV length and offset parameters.
Changed field size of AAD length from
uint32_t
touint16_t
.Changed field size of digest length from
uint32_t
touint16_t
.Removed AAD length.
Changed field size of key length from
size_t
touint16_t
.
Replaced
dev_type
enumeration withuint8_t
driver_id
inrte_cryptodev_info
andrte_cryptodev
structures.Removed
session_mp
fromrte_cryptodev_config
.
15.6. Tested Platforms
Intel(R) platforms with Mellanox(R) NICs combinations
Platform details:
Intel(R) Xeon(R) CPU E5-2697A v4 @ 2.60GHz
Intel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz
Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
Intel(R) Xeon(R) CPU E5-2640 @ 2.50GHz
OS:
Red Hat Enterprise Linux Server release 7.3 (Maipo)
Red Hat Enterprise Linux Server release 7.2 (Maipo)
Ubuntu 16.10
Ubuntu 16.04
Ubuntu 14.04
MLNX_OFED: 4.1-1.0.2.0
NICs:
Mellanox(R) ConnectX(R)-3 Pro 40G MCX354A-FCC_Ax (2x40G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1007
Firmware version: 2.40.5030
Mellanox(R) ConnectX(R)-4 10G MCX4111A-XCAT (1x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 10G MCX4121A-XCAT (2x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 25G MCX4111A-ACAT (1x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 25G MCX4121A-ACAT (2x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 40G MCX4131A-BCAT/MCX413A-BCAT (1x40G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 40G MCX415A-BCAT (1x40G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 50G MCX4131A-GCAT/MCX413A-GCAT (1x50G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 50G MCX414A-BCAT (2x50G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 50G MCX415A-GCAT/MCX416A-BCAT/MCX416A-GCAT (2x50G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 50G MCX415A-CCAT (1x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 100G MCX416A-CCAT (2x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.18.2000
Mellanox(R) ConnectX(R)-4 Lx 10G MCX4121A-XCAT (2x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1015
Firmware version: 14.18.2000
Mellanox(R) ConnectX(R)-4 Lx 25G MCX4121A-ACAT (2x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1015
Firmware version: 14.18.2000
Mellanox(R) ConnectX(R)-5 100G MCX556A-ECAT (2x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1017
Firmware version: 16.19.1200
Mellanox(R) ConnectX-5 Ex EN 100G MCX516A-CDAT (2x100G)
Host interface: PCI Express 4.0 x16
Device ID: 15b3:1019
Firmware version: 16.19.1200
Intel(R) platforms with Intel(R) NICs combinations
CPU
Intel(R) Atom(TM) CPU C2758 @ 2.40GHz
Intel(R) Xeon(R) CPU D-1540 @ 2.00GHz
Intel(R) Xeon(R) CPU D-1541 @ 2.10GHz
Intel(R) Xeon(R) CPU E5-4667 v3 @ 2.00GHz
Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz
Intel(R) Xeon(R) CPU E5-2695 v4 @ 2.10GHz
Intel(R) Xeon(R) CPU E5-2658 v2 @ 2.40GHz
Intel(R) Xeon(R) CPU E5-2658 v3 @ 2.20GHz
OS:
CentOS 7.2
Fedora 25
FreeBSD 11
Red Hat Enterprise Linux Server release 7.3
SUSE Enterprise Linux 12
Wind River Linux 8
Ubuntu 16.04
Ubuntu 16.10
NICs:
Intel(R) 82599ES 10 Gigabit Ethernet Controller
Firmware version: 0x61bf0001
Device id (pf/vf): 8086:10fb / 8086:10ed
Driver version: 4.0.1-k (ixgbe)
Intel(R) Corporation Ethernet Connection X552/X557-AT 10GBASE-T
Firmware version: 0x800001cf
Device id (pf/vf): 8086:15ad / 8086:15a8
Driver version: 4.2.5 (ixgbe)
Intel(R) Ethernet Converged Network Adapter X710-DA4 (4x10G)
Firmware version: 6.01 0x80003205
Device id (pf/vf): 8086:1572 / 8086:154c
Driver version: 2.0.19 (i40e)
Intel(R) Ethernet Converged Network Adapter X710-DA2 (2x10G)
Firmware version: 6.01 0x80003204
Device id (pf/vf): 8086:1572 / 8086:154c
Driver version: 2.0.19 (i40e)
Intel(R) Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
Firmware version: 6.01 0x80003221
Device id (pf/vf): 8086:158b
Driver version: 2.0.19 (i40e)
Intel(R) Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
Firmware version: 6.01 0x8000321c
Device id (pf/vf): 8086:1583 / 8086:154c
Driver version: 2.0.19 (i40e)
Intel(R) Corporation I350 Gigabit Network Connection
Firmware version: 1.48, 0x800006e7
Device id (pf/vf): 8086:1521 / 8086:1520
Driver version: 5.2.13-k (igb)