DPDK19.02 已发布,新版本都有哪些新功能和变化?

640?wx_fmt=jpeg

DPDK 19.02版本发布,

新功能和变化等你来Get!

640?wx_fmt=gif

▌ 新功能 

1.增加了对按原始分配释放大页的支持

一些使用内存事件回调(特别是管理RDMA内存区域的事件)的应用程序要求内存被释放回原始分配的系统位置。这些应用程序通常也会要求一次动态内存分配不能跨越两个单独的大页分配。新增的EAL init标志--match-allocations可满足以上两项要求。

2.增加了可在DPDK中寄存外部内存的API

新增的rte_extmem_register/rte_extmem_unregister API可以让DPDK中的大容量外部内存不用加入malloc heap就能够实现寄存。

3.增加了Virtio-user中不依赖大页的支持

--no-huge模式功能扩增,可使用基于memfd的内存(能在支持memfd的系统上),基于virtio-user的NIC也可以不依赖大页使用。

4.推出了ENA PMD v2.0.0版本

ENA PMD v2.0.0版本增加了以下的功能:

  • 增加了低延迟队列v2(LLQv2)。此项功能直接从PCI向设备推送报头,减少了数据包的延迟。因此NIC也能在doorbell后无需等待DMA马上开始数据包的处理。

  • 增加了HW TX和RX ring深度的独立配置。

  • 增加了对每个ring达8KRX描述符的支持。

  • 增加了对Tx额外的doorbell检查,可在数据包大量涌入的情况下更有效地处理Tx

  • 增加了每个队列的统计信息。

  • 使用xstats DPDK API增加了扩展统计。

  • 重置例程与DPDK API对齐,所以现在可以在像其他PMD里一样处理它。

  • 修复了乱序执行(OoO)的completion。

  • 修复了流量中端口的停用和启用所导致的内存泄漏。

  • 更新了PMD的文档和特性列表。

5.更新了mlx5驱动程序

对mlx5驱动做出以下更新:

  • missed计数器不通过rte_eth_xstats,而是通过rte_eth_xstats进行报告

  • 增加了通过Direct Verbs flow驱动对数据包报头进行的修改。

  • 增加了mlx5驱动程序验证的ConnectX-6 PCI设备ID。

  • 增加了对DevX到Direct Verbs flow驱动的流计数器支持。

  • 重新命名了黏着层的build选项,make命名为CONFIG_RTE_IBVERBS_LINK_DLOPEN,meson命名为ibverbs_link。

  • 增加了mlx dependency的静态链接。

  • 提高了E-Switch flow驱动的稳定性。

  • 增加了新的make build配置arm64-bluefield-linuxapp-gcc,可为Bluefield准确地设置cacheline大小。

6.更新了enic驱动程序

  • 增加了对RTE_ETH_DEV_CLOSE_REMOVE的支持

  • 增加了一个handler,可获固件版本的字符串

  • 增加了对组播传输过滤的支持

7.增加了对i40e VF动态队列分配的支持

在这之前,可用的VF队列在初始化阶段是由PF保留的,现在DPDK PF和内核PF(>=2.1.14)都可以支持动态队列分配。运行时,如果VF要求超过初始保留量的队列,VF重置之后PF可以按需分配多达16个队列。

8.增加了ICE net PMD

为Intel(R)以太网适配器E810增加了一个新的网络驱动ice。要获取更多关于新驱动的信息请访问http://doc.dpdk.org/guides/nics/ice.html。

9.增加了对SW辅助的VDPA实时迁移的支持

该项SW辅助的VDPA实时迁移可帮助不具有日志记录能力的VDPA设备执行实时迁移,中介的SW relay可以帮助设备追踪由DMA引起的脏页。IFC驱动程序已支持该项SW辅助的实时迁移模式。

10.在cryptodev对称会话操作中增加了安全检查

在cryptodev对称会话的访问中增加了一套安全检查,检查的内容包括会话用户信息的读写和涉及的私人数据在会话释放后的引用状态。

11.  更新了AESNI-MB PMD

  • 增加了对 intel-ipsec-mb 0.52版本的支持

  • 增加了AES-GMAC算法的支持

  • 增加了Plain SHA1, SHA224, SHA256, SHA384, and SHA512算法的支持

12.增加了IPsec库

新增了一个试验性的librte_ipsec库,为IPv4and IPv6数据包提供软件的ESP隧道和运输支持。

该库目前只为HMAC-SHA1算法链接下的AES-CBC和AES-CBC加密,以及AES-GCM 和NULL 算法提供支持。未来的版本计划支持更多算法的使用,请访问以下网址获取更多的信息:http://doc.dpdk.org/guides/prog_guide/ipsec_lib.html

