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
?
以下是各公司的補(bǔ)丁數(shù)量(據(jù)不完全統(tǒng)計(jì)):
??????? 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延長(zhǎng)至uint16_t。
port_id 范圍從8位增加至16位從而為DPDK提供超過(guò)256個(gè)端口的支持。調(diào)整了所有含參數(shù) port_id 的ethdev APIs。
2. 修改了rte_eth_stats_reset的返回類型。
將 rte_eth_stats_reset 的返回類型從 void 調(diào)整至int ,因而調(diào)用程序能決定是否該設(shè)備支持操作以及操作是否已被運(yùn)行。
3. 新增SoftNIC PMD。
增加了新的SoftNIC PMD。該虛擬設(shè)備提供軟件實(shí)現(xiàn)的流量管理功能。
4. 為PMD初始化添加了bus agnostic功能至cryptodev。
為驅(qū)動(dòng)增加了新的PMD協(xié)助、總線(bus)獨(dú)立、和 rte_cryptodev_pmd_parse_input_args ()、 rte_cryptodev_pmd_create () 及 rte_cryptodev_pmd_destroy () 功能,以管理新的設(shè)備實(shí)例的創(chuàng)建和解構(gòu)。
5. 更新了QAT crypto PMD。
新增以下幾種性能改進(jìn):
o?? 已將atomics從內(nèi)部隊(duì)列結(jié)構(gòu)中移除。
o?? 在響應(yīng)處理上增加了合并寫入至HEAD CSR。
o?? 在請(qǐng)求處理上增加了合并寫入至TAIL CSR。
另外,為AES CCM算法添加了支持。
6. 更新了AESNI MB PMD。
更新后的AESNI MB PMD能提供以下額外支持:
o?? DES CBC算法。
o?? DES DOCSIS BPI算法。
該調(diào)整僅支持IPSec Multi-buffer 庫(kù)的0.47版本。詳情請(qǐng)參閱 《AESN-NI Multi Buffer Crypto輪詢模式驅(qū)動(dòng)》文件(http://dpdk.org/doc/guides/cryptodevs/aesni_mb.html)。
7. 更新了OpenSSL PMD。
更新后的OpenSSL PMD能提供以下額外支持:
o?? DES CBC算法。
o?? AES CCM算法。
8. 添加了新的基準(zhǔn)測(cè)試模式至dpdk-test-crypto-perf應(yīng)用。
增加了一個(gè)新的“PMD cyclecount”基準(zhǔn)測(cè)試模式至 dpdk-test-crypto-perf 應(yīng)用以顯示硬件加速使用的CPU周期的詳細(xì)分解。
9. 新增Security Offload Library。
增加了一個(gè)實(shí)驗(yàn)庫(kù)rte_security。為諸如IPSec這樣在以太網(wǎng)設(shè)備上使用inline ipsec卸載或在lookaside crypto設(shè)備上使用全協(xié)議卸載的協(xié)議提供安全APIs。
其他信息請(qǐng)參閱《DPDK程序員指南》的《安全庫(kù)》部分(http://dpdk.org/doc/guides/prog_guide/rte_security.html)。
10. 更新了IXGBE以太網(wǎng)驅(qū)動(dòng)以支持rte_security。
更新了ixgbe以太網(wǎng)PMD以支持rte_security inline IPSec卸載。
11. 更新了ipsec-secgw應(yīng)用以支持rte_security。
更新了ipsec-secgw 示例應(yīng)用以支持使用lookaside crypto卸載的ipsec inline和全協(xié)議卸載的 rte_security行為。
12. 對(duì)libvhost-user新增IOMMUl支持。
在Vhost-user后端配置了設(shè)備IOTLB,同時(shí)啟用了Virtio的IOMMU功能。該功能默認(rèn)禁止,可以在注冊(cè)vhost設(shè)備時(shí)設(shè)置 RTE_VHOST_USER_IOMMU_SUPPORT 啟用。
13. 新增Event Ethernet Adapter Library。
增加了事件以太網(wǎng)適配器庫(kù)(Event Ethernet Adapter Library)。該適配器庫(kù)為eventdev應(yīng)用提供APIs從而給eventdev數(shù)據(jù)包流配置ethdev。
14. 為事件以太網(wǎng)適配器更新了DPAA2事件PMD(DPAA2 Event PMD)。
為DPAA2添加了eventdev以太網(wǎng)適配器支持。
15. 新增Membership Library(rte_member)。
增加了Membership Library新型數(shù)據(jù)結(jié)構(gòu)庫(kù)。
成員庫(kù)(Membership Library)是一種傳統(tǒng)過(guò)濾器結(jié)構(gòu)(例如Bloom Filter)的拓展,在各種工作負(fù)荷狀態(tài)下和應(yīng)用中有多重使用方式。一般來(lái)說(shuō),成員庫(kù)是一種數(shù)據(jù)結(jié)構(gòu),提供“集合總結(jié)”,并對(duì)是否某個(gè)成員隸屬一個(gè)集合這類集合成員資格作出回應(yīng)。
該庫(kù)為DPDK應(yīng)用提供APIs,從而能插入新成員,刪除已有成員,在既定集合或集合群內(nèi)詢問(wèn)成員的存在。在集合群情況下,該庫(kù)不止會(huì)傳回是否組件已插入某個(gè)集合,同時(shí)會(huì)告知該組件隸屬哪個(gè)集合。
詳情請(qǐng)閱《程序員指南》的《成員庫(kù)》部分(http://dpdk.org/doc/guides/prog_guide/member_lib.html) 。
16. 新增Generic Segmentation Offload Library。
增加了GSO庫(kù),能幫助應(yīng)用將大包(例如64KB的MTU)切分成小包(例如1500B的MTU)。支持以下數(shù)據(jù)包類型:
o?? TCP/IPv4包。
o?? VxLAN包,必須具備一個(gè)外部IPv4報(bào)文頭部和一個(gè)內(nèi)在TCP/IPv4包。
o?? GRE包,必須具備一個(gè)外部IPv4報(bào)文頭部和數(shù)個(gè)內(nèi)在TCP/IPv4報(bào)文頭部。
GSO庫(kù)不檢查輸入包是否有正確的校驗(yàn)和,也不更新輸出包的校驗(yàn)和。另外,GSO庫(kù)不處理IP分割包。
17. 新增流分類庫(kù)。
增加了一個(gè)實(shí)驗(yàn)性流分類庫(kù),為DPDK應(yīng)用提供APIs以通過(guò)一套流規(guī)則將其匹配,從而分類輸入包。該庫(kù)使用 librte_table API來(lái)管理流規(guī)則。
已知問(wèn)題
服務(wù)核心因原子鎖(atomic lock)問(wèn)題無(wú)法呼叫服務(wù)回呼
在之前的多線程不安全服務(wù)和服務(wù)核心的特定配置中,服務(wù)核心并未正確在該服務(wù)上發(fā)布原子鎖。這會(huì)導(dǎo)致核心輪詢?cè)摲?wù),但表面看來(lái)又像另一條線程正在執(zhí)行該服務(wù)回呼。目前這些服務(wù)的原子鎖邏輯問(wèn)題已解決,并經(jīng)過(guò)了可讀性重構(gòu)。
API變化
增加了Ethdev名稱長(zhǎng)度。
內(nèi)部設(shè)備名稱大小已增至64字符,允許存儲(chǔ)更長(zhǎng)的總線特定名稱。
刪除了Ethdev RTE_ETH_DEV_DETACHABLE標(biāo)志。
刪除了Ethdev RTE_ETH_DEV_DETACHABLE 標(biāo)志。不再需要以上標(biāo)志,將使用新型熱插拔實(shí)施。已從以太庫(kù)將其移除,其語(yǔ)義目前為總線和PMD層級(jí)。
更新了服務(wù)核心API的可用性。
改變了服務(wù)核心API,同時(shí)從可能識(shí)別服務(wù)的API當(dāng)中移除了指針,轉(zhuǎn)而使用整數(shù)IDs來(lái)識(shí)別每個(gè)服務(wù)。該操作簡(jiǎn)化應(yīng)用程序代碼,幫助調(diào)試,并提供更好的封閉性能。主要變化如下:
o? 由ID而非 rte_service_spec 指針來(lái)識(shí)別服務(wù)
o? 通過(guò) set 功能而非啟用/禁止降低了API表面
o? 重整rte_service_register 以提供服務(wù)ID給管理員
o? 將啟用和結(jié)束APIs重整入 rte_service_runstate_set
o? 新增API以設(shè)置服務(wù)實(shí)施的運(yùn)行狀態(tài)(runstate),從而顯示準(zhǔn)備就緒
mempool library中作出了以下變化:
o? 為 rte_mempool 將flags 數(shù)據(jù)類型從 int 移動(dòng)至 unsigned int。
o? 從 rte_mempool_generic_put 和 rte_mempool_generic_get API中刪除了 __rte_unused int flag 參數(shù)。
o? 在rte_mempool_xmem_size和rte_mempool_xmem_usage中添加了flags 參數(shù)
o? 在Xen dom0中使用rte_mem_phy2mch以獲得物理地址;;當(dāng)Xen dom0支持被移除后移除該API。
新增關(guān)于物理地址處理(physical address handling)的IOVA別名。
刪除了一些與物理地址處理相關(guān)的數(shù)據(jù)類型、結(jié)構(gòu)成員和功能,具備了有IOVA用法的新別名。例如:
o???phys_addr_t能經(jīng)常以同樣大小的rte_iova_t替換。
o?? RTE_BAD_PHYS_ADDR時(shí)常被相同值的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。
此前實(shí)施于EAL內(nèi)的PCI bus已被移動(dòng)。增加了一個(gè)首件作為RTE庫(kù),提供PCI協(xié)助以解析設(shè)備地點(diǎn)或其他諸如此類的公用程式。由實(shí)際總線驅(qū)動(dòng)組成的次件已被移至相應(yīng)分目錄,無(wú)需改變其功能。
一些與PCI相關(guān)的功能也無(wú)需再通過(guò)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 移動(dòng)至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返回值已被改變?yōu)閕nt。這樣PMDs能返回錯(cuò)誤值以防止在統(tǒng)計(jì)被處理時(shí)間階段發(fā)生失敗。
修改了rte_cryptodev_allocate_driver功能。
修改了cryptodev庫(kù)中的rte_cryptodev_allocate_driver()功能。增加了一個(gè)struct cryptodev_driver *crypto_drv 額外參數(shù)。
從librte_cryptodev移除了虛擬設(shè)備總線特定動(dòng)能。
rte_cryptodev_vdev_parse_init_params() 和rte_cryptodev_vdev_pmd_init()功能已從librte_cryptodev當(dāng)中刪除,被rte_cryptodev_pmd_parse_input_args()和rte_cryptodev_pmd_create()非總線特定功能替代。
刪除了rte_cryptodev_create_vdev()功能以避免在librte_cryptodev當(dāng)中對(duì)vdev的依賴;用戶轉(zhuǎn)而能直接呼叫rte_vdev_init()。
從librte_cryptodev中移除了PCI設(shè)備總線特定功能。
rte_cryptodev_pci_generic_probe()和rte_cryptodev_pci_generic_remove()功能已從 librte_cryptodev當(dāng)中刪除,被rte_cryptodev_pmd_create()和rte_cryptodev_pmd_destroy()非總線特定功能替代。
刪除了廢棄函數(shù)以管理日志級(jí)別或類型。
刪除了rte_set_log_level()、rte_get_log_level()、rte_set_log_type()和rte_get_log_type()函數(shù)。
以上函數(shù)分別被rte_log_set_global_level ()、rte_log_get_global_level ()、rte_log_set_level ()和rte_log_get_level ()替換。
移除了mbuf標(biāo)志PKT_RX_VLAN_PKT and PKT_RX_QINQ_PKT。
已刪除mbuf PKT_RX_VLAN_PKT和PKT_RX_QINQ_PKT標(biāo)志,因?yàn)槠湫袨槲幢磺‘?dāng)描述。
添加了mbuf的PKT_RX_VLAN_PKT和PKT_RX_QINQ_PKT標(biāo)志。
已添加兩個(gè)mbuf標(biāo)志以表明VLAN標(biāo)識(shí)符已保存于mbuf 結(jié)構(gòu)。例如:
o?? 若VLAN未被剝離,且TCI已保存:PKT_RX_VLAN
o?? 若VLAN已剝離,且TCI已保存:PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED
在ethdev庫(kù)里修改了vlan_offload_set_t功能原型。
在ethdev庫(kù)里修改了 vlan_offload_set_t 功能原型。返回值已從void 改變?yōu)閕nt,因此調(diào)用程序能決定備份(backing)設(shè)備是否支持操作或操作是否成功被執(zhí)行。
ABI變化
延長(zhǎng)了port_id范圍。
在rte_eth_dev_data 結(jié)構(gòu)中的域port_id 的大小已被改變。如上述新功能部分所述。
增加了新參數(shù)至rte_eth_dev。
新參數(shù)security_ctx已被增加至rte_eth_dev以支持像IPSec inline一樣的安全操作。
增加了新參數(shù)至rte_cryptodev。
新參數(shù)security_ctx已被增加至rte_cryptodev以支持像lookaside crypto一樣的安全操作。
功能取消
已移除EAL當(dāng)中的Xen dom0、xenvirt PMD和vhost_xen。
已移除加密性能單元測(cè)試,替換為dpdk-test-crypto-perf應(yīng)用。
共享程序庫(kù)版本
此版本中加入了帶加號(hào)的代碼庫(kù)。
? ? + 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
已測(cè)試平臺(tái)
英特爾(R)平臺(tái)和英特爾(R) 網(wǎng)卡組合
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
??紅帽企業(yè)Linux服務(wù)器發(fā)布7.3版本
??SUSE企業(yè)Linux 12
??風(fēng)河系統(tǒng)公司Linux 8
??Ubuntu 16.04
??Ubuntu 16.10
o?? 網(wǎng)卡:
??英特爾(R) 82599ES 10千兆以太網(wǎng)控制器
??固件版本:0x61bf0001
??設(shè)備id (pf/vf) :8086:10fb / 8086:10ed
??驅(qū)動(dòng)版本:5.2.3 (ixgbe)
??英特爾(R)公司以太網(wǎng)連接X(jué)552/X557-AT 10GBASE-T
??固件版本:0x800003e7
??設(shè)備id (pf/vf) :8086:15ad / 8086:15a8
??驅(qū)動(dòng)版本:4.4.6 (ixgbe)
??英特爾(R)以太網(wǎng)聚合網(wǎng)絡(luò)適配器X710-DA4 (4x10G)
??固件版本:6.01 0x80003205
??設(shè)備id (pf/vf): 8086:1572 / 8086:154c
??驅(qū)動(dòng)版本:2.1.26 (i40e)
??英特爾(R)以太網(wǎng)聚合網(wǎng)絡(luò)適配器X710-DA2 (2x10G)
??固件版本:6.01 0x80003204
??設(shè)備id (pf/vf): 8086:1572 / 8086:154c
??驅(qū)動(dòng)版本:2.1.26 (i40e)
??英特爾(R)以太網(wǎng)聚合網(wǎng)絡(luò)適配器XXV710-DA2 (2x25G)
??固件版本:6.01 0x80003221
??設(shè)備id (pf/vf): 8086:158b
??驅(qū)動(dòng)版本:2.1.26 (i40e)
??英特爾(R)以太網(wǎng)聚合網(wǎng)絡(luò)適配器XL710-QDA2 (2X40G)
??固件版本:6.01 0x8000321c
??設(shè)備id (pf/vf): 8086:1583 / 8086:154c
??驅(qū)動(dòng)版本:2.1.26 (i40e)
??英特爾(R)公司I350千兆網(wǎng)絡(luò)連接
??固件版本:1.63, 0x80000dda
??設(shè)備id (pf/vf): 8086:1521 / 8086:1520
??驅(qū)動(dòng)版本:5.3.0-k (igb)
往期精選
總結(jié)
以上是生活随笔為你收集整理的DPDK Release 17.11的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 玩转Ubuntu(Ubuntu查看本机的
- 下一篇: iOS 设置圆角和阴影并存(部分圆角)