DPDK 18.05 来啦

新功能

1. 重构内存子系统

重构了内存子系统以支持新功能。
在Linux中增加了对在运行时间保留/不保留巨页内存的支持,使得应用程序不需要在启动时预保留内存。由于内存子系统内部工作经重新组织,今后通过rte_malloc() 或rte_memzone_reserve()分配的内存无法保证是IOVA连续的。
这一新功能带来以下变化:

  • rte_eal_get_physmem_layout() 被移除。
  • 添加了memzone保留的新标志(RTE_MEMZONE_IOVA_CONTIG),以保证保留的内存实现IOVA连续,以便设备驱动使用和其他需要此类内存的情况。
  • 添加了内存分配/释放事件的新回调,使得用户(或驱动程序)能够在分配或释放新内存时收到通知
    添加了验证超额内存分配的新回调,用户可以允许或拒绝内存分配。
  • 添加了新的命令行开关 –legacy-mem ,使得EAL能以类似于旧版DPDK的方式运作(内存段IOVA连续,但巨页仅在启动时保留且永远不会释放)。
  • 添加了新的命令行开关 –single-file-segments 将一个段列表中的所有内存段放入一个文件中。
  • 添加了一组便利的函数调用,用于查找并遍历分配的内存段。
  • 添加新含义至 -m 和 –socket-mem 命令行参数,并标记预保留的巨页为“不可释放”,从而形成机制以实现应用程序巨页内存的最小化。
  • 在运行时间保留/不保留内存这一功能目前在FreeBSD上尚不支持。

2.增加了bucket mempool驱动程序

添加了bucket mempool驱动程序,它能够分配连续的对象块。块中对象的数量取决于RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB 内存块中的对象数,在编译时可配置。查询对象数用rte_mempool_ops_get_info() API。分配连续对象块用 rte_mempool_get_contig_blocks() API。

3.增加了对端口表示器的支持

添加了DPDK端口表示器(在特定VF环境中被也称为“VF表示器”),其作用等同于Linux中的以太网交换机设备驱动程序模型(switchdev),可以视作应用程序的软件“配线板”前端。 DPDK端口表示器是附加的虚拟以太网设备(ethdev),
作用是根据需要把必须的配置参数传递到使用devargs的底层设备的驱动程序

4.增加了对VXLAN和NVGRE隧道端点的支持

添加了新的操作类型,以支持隧道端点的封装和解封装操作。新类型为RTE_FLOW_ACTION_TYPE_[VXLAN/NVGRE]_ENCAP, RTE_FLOW_ACTION_TYPE_[VXLAN/NVGRE]_DECAP, RTE_FLOW_ACTION_TYPE_JUMP。添加了新类型 RTE_FLOW_ACTION_TYPE_MARK ,为了与先前标记的流相匹配。添加了共享计数器到流API,以计算组流量。

5.增加了PMD推荐的Tx和Rx参数

应用程序现支持查询不同设备调节的的ring大小,突发大小和队列数。

6.增加了vDPA到vhost-user lib

增加了对选择性数据通路的支持到vhost-user lib。 vDPA代表虚拟主机数据路径加速。它支持virtio环兼容设备,直接为virtio驱动程序提供数据通路加速功能。

7.增加了IFCVF vDPA驱动程序

增加了IFCVF vDPA驱动程序以支持Intel FPGA 100G VF设备。 IFCVF具备HW vhost数据路径加速器的功能,它支持实时迁移并与virtio 0.95和1.0兼容。当virtio连接时,该驱动程序将ifcvf vDPA驱动程序注册到vhost lib。在已注册的vDPA驱动程序的帮助下,指定的VF被直接配置为VM的virtio vrings的Rx / Tx。

8.增加了对vhost出队中断模式的支持

增加了对vhost出队中断模式的支持,以在没有数据传输时将CPU释放给其他软件。应用程序可以注册一个epoll事件文件描述符,将Rx队列与中断向量相关联。

9.增加了对virtio-user服务器模式的支持

在容器环境中,如果vhost-user后端重新启动,则无法将其重新连接到virtio-user。为了解决这个问题,已经添加了对服务器模式的支持。在这种模式下,后端连接的virtio-user创建套接字文件。这意味着如果后端重新启动,它可以重新连接到virtio-user并继续通信。

10.增加了加密工作负载支持到vhost库

vhost库中引入了新的API以实现virtio crypto支持,包括会话创建/删除操作以及将virtio-crypto请求转换为DPDK加密操作。新增了一个示例应用。

11.增加了virtio加密PMD

