本發(fā)明屬于熱插拔技術(shù)領(lǐng)域,具體涉及一種基于pcie總線的dpdk設(shè)備熱插拔方法。
背景技術(shù):
pciexpress(簡(jiǎn)稱為pcie)采用了目前業(yè)內(nèi)流行的點(diǎn)對(duì)點(diǎn)串行連接,比起pci以及更早期的計(jì)算機(jī)總線的共享并行架構(gòu),每個(gè)設(shè)備都有自己的專用連接,不需要向整個(gè)總線請(qǐng)求帶寬,而且可以把數(shù)據(jù)傳輸率提高到一個(gè)很高的頻率,達(dá)到pci所不能提供的高帶寬。
如圖1所示,網(wǎng)絡(luò)安全設(shè)備(cybersecurityappliance)的cpu節(jié)點(diǎn)和交換節(jié)點(diǎn)就是通過pciegen3總線直接相連的,cpu節(jié)點(diǎn)相當(dāng)于是pcie總線上的主設(shè)備,交換節(jié)點(diǎn)相當(dāng)于是pcie總線上的從設(shè)備。由于傳統(tǒng)的系統(tǒng)是通過以太網(wǎng)相連的,因此傳統(tǒng)的交換芯片只提供以太網(wǎng)接口,為此cpu節(jié)點(diǎn)側(cè)需要增加nic(網(wǎng)絡(luò)適配器)芯片做pcie總線到以太網(wǎng)的轉(zhuǎn)換。cpu節(jié)點(diǎn)和交換節(jié)點(diǎn)之間的pcie總線是通過一個(gè)背板連接的,所以pcie總線的源端和終端設(shè)備的上電時(shí)序是可能不同步的。
當(dāng)一個(gè)交換節(jié)點(diǎn)需要被替換時(shí),就不可避免的要引入pcie設(shè)備的熱插拔,所謂的熱插拔即帶電插拔,熱插拔功能就是允許用戶在不關(guān)閉系統(tǒng),不切斷電源的情況下取出和更換板卡、硬盤或電源等部件,從而提高了系統(tǒng)的擴(kuò)展性、靈活性和事故及時(shí)恢復(fù)能力等。
像一般的nic的熱插拔機(jī)制,現(xiàn)有的網(wǎng)絡(luò)安全設(shè)備也會(huì)有一個(gè)標(biāo)準(zhǔn)的熱插拔流程來處理這種正常的替換應(yīng)用。
如圖2所示,網(wǎng)絡(luò)安全設(shè)備的標(biāo)準(zhǔn)熱插拔流程包括以下步驟:
1)按壓交換節(jié)點(diǎn)上的熱插拔按鈕從而觸發(fā)一個(gè)熱插拔信號(hào);
2)這個(gè)熱插拔事件會(huì)被通知到cpu節(jié)點(diǎn)上的pcie總線驅(qū)動(dòng),pcie總線驅(qū)動(dòng)然后會(huì)調(diào)用通用設(shè)備驅(qū)動(dòng)的“退出”功能;
3)通用設(shè)備驅(qū)動(dòng)分離對(duì)應(yīng)設(shè)備的應(yīng)用程序并釋放分配給這個(gè)設(shè)備的所有資源,以作設(shè)備拔出準(zhǔn)備;
4)pcie總線驅(qū)動(dòng)釋放分配給這個(gè)設(shè)備的所有資源,并從操作系統(tǒng)中分離這個(gè)設(shè)備,以作設(shè)備硬件拔出準(zhǔn)備;
5)再次將設(shè)備插入時(shí),會(huì)自動(dòng)發(fā)出一個(gè)熱插拔信號(hào),pcie總線驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)會(huì)初始化新插入的設(shè)備,并重新進(jìn)行數(shù)據(jù)鏈接。
如圖3所示,當(dāng)前述的網(wǎng)絡(luò)安全設(shè)備中運(yùn)行有inteldpdk應(yīng)用程序時(shí),該dpdk應(yīng)用程序?qū)⑹褂谩坝脩艨臻g設(shè)備驅(qū)動(dòng)”(即dpdk設(shè)備驅(qū)動(dòng))來處理之前幾乎所有在“通用內(nèi)核空間設(shè)備驅(qū)動(dòng)”(即通用設(shè)備驅(qū)動(dòng))中進(jìn)行的功能,因此網(wǎng)絡(luò)安全設(shè)備的既有標(biāo)準(zhǔn)熱插拔流程將受限于dpdk應(yīng)用程序,使得pcie總線驅(qū)動(dòng)調(diào)用通用設(shè)備驅(qū)動(dòng)的“退出”功能這一環(huán)節(jié)時(shí)變成不可能。如果熱插拔事件是在dpdk應(yīng)用程序主機(jī)上產(chǎn)生的,那么設(shè)備將直接從pcie驅(qū)動(dòng)中分離而不通知上層的dpdk應(yīng)用程序,從而使這些上層的dpdk應(yīng)用程序發(fā)生崩潰。需要說明的是,所謂的dpdk應(yīng)用程序具體是運(yùn)行在用戶空間上利用自身提供的數(shù)據(jù)平面庫來收發(fā)數(shù)據(jù)包的,繞過了linux內(nèi)核協(xié)議棧對(duì)數(shù)據(jù)包處理過程。
鑒于此,intel公司給出的解決方案是提供一組apis,用來處理前面所提到的熱插拔問題,具體為:(1)端口熱插拔架構(gòu)提供具有加載和分離端口能力的dpdk應(yīng)用程序;(2)加載和分離物理設(shè)備的端口需要內(nèi)核支持;(3)使用端口熱插拔架構(gòu)的dpdk應(yīng)用程序必須管理它們自己的端口,它們負(fù)責(zé)處理熱插拔事件。
然而intel公司所給出的解決方案目前還存在以下兩個(gè)問題:(1)dpdk應(yīng)用程序不知道熱插拔事件被觸發(fā)的時(shí)機(jī);(2)在標(biāo)準(zhǔn)的pcie設(shè)備熱插拔流程開始之前,dpdk應(yīng)用程序也許還沒有全部完成設(shè)備分離的例行程序。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是根據(jù)上述現(xiàn)有技術(shù)的不足之處,提供一種基于pcie總線的dpdk設(shè)備熱插拔方法,該熱插拔方法通過將標(biāo)準(zhǔn)熱插拔流程與intel端口熱插拔架構(gòu)進(jìn)行配合使用,當(dāng)熱插拔請(qǐng)求信號(hào)產(chǎn)生時(shí),使其能被正確傳達(dá)至dpdk應(yīng)用程序中,從而調(diào)用intel端口熱插拔架構(gòu)進(jìn)行例行程序分離,之后再進(jìn)行標(biāo)準(zhǔn)熱插拔流程。
本發(fā)明目的實(shí)現(xiàn)由以下技術(shù)方案完成:
一種基于pcie總線的dpdk設(shè)備熱插拔方法,涉及位于背板上并經(jīng)pcie總線連接的cpu節(jié)點(diǎn)和交換節(jié)點(diǎn),其特征在于所述熱插拔方法中的熱拔出處理包括以下步驟:在所述cpu節(jié)點(diǎn)中,dpdk應(yīng)用程序持續(xù)向bmc模塊詢問是否有來自于所述交換節(jié)點(diǎn)的熱拔出請(qǐng)求信號(hào);若所述dpdk應(yīng)用程序獲得所述熱拔出請(qǐng)求信號(hào),調(diào)用端口熱插拔架構(gòu)來分離內(nèi)嵌在交換芯片中的nic邏輯,完成后向所述bmc模塊發(fā)送熱拔出響應(yīng)信號(hào);所述交換節(jié)點(diǎn)在獲得所述熱拔出響應(yīng)信號(hào)后,觸發(fā)標(biāo)準(zhǔn)熱插拔事件信號(hào)給所有的所述cpu節(jié)點(diǎn),所述cpu節(jié)點(diǎn)上的pcie總線驅(qū)動(dòng)釋放分配給待拔出交換板的所有資源,之后從所述交換節(jié)點(diǎn)拔出所述交換板。
所述熱拔出請(qǐng)求信號(hào)的發(fā)送過程包括以下步驟:在所述交換節(jié)點(diǎn),按壓位于交換板上的熱插拔按鈕以產(chǎn)生發(fā)送給cpld模塊的脈沖信號(hào),所述cpld模塊隨之發(fā)出所述熱拔出請(qǐng)求信號(hào)至cmm模塊;所述cmm模塊將所述熱拔出請(qǐng)求信號(hào)發(fā)送給所有的所述cpu節(jié)點(diǎn)上的所述bmc模塊;所述bmc模塊接收并存儲(chǔ)所述熱拔出請(qǐng)求信號(hào)。
所述cmm模塊向外發(fā)出的所述熱拔出請(qǐng)求信號(hào)中包含由i2c總線產(chǎn)生的信息類型和位置的i2c信息。
所述交換節(jié)點(diǎn)中的cmm模塊在將所述熱拔出請(qǐng)求信號(hào)發(fā)送至所述bmc模塊后,持續(xù)向所述bmc模塊詢問是否有所述熱拔出響應(yīng)信號(hào);所述cmm模塊在獲得所述熱拔出響應(yīng)信號(hào)后,將向所述交換節(jié)點(diǎn)上的cpld模塊發(fā)送“準(zhǔn)備好”的信號(hào)以觸發(fā)所述標(biāo)準(zhǔn)熱插拔事件信號(hào)。
所述熱插拔方法中的熱插入處理包括以下步驟:在所述交換節(jié)點(diǎn)中插入交換板時(shí),所述交換節(jié)點(diǎn)上的cpld模塊發(fā)出一個(gè)標(biāo)準(zhǔn)熱插入事件信號(hào)給所有的所述cpu節(jié)點(diǎn),所述cpu節(jié)點(diǎn)上的pcie總線驅(qū)動(dòng)和通用設(shè)備驅(qū)動(dòng)在獲得所述標(biāo)準(zhǔn)熱插入事件信號(hào)后初始化插入的所述交換板;所述dpdk應(yīng)用程序檢測(cè)到新的nic邏輯,調(diào)用所述端口熱插拔架構(gòu)加載端口,以與所述nic邏輯建立連接;所述dpdk應(yīng)用程序恢復(fù)運(yùn)行狀態(tài),數(shù)據(jù)鏈路重新獲得配發(fā)。
本發(fā)明的優(yōu)點(diǎn)是,熱插拔方法簡(jiǎn)單,通過將既有的標(biāo)準(zhǔn)熱插拔流程同intel端口熱插拔架構(gòu)進(jìn)行配合使用,從而使熱插拔信號(hào)能夠傳達(dá)至dpdk應(yīng)用程序中,當(dāng)熱插拔請(qǐng)求信號(hào)產(chǎn)生時(shí),使其能被正確傳達(dá)至dpdk應(yīng)用程序中,從而調(diào)用intel端口熱插拔架構(gòu)進(jìn)行例行程序分離,之后再進(jìn)行標(biāo)準(zhǔn)熱插拔流程,避免以往交換板設(shè)備直接從pcie總線驅(qū)動(dòng)中分離而未通知上層的dpdk應(yīng)用程序,造成dpdk應(yīng)用程序崩潰。
附圖說明
圖1為現(xiàn)有技術(shù)中和本發(fā)明中交換節(jié)點(diǎn)和cpu節(jié)點(diǎn)通過pcie總線連接的示意圖;
圖2為現(xiàn)有技術(shù)中網(wǎng)絡(luò)安全設(shè)備的標(biāo)準(zhǔn)熱插拔流程示意圖;
圖3為現(xiàn)有技術(shù)中標(biāo)準(zhǔn)熱插拔流程無法在運(yùn)行有dpdk應(yīng)用程序的網(wǎng)絡(luò)安全設(shè)備上正常工作的示意圖;
圖4為本發(fā)明中熱插拔方法中設(shè)備拔出的流程示意圖;
圖5為本發(fā)明中熱插拔方法中設(shè)備插入的流程示意圖。
具體實(shí)施方式
以下結(jié)合附圖通過實(shí)施例對(duì)本發(fā)明的特征及其它相關(guān)特征作進(jìn)一步詳細(xì)說明,以便于同行業(yè)技術(shù)人員的理解:
實(shí)施例:如圖1所示,本實(shí)施例具體涉及一種基于pcie總線的dpdk設(shè)備熱插拔方法,該熱插拔方法應(yīng)用于運(yùn)行有dpdk應(yīng)用程序的網(wǎng)絡(luò)安全設(shè)備上,網(wǎng)絡(luò)安全設(shè)備的cpu節(jié)點(diǎn)和交換節(jié)點(diǎn)之間通過pcie總線進(jìn)行相連,cpu節(jié)點(diǎn)相當(dāng)于是pcie總線上的主設(shè)備,交換節(jié)點(diǎn)相當(dāng)于是pcie總線上的從設(shè)備,且cpu節(jié)點(diǎn)和交換節(jié)點(diǎn)之間的pcie總線是通過一個(gè)背板連接的。
如圖1、4所示,本實(shí)施例中基于pcie總線的dpdk設(shè)備熱插拔方法分為熱拔出以及熱插入兩個(gè)部分,其中,熱拔出方法具體包括以下步驟:
(1)在待拔出的交換板上具有一個(gè)熱插拔按鈕,在準(zhǔn)備熱拔出前,首先按壓該熱插拔按鈕以產(chǎn)生一個(gè)脈沖信號(hào)并發(fā)送給交換節(jié)點(diǎn)上的cpld模塊,之后cpld模塊隨之向cmm模塊發(fā)出一個(gè)熱拔出請(qǐng)求信號(hào);
其中,交換板也可以是其它待拔出的設(shè)備;cpld(complexprogrammablelogicdevice)模塊全稱為復(fù)雜可編程邏輯器件模塊;cmm(chassismanagementmodule)模塊全稱為機(jī)架管理模塊,用于建立機(jī)架內(nèi)硬件設(shè)備間的管理鏈路,并進(jìn)行相應(yīng)的管理;
(2)cmm模塊在接收到熱拔出請(qǐng)求信號(hào)后,通過i2c總線產(chǎn)生包含信息類型和位置的i2c信息,并將攜帶有該i2c信息的熱拔出請(qǐng)求信號(hào)發(fā)送給所有的cpu節(jié)點(diǎn)上的bmc模塊;
(3)bmc模塊上的后臺(tái)程序?qū)?huì)接收并存儲(chǔ)這一熱拔出請(qǐng)求信號(hào),其中,bmc(baseboardmanagementcontroller)模塊全稱為基板管理控制器模塊;
(4)與此同時(shí),cpu節(jié)點(diǎn)上的dpdk應(yīng)用程序持續(xù)向bmc模塊詢問是否有熱拔出請(qǐng)求信號(hào);
(5)bmc模塊在dpdk應(yīng)用程序的詢問下,將會(huì)把所收到的熱拔出請(qǐng)求信號(hào)回復(fù)給dpdk應(yīng)用程序;
(6)dpdk應(yīng)用程序在收到熱拔出請(qǐng)求信號(hào)后,調(diào)用intel的端口熱插拔架構(gòu)來分離內(nèi)嵌在交換芯片中的nic邏輯,這一過程結(jié)束之后將向bmc模塊反饋一個(gè)熱拔出響應(yīng)信號(hào);其中,交換芯片位于交換節(jié)點(diǎn)且集成nic邏輯,cpu節(jié)點(diǎn)通過pcie總線與交換芯片直接相連,nic邏輯指的是內(nèi)嵌于交換芯片中用以實(shí)現(xiàn)nic芯片功能的集成電路;
(7)bmc模塊接收并存儲(chǔ)這一熱拔出響應(yīng)信號(hào);
(8)當(dāng)交換節(jié)點(diǎn)中的cmm模塊向cpu節(jié)點(diǎn)發(fā)出熱拔出請(qǐng)求信號(hào)后,將持續(xù)向cpu節(jié)點(diǎn)中的bmc模塊詢問是否有相應(yīng)的熱拔出響應(yīng)信號(hào)反饋回來;
(9)bmc模塊在cmm模塊的詢問下,將所收到的熱拔出響應(yīng)信號(hào)反饋給cmm模塊;
(10)cmm模塊一旦獲得熱拔出響應(yīng)信號(hào)的反饋后或者詢問響應(yīng)超時(shí)下,cmm模塊就會(huì)發(fā)出一個(gè)“準(zhǔn)備好”的信號(hào)給cpld模塊;
(11)cpld模塊在收到“準(zhǔn)備好”的信號(hào)后,將去觸發(fā)一個(gè)標(biāo)準(zhǔn)熱插拔事件信號(hào)給所有的cpu節(jié)點(diǎn);
(12)cpu節(jié)點(diǎn)上的pci總線驅(qū)動(dòng)會(huì)釋放分配給待拔出交換板的所有資源,以準(zhǔn)備好交換板的拔出;
(13)拔出交換板。
如圖1、5所示,本實(shí)施例中基于pcie總線的dpdk設(shè)備熱插拔方法的熱插入包括以下步驟:
(1)將一片交換板插入到機(jī)箱中;
(2)交換節(jié)點(diǎn)上的cpld模塊發(fā)出一個(gè)標(biāo)準(zhǔn)熱插拔事件信號(hào)給所有的cpu節(jié)點(diǎn);
(3)cpu節(jié)點(diǎn)上的pci總線驅(qū)動(dòng)在收到這一標(biāo)準(zhǔn)熱插拔事件信號(hào)后進(jìn)行處理,并初始化所插入的交換板,同時(shí)調(diào)用通用設(shè)備驅(qū)動(dòng)的“初始化”功能;
(4)通用設(shè)備驅(qū)動(dòng)初始化所插入的交換板;
(5)dpdk應(yīng)用程序檢測(cè)到新的nic邏輯,之后調(diào)用intel端口熱插拔架構(gòu)的例行程序加載端口,以同該nic邏輯建立連接;
(6)dpdk應(yīng)用程序重新開始,鏈路重新獲得配發(fā)。
需要說明的是,(a)本實(shí)施例中intel端口熱插拔架構(gòu)目前只適用于pf(物理功能驅(qū)動(dòng)),不適用于vf(虛擬功能驅(qū)動(dòng));(b)被分離的端口是不能與其它端口共享一個(gè)隊(duì)列的,要確保它是獨(dú)占一個(gè)隊(duì)列的;(c)dpdk應(yīng)用程序需要維護(hù)一個(gè)表格,以映射位置信息到dpdk邏輯端口號(hào)。