29. 端口熱插拔框架
端口熱插拔框架為DPDK應(yīng)用程序提供了運(yùn)行時(shí)添加岗屏、移除端口的能力禽捆。 由于框架一來(lái)PMD實(shí)現(xiàn)藐石,所以熱插拔的端口必須是PMD支持的端口才行误续。 此外吨悍,從DPDK程序中移除端口之后,框架并不提供從系統(tǒng)中刪除設(shè)備的方法女嘲。 對(duì)于由物理網(wǎng)卡支持的端口畜份,內(nèi)核需要支持PCI熱插拔功能诞帐。
29.1. 概述
端口熱插拔框架的基本要求:
使用端口熱插拔框架的DPDK應(yīng)用程序需要管理其自己的端口欣尼。
端口熱插拔礦機(jī)被實(shí)現(xiàn)為允許DPDK應(yīng)用程序管理自己的端口。 例如停蕉,當(dāng)應(yīng)用程序調(diào)用添加端口的功能時(shí)愕鼓,將返回添加的端口號(hào)。 DPDK應(yīng)用程序也可以通過端口號(hào)移除該端口慧起。內(nèi)核需要支持待添加菇晃、移除的物理設(shè)備端口。
為了添加新的物理設(shè)備端口蚓挤,設(shè)備首先被內(nèi)核中的用戶框架IO驅(qū)動(dòng)識(shí)別磺送。 然后DPDK應(yīng)用程序可以調(diào)用端口熱插拔功能來(lái)連接端口。 移除過程步驟剛好相反灿意。 移除之前估灿,必須先停止并關(guān)閉端口。
DPDK應(yīng)用程序在移除端口之前缤剧,必須調(diào)用 “rte_eth_dev_stop()” 和 “rte_eth_dev_close()” 函數(shù)馅袁。 這些函數(shù)將啟動(dòng)PMD的反初始化過程。 本框架不會(huì)影響傳統(tǒng)的DPDK應(yīng)用程序的行為荒辕。
如果端口熱插拔的功能沒有被調(diào)用汗销,所有傳統(tǒng)的DPDK應(yīng)用程序仍然可以不加修改地工作犹褒。
29.2. 端口熱插拔API概述
-
添加一個(gè)端口
“rte_eth_dev_attach()” API 將端口添加到DPDK應(yīng)用程序,并返回添加的端口號(hào)弛针。 在調(diào)用API之前叠骑,設(shè)備應(yīng)該被用戶空間驅(qū)動(dòng)IO框架識(shí)別。 API接收一個(gè)類似 “0000:01:00.0” 的pci地址或者是 “net_pcap0,iface=eth0” 這樣的虛擬設(shè)備名稱钦奋。 在虛擬設(shè)備名稱情況下座云,格式與DPDK的一般‘-vdev’選項(xiàng)相同。
-
移除一個(gè)端口
“rte_eth_dev_detach()” API 從DPDK應(yīng)用程序中移除一個(gè)端口付材,并返回移除的設(shè)備的pci地址或虛擬設(shè)備名稱朦拖。
29.3. 引用
“testpmd” 支持端口熱插拔框架。
29.4. 限制
- 端口熱插拔API并不是線程安全的厌衔。
- 本框架只能在Linux下使能璧帝,BSD并不支持。
- 為了移除端口富寿,端口必須是igb_uio或VFIO管理的設(shè)備端口睬隶。
- 并非所有的PMD都支持移除功能。要知道PMD是否支持移除页徐,請(qǐng)搜索 rte_eth_dev::data::dev_flags 中的 “RTE_ETH_DEV_DETACHABLE” 標(biāo)志苏潜。 如果在PMD中定義該標(biāo)志,則表示支持变勇。