DPDK 19.08正式发布,让我们一起来看看新版本都有哪些新功能和变化吧!
新功能
· 在大多数情况下,EAL现在默认选择VA的IOVA模式。
以前,默认首选PA的IOVA模式。现在已经发生变化,用更复杂的方式处理IOVA模式检测,并且在大多数情况下默认选择VA的IOVA模式。
· 添加了MCS锁。
MCS锁通过在CPU/线程局部变量上旋转来提供可伸缩性,这避免了昂贵的缓存弹跳。它通过维护获取者列表并按照获取锁定的顺序将锁传递给每个CPU/线程来提供公平性。
· 更新了EAL伪随机数发生器。
基于rte_rand()函数 的 lrand48() 被替换为DPDK-native组合线性反馈移位寄存器(LFSR)伪随机数发生器(PRNG)。
这种新的PRNG实现是多线程安全的,提供更高质量的伪随机数(包括完整的64位支持)和更高的性能。
此外,
· 更新了Broadcom bnxt PMD。
更新了Broadcom bnxt PMD。主要的改进包括:
o 非矢量Tx路径中的性能优化。
o 添加了对SSE矢量模式的支持。
o 将HWRM API更新为1.10.0.91版。
· 增加了对Broadcom NetXtreme-E BCM57500以太网控制器的支持。
为BCM57500(即“Thor”)系列以太网控制器增加了对Broadcom bnxt PMD的支持。这些控制器支持高达200Gbps, 50G PAM-4和PCIe 4.0的线路速度。
· 增加了华为hinic PMD。
基于华为以太网控制器Hi1822,为华为智能PCIE网络适配器增加了新的 hinic 网络驱动程序。更多有关该新驱动程序信息请见HINIC Poll Mode Driver.
· 更新了英特尔ice驱动。
更新了英特尔 ice驱动包含以下新功能和改进:
o 启用Tx outer/inner L3/L4校验和卸载。
o 启用generic filter框架和支持switch filter。
o 添加支持的UDP隧道端口。
· 更新了英特尔i40e驱动器。
· 更新了英特尔 i40e驱动包含以下的新功能和改进:
o 在rte_flow中添加了对MARK + RSS动作的支持(仅限非矢量RX路径)
· 更新了Mellanox mlx5驱动程序。
更新了Mellanox mlx5驱动包含以下的新功能和改进:
o 更新了包头的修改功能。增加了对TCP头序列号和确认号修改的支持。
o 增加了对ICMP/ICMP6代码和类型匹配的支持。
o 增加了对GRE密钥和C,K,S当前位匹配的支持。
o 添加了对IP-in-IP隧道的支持。
o 通过计数动作创建和销毁来加速flows。
o 加速流量计数器查询。
o 通过启用的HW卸载改进了Tx路径性能。
o 增加了对LRO的支持。
· 更新了Solarflare网络PMD。
更新了Solarflare sfc_efx 驱动,其中包括:
o 增加了对Rx中断的支持。
· 增加了memif PMD。
添加了新的共享内存数据包接口(memif) PMD。详情请见Memif Poll Mode Driver.
· 更新了AF_XDP PMD。
更新了AF_XDP PMD。新功能包括:
o 通过mbuf的外部内存机制来支持零拷贝,以实现更高的性能。
o 添加了多队列支持,允许一个af_xdp vdev具有多个netdev队列。
o 启用“need_wakeup”功能,该功能可以为应用程序和驱动程序运行在相同核上的用例提供有效支持。
· 在PCAP PMD中启用无限Rx。
为PCAP PMD添加了无限Rx功能,允许以高速率重复接收Rx PCAP中的数据包。这有益于DPDK应用程序的快速性能测试。
· 在PCAP PMD中启用不接收任何数据包。
增加了允许用户运行PCAP PMD而无需在PCAP Rx上接收任何数据包的功能。调用该函数时,将为传递的每个Tx队列参数创建一个虚拟队列。
· 添加了FPGA_LTE_FEC bbdev PMD。
为Intel® FPGA PAC(可编程加速卡)N3000添加了新的 fpga_lte_fec bbdev驱动程序。详情请见Intel(R) FPGA LTE FEC Poll Mode Driver BBDEV 指导。
· 更新了TURBO_SW bbdev PMD。
更新了 turbo_sw bbdev驱动程序,其中包括:
o 添加了依赖或不依赖外部SDK库来编译驱动程序的选项。
o 增加了对5GNR编码/解码操作的支持。
· 更新了英特尔QuickAssist技术(QAT)对称加密PMD。
添加了对摘要加密案例的支持,其中摘要附加到数据。
· 更新了英特尔QuickData技术PMD。
为英特尔QuickData 技术添加了PMD,是英特尔I/O 加速技术(Intel I/OAT)的一部分,允许通过硬件而非软件方式拷贝数据,减少应用程序在拷贝大块数据上花费的时间周期。添加了Marvell OCTEON TX2驱动程序。
在OCTEON TX2 SoC中为各种HW协处理器添加了新的ethdev, eventdev, mempool, eventdev Rx 适配器, eventdev Tx 适配器, eventdev定时适配器 和 rawdev DMA 驱动程序。
详情请见Marvell OCTEON TX2 平台指导与驱动信息:
o OCTEON TX2 Poll Mode driver
o OCTEON TX2 NPA Mempool Driver
o OCTEON TX2 SSO Eventdev Driver
o OCTEON TX2 DMA Driver
· 推出了英特尔NTB PMD。
为英特尔NTB(非透明网桥)添加了PMD。此PMD实现了两个独立主机之间的握手,并且可以共享本地内存,供对等主机直接访问。
· 更新了IPSec库和IPsec安全网关应用程序。
向librte_ipsec添加了以下功能。在ipsec-secgw 示例应用中还添加了相应的更改。
o 按照RFC4301的ECN和DSCP字段头重组。
o 具有IPv6扩展包头的传输模式。
o 支持包含多个段的数据包。
· 更新了telemetry库来支持global metrics
从librte_metrics 库中更新librte_telemetry 来达到global metrics支持
· 为l3fwd-power应用添加了新的telemetry模式。
为 l3fwd-power 应用添加了telemetry模式,以报告rte_eth_rx_burst()的应用程序级别,是忙,空还是完全轮询。
· 更新了pdump应用程序。
添加pdump支持以退出主进程。
· 更新了test-compress-perf工具应用。
为压缩perf工具应用添加了多核功能。
删除项目
· 删除KNI ethtool,CONFIG_RTE_KNI_KMOD_ETHTOOL 支持
· 构建:armv8加密扩展被禁用。
API变化
· rte_mem_config 已设为私有结构体。引入了新的访问器rte_mcfg_*函数,提供对直接访问共享内存配置的替换。
· 网络结构,定义和函数以rte_ 为前缀,以解决与libc头文件的冲突。
· malloc:函数 rte_malloc_set_limit()从未实现,已被弃用,将在以后的版本中删除。
· cryptodev:xforms结构中 key 结构的 uint8_t *data 成员(rte_crypto_cipher_xform,rte_crypto_auth_xform 和 rte_crypto_aead_xform)已更改为const uint8_t *data。
· eventdev:不再标记为实验性。
eventdev函数不再标记为实验性,并且已成为标准DPDK API和ABI的一部分。任何将来的ABI变化将在改变之前的至少一次版本发布中被宣布。计划中没有ABI中断变化。
·ip_frag:IP fragmentation库通过 rte_ipv4_fragment_packet()接口,使用输入MTU大小,将输入mbuf进行分片。一旦分片完成,每个mbuf->ol_flags都设置为启用IP校验和H/W卸载,而不管平台能力如何。清除来自库的IP校验和H/W卸载标志。如果平台支持并且应用程序希望使用它,则应用程序必须设置此标志。
·ip_frag: IP reassembly库通过rte_ipv4_frag_reassemble_packet()接口将分片列表组合成数据包。一旦组合完成,mbuf->ol_flags设置为启用IP校验和H/W卸载,而不管平台能力如何。清除来自库的IP校验和H/W卸载标志。如果平台支持并且应用程序希望使用它,则应用程序必须设置此标志。
·sched: 宏RTE_SCHED_QUEUES_PER_TRAFFIC_CLASS和RTE_SCHED_PIPE_PROFILES_PER_PORT被删除,以便灵活配置管道流量类及其队列大小,以及运行时配置最大数量的管道文件。此外,rte_sched_pipe_params结构的wrr_weights字段被改为只用于best-effort tc, rte_sched_port_params结构的 qsize字段被改为允许每个队列大小不同。
ABI变化
· eventdev:基于事件的Rx适配器回调
eth事件Rx适配器回调中的mbuf指针数组已替换为事件数组。使用事件数组允许应用程序通过SW适配器更改排队的事件的属性。
回调可以丢弃数据包并使用丢弃的数据包数填充回调参数。添加一个Rx适配器统计信息字段以跟踪丢弃数据包的总数。
· cryptodev: rte_cryptodev_config 中的新成员,允许应用程序禁用加密设备支持的功能。只允许以下功能以这种方式禁用,
o RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO.
o RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTOo
o RTE_CRYPTODEV_FF_SECURITY.
禁用未使用的功能将有助于有效使用HW/SW卸载。
· bbdev: 增加了新的操作和参数以支持新的5GNR操作。bbdev ABI仍然是实验性的。
· rawdev: 驱动程序名称已更改为librte_rawdev_*。现在它们都具有相同的前缀,并且具有make和meson构建的相同名称。
共享库版本
在此版本中添加的库以加号表示。
librte_acl.so.2
librte_bbdev.so.1
librte_bitratestats.so.2
librte_bpf.so.1
librte_bus_dpaa.so.2
librte_bus_fslmc.so.2
librte_bus_ifpga.so.2
librte_bus_pci.so.2
librte_bus_vdev.so.2
librte_bus_vmbus.so.2
librte_cfgfile.so.2
librte_cmdline.so.2
librte_compressdev.so.1
+ librte_cryptodev.so.8
librte_distributor.so.1
+ librte_eal.so.11
librte_efd.so.1
librte_ethdev.so.12
+ librte_eventdev.so.7
librte_flow_classify.so.1
librte_gro.so.1
librte_gso.so.1
librte_hash.so.2
librte_ip_frag.so.1
librte_ipsec.so.1
librte_jobstats.so.1
librte_kni.so.2
librte_kvargs.so.1
librte_latencystats.so.1
librte_lpm.so.2
librte_mbuf.so.5
librte_member.so.1
librte_mempool.so.5
librte_meter.so.3
librte_metrics.so.1
librte_net.so.1
librte_pci.so.1
librte_pdump.so.3
librte_pipeline.so.3
librte_pmd_bnxt.so.2
librte_pmd_bond.so.2
librte_pmd_i40e.so.2
librte_pmd_ixgbe.so.2
librte_pmd_dpaa2_qdma.so.1
librte_pmd_ring.so.2
librte_pmd_softnic.so.1
librte_pmd_vhost.so.2
librte_port.so.3
librte_power.so.1
librte_rawdev.so.1
librte_rcu.so.1
librte_reorder.so.1
librte_ring.so.2
+ librte_sched.so.3
librte_security.so.2
librte_stack.so.1
librte_table.so.3
librte_timer.so.1
librte_vhost.so.4
已知问题
· 不合适的IOVA模式可能作为默认值。
并非所有内核驱动程序或任何设备都支持所有IOVA模式。EAL将尝试根据许多因素选择合理的默认值,但可能存在默认情况下不合适的情况。
如果默认值不合适,建议使用–iova-mode命令行参数。
测试平台
•Intel(R) platforms with Intel(R) NICs combinations
oCPU
Intel(R) Atom(TM) CPU C3758 @ 2.20GHz
Intel(R) Xeon(R) CPU D-1541 @ 2.10GHz
Intel(R) Xeon(R) CPU D-1553N @ 2.30GHz
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-2699 v4 @ 2.20GHz
Intel(R) Xeon(R) Gold 6139 CPU @ 2.30GHz
Intel(R) Xeon(R) Platinum 8180 CPU @ 2.50GHz
Intel(R) Xeon(R) Platinum 8280M CPU @ 2.70GHz
oOS:
CentOS 7.6
Fedora 30
FreeBSD 12.0
Red Hat Enterprise Linux Server release 8.0
Red Hat Enterprise Linux Server release 7.6
Suse12SP3
Ubuntu 16.04
Ubuntu 16.10
Ubuntu 18.04
Ubuntu 19.04
oNICs:
Intel(R) 82599ES 10 Gigabit Ethernet Controller
Firmware version: 0x61bf0001
Device id (pf/vf): 8086:10fb / 8086:10ed
Driver version: 5.6.1 (ixgbe)
Intel(R) Corporation Ethernet Connection X552/X557-AT 10GBASE-T
Firmware version: 0x800003e7
Device id (pf/vf): 8086:15ad / 8086:15a8
Driver version: 5.1.0 (ixgbe)
Intel Corporation Ethernet Controller 10G X550T
Firmware version: 0x80000482
Device id (pf): 8086:1563
Driver version: 5.6.1 (ixgbe)
Intel(R) Ethernet Converged Network Adapter X710-DA4 (4x10G)
Firmware version: 7.00 0x80004cdb
Device id (pf/vf): 8086:1572 / 8086:154c
Driver version: 2.9.21 (i40e)
Intel(R) Corporation Ethernet Connection X722 for 10GbE SFP+ (4x10G)
Firmware version: 4.10 0x80001a3c
Device id (pf/vf): 8086:37d0 / 8086:37cd
Driver version: 2.9.21 (i40e)
Intel(R) Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
Firmware version: 7.00 0x80004cf8
Device id (pf/vf): 8086:158b / 8086:154c
Driver version: 2.9.21 (i40e)
Intel(R) Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
Firmware version: 7.00 0x80004c97
Device id (pf/vf): 8086:1583 / 8086:154c
Driver version: 2.9.21 (i40e)
Intel(R) Corporation I350 Gigabit Network Connection
Firmware version: 1.63, 0x80000cbc
Device id (pf/vf): 8086:1521 / 8086:1520
Driver version: 5.4.0-k (igb)
Intel Corporation I210 Gigabit Network Connection
Firmware version: 3.25, 0x800006eb
Device id (pf): 8086:1533
Driver version: 5.4.0-k(igb)
•Intel(R) platforms with Mellanox(R) NICs combinations
oCPU:
Intel(R) Xeon(R) Gold 6154 CPU @ 3.00GHz
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-2650 v4 @ 2.20GHz
Intel(R) Xeon(R) CPU E5-2640 @ 2.50GHz
Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
oOS:
Red Hat Enterprise Linux Server release 7.6 (Maipo)
Red Hat Enterprise Linux Server release 7.5 (Maipo)
Red Hat Enterprise Linux Server release 7.4 (Maipo)
Red Hat Enterprise Linux Server release 7.3 (Maipo)
Red Hat Enterprise Linux Server release 7.2 (Maipo)
Ubuntu 19.04
Ubuntu 18.10
Ubuntu 18.04
Ubuntu 16.04
SUSE Linux Enterprise Server 15
oOFED:
MLNX_OFED 4.6-1.0.1.1
MLNX_OFED 4.6-4.1.2.0
oNICs:
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.42.5000
Mellanox(R) ConnectX(R)-4 10G MCX4111A-XCAT (1x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 10G MCX4121A-XCAT (2x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 25G MCX4111A-ACAT (1x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 25G MCX4121A-ACAT (2x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
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.25.6406 and above
Mellanox(R) ConnectX(R)-4 40G MCX415A-BCAT (1x40G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
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.25.6406 and above
Mellanox(R) ConnectX(R)-4 50G MCX414A-BCAT (2x50G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
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.25.6406 and above
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 50G MCX415A-CCAT (1x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 100G MCX416A-CCAT (2x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1013
Firmware version: 12.25.6406 and above
Mellanox(R) ConnectX(R)-4 Lx 10G MCX4121A-XCAT (2x10G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1015
Firmware version: 14.25.6406 and above
Mellanox(R) ConnectX(R)-4 Lx 25G MCX4121A-ACAT (2x25G)
Host interface: PCI Express 3.0 x8
Device ID: 15b3:1015
Firmware version: 14.25.6406 and above
Mellanox(R) ConnectX(R)-5 100G MCX556A-ECAT (2x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1017
Firmware version: 16.25.6406 and above
Mellanox(R) ConnectX(R)-5 Ex EN 100G MCX516A-CDAT (2x100G)
Host interface: PCI Express 4.0 x16
Device ID: 15b3:1019
Firmware version: 16.25.6406 and above
•Mellanox(R) BlueField SmartNIC
oMellanox(R) BlueField SmartNIC MT416842 (2x25G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:a2d2
Firmware version: 18.25.6600
oSoC Arm cores running OS:
CentOS Linux release 7.5.1804 (AltArch)
MLNX_OFED 4.6-3.5.8.0
oDPDK application running on Arm cores inside SmartNIC
•IBM Power 9 platforms with Mellanox(R) NICs combinations
oCPU:
POWER9 2.2 (pvr 004e 1202) 2300MHz
oOS:
Ubuntu 18.04.1 LTS (Bionic Beaver)
oNICs:
Mellanox(R) ConnectX(R)-5 100G MCX556A-ECAT (2x100G)
Host interface: PCI Express 3.0 x16
Device ID: 15b3:1017
Firmware version: 16.25.6406
oOFED:
MLNX_OFED 4.6-4.1.2.0
•ARMv8 SoC combinations from Marvell (with integrated NICs)
oSoC:
CN83xx, CN96xx, CNF95xx, CN93xx
oOS (Based on Marvell OCTEON TX SDK 10.0):
Arch Linux
Buildroot 2018.11
Ubuntu 16.04.1 LTS
Ubuntu 16.10
Ubuntu 18.04.1
Ubuntu 19.04