1.3 DPDK源代码

本节介绍DPDK发布的主要版本情况,供读者学习参考。

1.3.1 版本总述

目前 DPDK 版本已发布到 V2.2.0,发布频率为每周 2~3 次,参见 http://www.dpdk. org/browse/dpdk/refs/。主要版本发布时间见表1-1。

表1-1 DPDK主要版本发布时间

DPDK 每个版本的发布说明主要有:新增特性、修复的问题、API(Application Programming Interface,应用程序编程接口)、ABI(Application Binary Interface,应用程序二进制接口)、目前版本存在的问题等。如果想查看 PDF 格式文档,也可到http://www.dpdk.org/doc/archives网址下查看各个版本的PDF文档介绍。

1.3.2 最新版本特性介绍

本节以DPDK V2.2.0版本为例做简要介绍,未全部列出,其他版本的变更情况基本上也是按照这4个方面介绍的。

1.3.2.1 版本特性

V2.2.0 版本主要特性列举如下。

(1)环(ring)释放使能。rte_ring_free()是一个新增功能函数,允许用户对已经创建的ring(通过函数rte_ring_create()创建的ring)进行释放操作。

(2)增加实验性加密接口API。数据分组的加密处理是由Intel Quick Assit设备和Intel AES-NI多缓冲库的两个驱动提供的。因为此功能接口处理还处于实验阶段,故API变更时不会预先通知。

(3)扩展统计。重定义和扩展统计命名规则,以字符串的形式来存储元数据。

(4)在以太网设备上增加API来获取RX/TX队列信息。增加上层查询RX/TX队列信息的能力,在函数rte_eth_dev_info中为设备增加新的域来展现关于RX/TX的描述信息。

(5)增加RSS动态配置。

(6)增强IP pipeline应用。

1.3.2.2 解决的问题

本节介绍DPDK V2.2.0版本所解决的主要问题,简要示例如下。

(1)修复了epoll超时问题(调用epoll_wait()超时后,rte_epoll_wait()不返回的问题)。

(2)散列方面

● 修复Cuckoo Hash值表;

● 当key都为0时,修复不正确的查询;

● 使用多核时,由于全局ring被所有核共享,导致切换不能正常工作,本版本对此进行了修复,通过减少冲突来实现切换。

1.3.2.3 API变更

DPDK V2.2.0版本API变更过程如下。

(1)删除废弃的导流器API,使用rte_eth_dev_filter_ctrl()来替代;

(2)dcb_queue 重命名为 dcb_tc,与此有关的数据结构:rte_eth_dcb_rx_conf, rte_eth_dcb_tx_conf,rte_eth_vmdq_dcb_conf,rte_eth_vmdq_dcb_tx_conf做同步变更;

(3)函数rte_eth_rx_queue_count()的返回类型由“uint_t”变为“int”;

(4)函数rte_eal_pci_close_one()弃用,改为rte_eal_pci_detach();

(5)ACLAPI ipv4vlan废弃并删除;

(6)散列功能函数rte_jhash2()弃用,改为rte_jhash_32b();

(7)ring PMD相关函数rte_eth_ring_pair_create(),rte_eth_ring_pair_attach()弃用并删除;

(8)联合域virtual重命名为virty,以便于C++编译。

1.3.2.4 ABI变更

DPDK V2.2.0版本ABI的主要变更过程如下。

(1)rte_intr_handle和rte_eth_conf结构变更,支持RX中断;

(2)导流器rte_eth_fdir_flow_ext结构变更,新增域支持在VF下的导流器过滤;

(3)rte_eth_dev_info 新增了rx_desc_lim和tx_desc_lim两个字段;

(4)每个端口队列最大数CONFIG_RTE_MAX_QUEUES_PER_PORT调整为1 024;其他变更可以参考DPDK文档链接。