DPDK Release 17.11
DPDK Release 17.11
DPDK Release 17.11
主要功能如下:
- IOVA awareness
- PCI and VDEV buses moved to drivers
- ethdev port id increased to 16 bits
- ethdev Rx/Tx offload API reworked
- Rx offload API for traffic metering and policing (rte_mtr)
- IPsec offload API (rte_security)
- Marvell Armada drivers
- NXP DPAA1 drivers
- Cavium OcteonTX drivers
- NXP and Cavium implementations of event/Rx adapter
- Netronome PF driver
- Mellanox drivers reworked for upstream ibverbs support
- SoftNIC driver for traffic management software fallback
- vhost IOMMU
- GSO library
- flow classify library
- membership library
- power management updated
- pipeline improvements
- example app for service cores
- example app and how-to for rte_flow API
- Xen dom0 removed
以下是各公司的补丁数量(据不完全统计):
417 Intel (56)
220 6WIND (5)
186 Cavium (9)
157 Mellanox (13)
118 NXP (7)
52 Broadcom (2)
36 Netronome (1)
34 RedHat (3)
31 Semihalf (2)
14 Solarflare (2)
13 ZTE (4)
12 Microsoft (2)
12 AT&T (2)
11 Cisco (4)
10 OKTET Labs (1)
7 IBM (2)
6 ARM (4)
5 Linaro (2)
3 Huawei (3)
17.11新功能
1. 已将port_id范围从uint8_t延长至uint16_t。
port_id 范围从8位增加至16位从而为DPDK提供超过256个端口的支持。调整了所有含参数 port_id 的ethdev APIs。
2. 修改了rte_eth_stats_reset的返回类型。
将 rte_eth_stats_reset 的返回类型从 void 调整至int ,因而调用程序能决定是否该设备支持操作以及操作是否已被运行。
3. 新增SoftNIC PMD。
增加了新的SoftNIC PMD。该虚拟设备提供软件实现的流量管理功能。
4. 为PMD初始化添加了bus agnostic功能至cryptodev。
为驱动增加了新的PMD协助、总线(bus)独立、和 rte_cryptodev_pmd_parse_input_args ()、 rte_cryptodev_pmd_create () 及 rte_cryptodev_pmd_destroy () 功能,以管理新的设备实例的创建和解构。
5. 更新了QAT crypto PMD。
新增以下几种性能改进:
o 已将atomics从内部队列结构中移除。
o 在响应处理上增加了合并写入至HEAD CSR。
o 在请求处理上增加了合并写入至TAIL CSR。
另外,为AES CCM算法添加了支持。
6. 更新了AESNI MB PMD。
更新后的AESNI MB PMD能提供以下额外支持:
o DES CBC算法。
o DES DOCSIS BPI算法。
该调整仅支持IPSec Multi-buffer 库的0.47版本。详情请参阅 《AESN-NI Multi Buffer Crypto轮询模式驱动》文件(http://dpdk.org/doc/guides/cryptodevs/aesni_mb.html)。
7. 更新了OpenSSL PMD。
更新后的OpenSSL PMD能提供以下额外支持:
o DES CBC算法。
o AES CCM算法。
8. 添加了新的基准测试模式至dpdk-test-crypto-perf应用。
增加了一个新的“PMD cyclecount”基准测试模式至 dpdk-test-crypto-perf 应用以显示硬件加速使用的CPU周期的详细分解。
9. 新增Security Offload Library。
增加了一个实验库rte_security。为诸如IPSec这样在以太网设备上使用inline ipsec卸载或在lookaside crypto设备上使用全协议卸载的协议提供安全APIs。
其他信息请参阅《DPDK程序员指南》的《安全库》部分(http://dpdk.org/doc/guides/prog_guide/rte_security.html)。
10. 更新了IXGBE以太网驱动以支持rte_security。
更新了ixgbe以太网PMD以支持rte_security inline IPSec卸载。
11. 更新了ipsec-secgw应用以支持rte_security。
更新了ipsec-secgw 示例应用以支持使用lookaside crypto卸载的ipsec inline和全协议卸载的 rte_security行为。
12. 对libvhost-user新增IOMMUl支持。
在Vhost-user后端配置了设备IOTLB,同时启用了Virtio的IOMMU功能。该功能默认禁止,可以在注册vhost设备时设置 RTE_VHOST_USER_IOMMU_SUPPORT 启用。
13. 新增Event Ethernet Adapter Library。
增加了事件以太网适配器库(Event Ethernet Adapter Library)。该适配器库为eventdev应用提供APIs从而给eventdev数据包流配置ethdev。
14. 为事件以太网适配器更新了DPAA2事件PMD(DPAA2 Event PMD)。
为DPAA2添加了eventdev以太网适配器支持。
15. 新增Membership Library(rte_member)。
增加了Membership Library新型数据结构库。
成员库(Membership Library)是一种传统过滤器结构(例如Bloom Filter)的拓展,在各种工作负荷状态下和应用中有多重使用方式。一般来说,成员库是一种数据结构,提供“集合总结”,并对是否某个成员隶属一个集合这类集合成员资格作出回应。
该库为DPDK应用提供APIs,从而能插入新成员,删除已有成员,在既定集合或集合群内询问成员的存在。在集合群情况下,该库不止会传回是否组件已插入某个集合,同时会告知该组件隶属哪个集合。
详情请阅《程序员指南》的《成员库》部分(http://dpdk.org/doc/guides/prog_guide/member_lib.html) 。
16. 新增Generic Segmentation Offload Library。
增加了GSO库,能帮助应用将大包(例如64KB的MTU)切分成小包(例如1500B的MTU)。支持以下数据包类型:
o TCP/IPv4包。
o VxLAN包,必须具备一个外部IPv4报文头部和一个内在TCP/IPv4包。
o GRE包,必须具备一个外部IPv4报文头部和数个内在TCP/IPv4报文头部。
GSO库不检查输入包是否有正确的校验和,也不更新输出包的校验和。另外,GSO库不处理IP分割包。
17. 新增流分类库。
增加了一个实验性流分类库,为DPDK应用提供APIs以通过一套流规则将其匹配,从而分类输入包。该库使用 librte_table API来管理流规则。
已知问题
服务核心因原子锁(atomic lock)问题无法呼叫服务回呼
在之前的多线程不安全服务和服务核心的特定配置中,服务核心并未正确在该服务上发布原子锁。这会导致核心轮询该服务,但表面看来又像另一条线程正在执行该服务回呼。目前这些服务的原子锁逻辑问题已解决,并经过了可读性重构。
API变化
增加了Ethdev名称长度。
内部设备名称大小已增至64字符,允许存储更长的总线特定名称。
删除了Ethdev RTE_ETH_DEV_DETACHABLE标志。
删除了Ethdev RTE_ETH_DEV_DETACHABLE 标志。不再需要以上标志,将使用新型热插拔实施。已从以太库将其移除,其语义目前为总线和PMD层级。
更新了服务核心API的可用性。
改变了服务核心API,同时从可能识别服务的API当中移除了指针,转而使用整数IDs来识别每个服务。该操作简化应用程序代码,帮助调试,并提供更好的封闭性能。主要变化如下:
o 由ID而非 rte_service_spec 指针来识别服务
o 通过 set 功能而非启用/禁止降低了API表面
o 重整rte_service_register 以提供服务ID给管理员
o 将启用和结束APIs重整入 rte_service_runstate_set
o 新增API以设置服务实施的运行状态(runstate),从而显示准备就绪
mempool library中作出了以下变化:
o 为 rte_mempool 将flags 数据类型从 int 移动至 unsigned int。
o 从 rte_mempool_generic_put 和 rte_mempool_generic_get API中删除了 __rte_unused int flag 参数。
o 在rte_mempool_xmem_size和rte_mempool_xmem_usage中添加了flags 参数
o 在Xen dom0中使用rte_mem_phy2mch以获得物理地址;;当Xen dom0支持被移除后移除该API。
新增关于物理地址处理(physical address handling)的IOVA别名。
删除了一些与物理地址处理相关的数据类型、结构成员和功能,具备了有IOVA用法的新别名。例如:
o phys_addr_t能经常以同样大小的rte_iova_t替换。
o RTE_BAD_PHYS_ADDR时常被相同值的RTE_BAD_IOVA替换。
o rte_memseg.phys_addr别名为rte_memseg.iova_addr。
o rte_mem_virt2phy ()常被rte_mem_virt2iova替换。
o rte_malloc_virt2phy别名为rte_malloc_virt2iova。
o rte_memzone.phys_addr别名为rte_memzone.iova。
o rte_mempool_objhdr.physaddr别名为rte_mempool_objhdr.iova。
o rte_mempool_memhdr.phys_addr 别名为rte_mempool_memhdr.iova。
o rte_mempool_virt2phy()能被rte_mempool_virt2iova()替换。
o rte_mempool_populate_phys* ()别名为rte_mempool_populate_iova* ()。
o rte_mbuf.buf_physaddr别名为rte_mbuf.buf_iova。
o rte_mbuf_data_dma_addr* ()别名为rte_mbuf_data_iova* ()。
o rte_pktmbuf_mtophys*别名为rte_pktmbuf_iova* ()。
PCI bus API被移出了EAL。
此前实施于EAL内的PCI bus已被移动。增加了一个首件作为RTE库,提供PCI协助以解析设备地点或其他诸如此类的公用程式。由实际总线驱动组成的次件已被移至相应分目录,无需改变其功能。
一些与PCI相关的功能也无需再通过EAL显示,包括:
o rte_pci_detach
o rte_pci_dump
o rte_pci_ioport_map
o rte_pci_ioport_read
o rte_pci_ioport_unmap
o rte_pci_ioport_write
o rte_pci_map_device
o rte_pci_probe
o rte_pci_probe_one
o rte_pci_read_config
o rte_pci_register
o rte_pci_scan
o rte_pci_unmap_device
o rte_pci_unregister
o rte_pci_write_config
以上功能可作为librte_pci 或 librte_bus_pci的部分使用。
将vdev bus APIs移出了EAL。
将以下APIs从librte_eal 移动至librte_bus_vdev:
o rte_vdev_init
o rte_vdev_register
o rte_vdev_uninit
o rte_vdev_unregister
增加返回值至stats_get dev op API。
stats_get dev op API返回值已被改变为int。这样PMDs能返回错误值以防止在统计被处理时间阶段发生失败。
修改了rte_cryptodev_allocate_driver功能。
修改了cryptodev库中的rte_cryptodev_allocate_driver()功能。增加了一个struct cryptodev_driver *crypto_drv 额外参数。
从librte_cryptodev移除了虚拟设备总线特定动能。
rte_cryptodev_vdev_parse_init_params() 和rte_cryptodev_vdev_pmd_init()功能已从librte_cryptodev当中删除,被rte_cryptodev_pmd_parse_input_args()和rte_cryptodev_pmd_create()非总线特定功能替代。
删除了rte_cryptodev_create_vdev()功能以避免在librte_cryptodev当中对vdev的依赖;用户转而能直接呼叫rte_vdev_init()。
从librte_cryptodev中移除了PCI设备总线特定功能。
rte_cryptodev_pci_generic_probe()和rte_cryptodev_pci_generic_remove()功能已从 librte_cryptodev当中删除,被rte_cryptodev_pmd_create()和rte_cryptodev_pmd_destroy()非总线特定功能替代。
删除了废弃函数以管理日志级别或类型。
删除了rte_set_log_level()、rte_get_log_level()、rte_set_log_type()和rte_get_log_type()函数。
以上函数分别被rte_log_set_global_level ()、rte_log_get_global_level ()、rte_log_set_level ()和rte_log_get_level ()替换。
移除了mbuf标志PKT_RX_VLAN_PKT and PKT_RX_QINQ_PKT。
已删除mbuf PKT_RX_VLAN_PKT和PKT_RX_QINQ_PKT标志,因为其行为未被恰当描述。
添加了mbuf的PKT_RX_VLAN_PKT和PKT_RX_QINQ_PKT标志。
已添加两个mbuf标志以表明VLAN标识符已保存于mbuf 结构。例如:
o 若VLAN未被剥离,且TCI已保存:PKT_RX_VLAN
o 若VLAN已剥离,且TCI已保存:PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED
在ethdev库里修改了vlan_offload_set_t功能原型。
在ethdev库里修改了 vlan_offload_set_t 功能原型。返回值已从void 改变为int,因此调用程序能决定备份(backing)设备是否支持操作或操作是否成功被执行。
ABI变化
延长了port_id范围。
在rte_eth_dev_data 结构中的域port_id 的大小已被改变。如上述新功能部分所述。
增加了新参数至rte_eth_dev。
新参数security_ctx已被增加至rte_eth_dev以支持像IPSec inline一样的安全操作。
增加了新参数至rte_cryptodev。
新参数security_ctx已被增加至rte_cryptodev以支持像lookaside crypto一样的安全操作。
功能取消
已移除EAL当中的Xen dom0、xenvirt PMD和vhost_xen。
已移除加密性能单元测试,替换为dpdk-test-crypto-perf应用。
共享程序库版本
此版本中加入了带加号的代码库。
+ librte_bitratestats.so.2
+ librte_bus_dpaa.so.1
+ librte_bus_fslmc.so.1
+ librte_bus_pci.so.1
+ librte_bus_vdev.so.1
librte_cfgfile.so.2
librte_cmdline.so.2
+ librte_cryptodev.so.4
librte_distributor.so.1
+ librte_eal.so.6
+ librte_ethdev.so.8
+ librte_eventdev.so.3
+ librte_flow_classify.so.1
librte_gro.so.1
+ librte_gso.so.1
librte_hash.so.2
librte_ip_frag.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.3
+ librte_mempool.so.3
librte_meter.so.1
librte_metrics.so.1
librte_net.so.1
+ librte_pci.so.1
+ librte_pdump.so.2
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_ring.so.2
+ librte_pmd_softnic.so.1
+ librte_pmd_vhost.so.2
librte_port.so.3
librte_power.so.1
librte_reorder.so.1
librte_ring.so.1
librte_sched.so.1
+ librte_security.so.1
+ librte_table.so.3
librte_timer.so.1
librte_vhost.so.3
已测试平台
英特尔(R)平台和英特尔(R) 网卡组合
o 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
o OS:
▪ CentOS 7.2
▪ Fedora 25
▪ Fedora 26
▪ FreeBSD 11
▪ 红帽企业Linux服务器发布7.3版本
▪ SUSE企业Linux 12
▪ 风河系统公司Linux 8
▪ Ubuntu 16.04
▪ Ubuntu 16.10
o 网卡:
▪ 英特尔(R) 82599ES 10千兆以太网控制器
▪ 固件版本:0x61bf0001
▪ 设备id (pf/vf) :8086:10fb / 8086:10ed
▪ 驱动版本:5.2.3 (ixgbe)
▪ 英特尔(R)公司以太网连接X552/X557-AT 10GBASE-T
▪ 固件版本:0x800003e7
▪ 设备id (pf/vf) :8086:15ad / 8086:15a8
▪ 驱动版本:4.4.6 (ixgbe)
▪ 英特尔(R)以太网聚合网络适配器X710-DA4 (4x10G)
▪ 固件版本:6.01 0x80003205
▪ 设备id (pf/vf): 8086:1572 / 8086:154c
▪ 驱动版本:2.1.26 (i40e)
▪ 英特尔(R)以太网聚合网络适配器X710-DA2 (2x10G)
▪ 固件版本:6.01 0x80003204
▪ 设备id (pf/vf): 8086:1572 / 8086:154c
▪ 驱动版本:2.1.26 (i40e)
▪ 英特尔(R)以太网聚合网络适配器XXV710-DA2 (2x25G)
▪ 固件版本:6.01 0x80003221
▪ 设备id (pf/vf): 8086:158b
▪ 驱动版本:2.1.26 (i40e)
▪ 英特尔(R)以太网聚合网络适配器XL710-QDA2 (2X40G)
▪ 固件版本:6.01 0x8000321c
▪ 设备id (pf/vf): 8086:1583 / 8086:154c
▪ 驱动版本:2.1.26 (i40e)
▪ 英特尔(R)公司I350千兆网络连接
▪ 固件版本:1.63, 0x80000dda
▪ 设备id (pf/vf): 8086:1521 / 8086:1520
▪ 驱动版本:5.3.0-k (igb)
往期精选
总结
以上是生活随笔为你收集整理的DPDK Release 17.11的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 玩转Ubuntu(Ubuntu查看本机的
- 下一篇: iOS 设置圆角和阴影并存(部分圆角)