增加了一个新的轮询模式驱动程序到virtio crypto设备,它为AES-CBC加密和AES-CBC提供了HMAC-SHA1算法链接。此新驱动程序的更多信息,请参阅《Virtio Crypto轮询模式驱动程序加密驱动程序指南》。(http://dpdk.org/doc/guides/cryptodevs/virtio.html)

12.更新了AESNI MB PMD

AESNI MB PMD已更新,并增加了以下支持:
AES-CMAC(128位密钥)。

13.添加了Compressdev库,一个通用压缩服务库

增加了Compressdev库,该库提供了一个API,可以用于卸载压缩和解压缩操作到硬件或软件加速器设备。

14.添加了一个使用Intels ISA-L的压缩轮询模式驱动程序

增加了新的 ISA-L 压缩驱动程序,用于软件中的压缩和解压缩操作。此新驱动程序的更多信息,请参阅《ISA-L压缩轮询模式驱动程序压缩驱动程序指南(http://dpdk.org/doc/guides/compressdevs/isal.html)
15.添加了事件定时器适配器库。
Event Timer Adapter Library通过引入API来扩展基于事件的模型,这些API允许应用程序启动/取消生成定时器过期事件的事件定时器。这种新类型的事件由事件设备以及现有类型的事件来安排。
16. 添加了事件加密适配器库。
添加了事件加密适配器库。该库通过引入API来扩展基于事件的模型,这些API允许应用程序在事件设备安排事件时将加密操作排入cryptodev队列/从cryptodev出队。

17.添加了Ifpga总线,一个通用的英特尔FPGA总线库

添加了Ifpga总线库,该库提供了将任何Intel FPGA设备与DPDK框架集成的支持。它提供英特尔FPGA部分加速功能单元(AFU)扫描和驱动程序探测。

18.添加了IFPGA(Intel FPGA)Rawdev驱动程序

增加了一个名为IFPGA(Intel FPGA)Rawdev Driver的新Rawdev驱动程序,该驱动程序与OPAE(开放式可编程加速引擎)共享代码协作,为FPGA操作提供通用FPGA管理操作。
更多信息,请参阅《IFPGA Rawdev Driver程序员指南》。
(http://dpdk.org/doc/guides/rawdevs/ifpga_rawdev.html)

19.添加了设备事件监视器框架

添加了一个通用设备事件监视器框架到EAL,用于设备动态管理,以实现设备热插拔感知和相关操作。新API的列表是:

  • rte_dev_event_monitor_start 和 rte_dev_event_monitor_stop 用于事件监视器启用和禁用。
  • rte_dev_event_callback_register 和 rte_dev_event_callback_unregister 用于注册或移除注册用户回调。

支持Linux uevent作为此设备事件通知框架的后端。

20.增加了对eth vdev的procinfo和pdump的支持

对于以太网虚拟设备(如TAP,PCAP等),通过此功能,我们可以从辅助进程获取共享内存上的stats / xstats,还可以在这些虚拟设备上获取pdump数据包。

21.增强了/改良了数据包框架库

为Packet Framework库设计和开发新的API函数,为管道表和输入端口实施一系列常见操作,包括流量计量,数据包封装,网络地址转换,TTL更新等,以加速应用开发。 API功能包括创建动作配置文件,向配置文件注册动作,实例化管道表和输入端口的动作配置文件等。

22.添加了BPF库

BPF库用以在用户空间DPDK应用程序中加载和执行增强伯克利数据包筛选器(eBPF)。它还引入了用于在Eth设备上加载/卸载基于BPF过滤器(现在只能通过SW RX / TX回调)的基本框架。同时增加了对libelf的依赖。

API变化

1. service core:不再标记为实验性。
2.eal: rte_lcore_has_role() 返回值已更改。
3.mempool:能力标志和相关功能已被删除。
4.mempool:以下xmem函数已弃用:
rte_mempool_xmem_create
rte_mempool_xmem_size
rte_mempool_xmem_usage
rte_mempool_populate_iova_tab
5.mbuf:控件mbuf API已在v18.05中删除。 受影响的函数和宏包括:
rte_ctrlmbuf_init()
rte_ctrlmbuf_alloc()
rte_ctrlmbuf_free()
rte_ctrlmbuf_data()
rte_ctrlmbuf_len()
rte_is_ctrlmbuf()
CTRL_MBUF_FLAG
数据包mbuf API将作为替代。
6.meter:更新API以适应配置文件。
7.ethdev:函数 rte_eth_dev_count() 弃用,由rte_eth_dev_count_avail()替代。
新函数 rte_eth_dev_count_total() ,用于取得全部已分配的端口数目以及是否可用。
8.ethdev:在结构 struct rte_eth_dev_info中,字段 rte_pci_device *pci_dev由字段 struct rte_device *device 替代。
9.ethdev:更改rte_eth_dev_configure() 参数的语义。
10.ethdev:更改rte_eth_rx_queue_setup() 参数的语义。
11.ethdev:对流API进行了一些修改,包括
未使用的DUP操作被删除。
流规则操作语义的修改。
流量规则现除PASSTHRU操作下,始终处于终止状态。
由于兼容性问题,C99样式的灵活数组由RSS操作和RAW模式项目结构中的标准指针替代。
RSS操作经修改,不再依赖外部struct rte_eth_rss_conf ,而是通过公开自身或直接通过配置字段,这些字段现被赋予更准确命名(rss_conf->rss_key => key, rss_conf->rss_key_len => key_len, rss_conf->rss_hf => types,num => queue_num)。添加了缺少的RSS参数(func 和level)。
修改了VLAN模式项(struct rte_flow_item_vlan),以包含内部EtherType而非外部TPID。
添加了新的传输属性到 struct rte_flow_attr,以明确澄清某些模式项目的行为。
现仅具备传输属性的PMD 能够实现PF和VF模式项目(bnxt和i40e),以保证一致性。
模式项PORT被重命名为PHY_PORT,以避免与DPDK端口ID混淆。
添加了与PHY_PORT模式项目相对应的操作,以重定匹配流量到特定物理端口。
添加了PORT_ID模式项目和操作,以高于PHY_PORT的级别,匹配和定位DPDK端口ID。
添加了 RTE_FLOW_ACTION_TYPE_[VXLAN/NVGRE]_ENCAP 操作项目,以支持VXLAN和NVGRE类型隧道端点的隧道封装操作。
添加了RTE_FLOW_ACTION_TYPE_[VXLAN/NVGRE]_DECAP 操作项目,以支持VXLAN和NVGRE类型隧道端点的隧道解封装操作。
添加了 RTE_FLOW_ACTION_TYPE_JUMP 项目类型,以支持重定匹配流到特定组。
添加了 RTE_FLOW_ACTION_TYPE_MARK 项目类型,以匹配流到先前标记的流。
12.ethdev:计数操作流API的更改:
rte_flow_create() API计数操作现需要struct rte_flow_action_count。
rte_flow_query() API参数从操作类型更改为操作结构。
13.ethdev:对卸载API的更改
14.ethdev:运行时间队列设置

ABI 变化

1. ring:环结构上的对齐约束必须从两个cacheline对齐放宽到一个cacheline对齐,并且在生产者和消耗者结构之间添加了空的缓存行填充。在具有64B高速缓存行的平台上,结构的大小和字段的偏移量保持不变,但在其他平台上会发生更改。
2.mempool:改变了一些操作。

  • 添加新的回调函数calc_mem_size 到rte_mempool_ops 中,以允许自定义所需的内存大小(计算)。添加新的回调 populate 到 rte_mempool_ops ,以允许自定义对象填充。
  • 将 get_capabilities 这一回调从 rte_mempool_ops 中移除,它的功能已涵盖在calc_mem_size 和 populate 中。
  • 将register_memory_area 这一回调从 rte_mempool_ops 中移除,由 populate 替代。

3.ethdev:rte_eth_dev_info的新增字段。
rte_eth_dev_info 结构在其末尾添加了两个附加条目:
default_rxportconf和default_txportconf。
两者本身也都是 rte_eth_dev_portconf 结构,并包含三个uint16_t类型字段:
burst_size, ring_size和 nb_queues。
这些是PMD推荐使用的参数值。
4. ethdev:所有流API的ABI都已更新。
5.bbdev:添加了新参数到 rte_bbdev_op_cap_turbo_dec。
6.bbdev:队列组分成UL / DL组。

已知问题

  • 辅助/次级进程可靠性低。
  • pdump与旧版本应用程序不兼容。
  • rte_abort在FreeBSD上花费时间过长。
  • VF未创建时,ixgbe PMD在hotplug detach上崩溃。
  • 在某些情况下,绑定PMD可能无法接受新的从属端口。
  • Vhost库中可能的性能下降。

本次更新的完整版内容可参考《DPDK 18.05 Release Note》

原文地址:DPDK开源社区

发表评论

电子邮件地址不会被公开。 必填项已用*标注