13. 更新了ipsec-secgw示例应用

更新后的ipsec-secgw示例应用可使用librte_ipsec库,该库也是此次版本新增的。更新后,ipsec-secgw在保留了原有功能的基础上,又增加了一个命令行参数-l,用来支持IPsec库的使用。

IPsec库目前并不支持现有ipsec-secgw应用的所有功能。未来的版本计划支持更多功能。请访问以下网址获取更多的信息:http://doc.dpdk.org/guides/sample_app_ug/ipsec_secgw.html

14.使ISA-Lcompressdev驱动获得校检支持

增加了对ISA-L PMD中adler校检和 crc32校检的支持。这有助于保证压缩和解压中数据的完整。

15.增加了一个压缩性能测试工具

增加了一个新的性能测试工具来测试compressdev PMD,测试压缩率和压缩吞吐量。

16.在PowerManagement库中增加了intel_pstate支持

在之前,使用Power Management库需要停止使用intel_pstate 内核驱动,并启用acpi_cpufreq 内核驱动。但现在intel_pstate 内核驱动的使用已得到支持,而且能自动被库检测到,所以不再需要进行上述操作。

640?wx_fmt=gif

▌ API变化 

1. eal: rte_bitmap.h中的rte_bsf64函数已经重新命名为rte_bsf64_safe,并移至rte_common.h。

2. eal: 在以下不支持段fd API的情况下,Linux上的段fd API现将错误代码设置为ENOTSUP:

  • 尝试为配置到外部的内存段提供fd段

  • 必须要先有memfd支持才能提供fd段的情况(例如in-memory和no-huge模式)

3. eal: 函数rte_malloc_dump_stats(),rte_malloc_dump_heaps()和rte_malloc_get_socket_stats()的调用与函数调用rte_malloc_heap_create()和rte_malloc_heap_destroy()的同时进行不再安全。

4. mbuf:在18.05版本中已过时的RTE_MBUF_INDIRECT(),在19.02版本中被移除,并被替换为RTE_MBUF_CLONED()。

5. sched:因为mbufsched字段的新格式,函数rte_sched_port_pkt_write()和rte_sched_port_pkt_read_tree_path()中新增了参数中struct rte_sched_port。

6. pdump: 在18.05版本中rte_pdump_set_socket_dir(),rte_pdump_init()的参数path和enumrte_pdump_socktype都已经过时,在此次的版本中会被移除。

7. cryptodev: 移除了rte_cryptodev_queue_pair_setup()函数中的session_pool参数。

8. cryptodev: 引入了一个新函数rte_cryptodev_sym_session_pool_create(),目前在创建对称会话报头 mempool时该函数是强制使用的。请注意现在开始所有加密应用程序都要求使用该函数。不使用的话会导致rte_cryptodev_sym_session_create()函数返回错误值。

640?wx_fmt=gif

▌ ABI变化 

1. mbuf:rte_mbuf中sched部分的格式已改作如下几种字段:queue ID, traffic class, color。

2. cryptodev: 18.11版本的过时通知中已有过说明,rte_cryptodev_qp_conf结构已为对称会话mempool和对称会话私人数据mempool添加了两个参数。

3. cryptodev: 18.11版本的过时通知中已有过说明,rte_cryptodev_sym_session结构已更新,可包含更多信息,以保证能够安全地获取会话以及会话的私人数据。

4. security: 一个新字段uint64_t opaque_data已添加进rte_security_session结构。这可以让上层轻松地关联/取关用户定义的数据与安全会话。

640?wx_fmt=gif

▌ 已知问题 

一直以来,因为会造成系统崩溃①,若检测到binutils 2.30,对GCC build的 AVX-512支持会被停用。这会影响native机型在支持AVX512F的平台(如Intel Skylake处理器)上编译 target,还可能导致性能下降。即时的一个应急方案是在这些平台使用clang编译程序。起初在18.11版本的DPDK上提供的应急方案是完全停止对GCC的AVX-512支持,但是根据反馈给GCC社区的缺陷信息②,问题已被确定为binutils 2.30问题。现在只有GCC生成AVX-512指令,所以问题的范围被限定于GCC和binutils 2.30。

  https://bugs.dpdk.org/show_bug.cgi?id=97

  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096


点击底部阅读全文  640?wx_fmt=gif 

查看完整版DPDK 19.02 Release Notes

http://doc.dpdk.org/guides/rel_notes/release_19_02.html

640?wx_fmt=jpeg

 相关阅读 

640?wx_fmt=jpeg

你可能感兴趣的:(DPDK19.02 已发布,新版本都有哪些新功能和变化?)