本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其是涉及一種智能網(wǎng)卡側(cè)的異常處理方法和裝置。
背景技術(shù):
云化是目前電信設(shè)備的一個重要發(fā)展方向,而網(wǎng)絡(luò)和計算的虛擬化是云化的基礎(chǔ)之一,目前的服務(wù)器基本都是基于中央處理器(如x86)+網(wǎng)絡(luò)接口卡(networkinterfacecard,nic)平臺來實現(xiàn)網(wǎng)絡(luò)和計算的虛擬化。傳統(tǒng)的網(wǎng)絡(luò)接口卡,比如英特爾(intel)的網(wǎng)卡芯片i350/82599,不支持網(wǎng)絡(luò)流量的協(xié)議處理,對網(wǎng)絡(luò)虛擬化提供的支持有一定的限制,在網(wǎng)絡(luò)流量比較大時,會耗費中央處理器大量資源進行處理。鑒于這種情況,基于虛擬化技術(shù),提出了智能網(wǎng)卡(intelligentnetworkinterfacecard,inic)的概念,使網(wǎng)絡(luò)接口卡擁有自己獨立的處理器,能夠支持網(wǎng)絡(luò)流量的協(xié)議處理,減小了中央處理器的負荷。搭載智能網(wǎng)卡的中央處理器一側(cè),相當(dāng)于主設(shè)備(host),與中央處理器建立通信連接的智能網(wǎng)卡,相當(dāng)于從設(shè)備,中央處理器與智能網(wǎng)卡通常通過新一代pci總線(pciexpress,pcie)接口建立通信連接,目前的智能網(wǎng)卡一般為pcie網(wǎng)卡。
由于智能網(wǎng)卡擁有獨立的處理器,因此能夠加載自己的操作系統(tǒng),運行相應(yīng)的網(wǎng)絡(luò)協(xié)議處理軟件與host進行通信。然而智能網(wǎng)卡上的應(yīng)用有時會發(fā)生異常,當(dāng)智能網(wǎng)卡側(cè)發(fā)生異常時,host側(cè)可能會表現(xiàn)為與智能網(wǎng)卡通信異常,但具體智能網(wǎng)卡上發(fā)生了什么異常,則無從得知。由于不知道智能網(wǎng)卡側(cè)的異常信息,導(dǎo)致異常問題不能得到快速解決。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提供一種智能網(wǎng)卡側(cè)異常的處理方法和裝置,旨在實現(xiàn)對智能網(wǎng)卡側(cè)的異常信息進行記錄,以利于快速解決異常問題。
為達以上目的,本發(fā)明提出一種智能網(wǎng)卡側(cè)異常的處理方法,包括步驟:
中央處理器申請一段內(nèi)存空間,并將所述內(nèi)存空間的信息傳遞給智能網(wǎng)卡;
所述智能網(wǎng)卡獲取所述內(nèi)存空間的信息,當(dāng)發(fā)生異常時,獲取異常信息,并將所述異常信息寫入所述內(nèi)存空間;
所述中央處理器獲取所述內(nèi)存空間中的異常信息。
進一步地,所述中央處理器與所述智能網(wǎng)卡通過pcie接口連接,所述將所述內(nèi)存空間的信息傳遞給智能網(wǎng)卡包括:所述中央處理器將所述內(nèi)存空間的信息寫入所述智能網(wǎng)卡對應(yīng)的pcie存儲空間;
所述智能網(wǎng)卡獲取所述內(nèi)存空間的信息包括:所述智能網(wǎng)卡從所述智能網(wǎng)卡對應(yīng)的pcie存儲空間中讀取所述內(nèi)存空間的信息。
進一步地,所述內(nèi)存空間的信息包括內(nèi)存基址和內(nèi)存長度,所述將所述異常信息寫入所述內(nèi)存空間包括:
所述智能網(wǎng)卡每次寫入異常信息時,為所述異常信息添加標(biāo)記,寫入的位置從所述內(nèi)存基址開始依次向后偏移,直到超過所述內(nèi)存長度時,再從所述內(nèi)存基址重新寫入,覆蓋之前寫入的內(nèi)容。
進一步地,所述為所述異常信息添加標(biāo)記包括:
為所述異常信息添加前綴或后綴,所述前綴或后綴的內(nèi)容為當(dāng)前的系統(tǒng)時間或者逐次累加的數(shù)字。
進一步地,所述內(nèi)存空間為連續(xù)的內(nèi)存空間,所述將所述異常信息寫入所述內(nèi)存空間包括:
所述智能網(wǎng)卡調(diào)用dma接口,通過所述dma接口將所述異常信息寫入所述內(nèi)存空間。
本發(fā)明同時提出一種智能網(wǎng)卡側(cè)異常的處理裝置,包括中央處理器和智能網(wǎng)卡,所述中央處理器包括異常信息獲取模塊,所述智能網(wǎng)卡包括異常信息記錄模塊,其中:
所述異常信息獲取模塊,用于申請一段內(nèi)存空間,并將所述內(nèi)存空間的信息傳遞給所述智能網(wǎng)卡;
所述異常信息記錄模塊,用于獲取所述內(nèi)存空間的信息,當(dāng)發(fā)生異常時,獲取異常信息,并將所述異常信息寫入所述內(nèi)存空間;
所述異常信息獲取模塊還用于:獲取所述內(nèi)存空間中的異常信息。
進一步地,所述中央處理器與所述智能網(wǎng)卡通過pcie接口連接,所述異 常信息獲取模塊包括傳遞單元,所述傳遞單元用于:將所述內(nèi)存空間的信息寫入所述智能網(wǎng)卡對應(yīng)的pcie存儲空間;
所述異常信息記錄模塊包括第一獲取單元,所述第一獲取單元用于:從所述智能網(wǎng)卡對應(yīng)的pcie存儲空間中讀取所述內(nèi)存空間的信息。
進一步地,所述內(nèi)存空間的信息包括內(nèi)存基址和內(nèi)存長度,所述異常信息記錄模塊包括寫入單元,所述寫入單元用于:
每次寫入異常信息時,為所述異常信息添加標(biāo)記,寫入的位置從所述內(nèi)存基址開始依次向后偏移,直到超過所述內(nèi)存長度時,再從所述內(nèi)存基址重新寫入,覆蓋之前寫入的內(nèi)容。
進一步地,所述寫入單元用于:為所述異常信息添加前綴或后綴,所述前綴或后綴的內(nèi)容為當(dāng)前的系統(tǒng)時間或者逐次累加的數(shù)字。
進一步地,所述內(nèi)存空間為連續(xù)的內(nèi)存空間,所述寫入單元用于:調(diào)用dma接口,通過所述dma接口將所述異常信息寫入所述內(nèi)存空間。
本發(fā)明所提供的一種智能網(wǎng)卡側(cè)異常的處理方法,通過host(中央處理器)側(cè)為智能網(wǎng)卡側(cè)分配一段內(nèi)存空間,當(dāng)智能網(wǎng)卡側(cè)發(fā)生異常時,智能網(wǎng)卡則將異常信息寫入內(nèi)存空間中,實現(xiàn)了智能網(wǎng)卡側(cè)異常信息的記錄,host側(cè)可以從內(nèi)存空間中獲取異常信息,實現(xiàn)了異常信息從智能網(wǎng)卡向host的傳遞。本發(fā)明的方法,相當(dāng)于智能網(wǎng)卡將異常信息直接寫入host的內(nèi)存中,并在host上存儲智能網(wǎng)卡側(cè)的異常日志。通過對智能網(wǎng)卡側(cè)異常信息的記錄,使得技術(shù)人員可以參考異常信息來排除故障,提高了異常問題的解決速度。本發(fā)明的方法具有通用性,可以適用于現(xiàn)有的各種服務(wù)器或云化系統(tǒng)。
附圖說明
圖1是本發(fā)明智能網(wǎng)卡側(cè)異常的處理方法一實施例的流程圖;
圖2是本發(fā)明智能網(wǎng)卡側(cè)異常的處理裝置一實施例的模塊示意圖;
圖3是圖2中智能網(wǎng)卡側(cè)異常的處理裝置的異常獲取模塊的模塊示意圖;
圖4是圖2中智能網(wǎng)卡側(cè)異常的處理裝置的異常記錄模塊的模塊示意圖;
圖5是應(yīng)用本發(fā)明實施例智能網(wǎng)卡側(cè)異常的處理方法的服務(wù)器的結(jié)構(gòu)示意圖;
圖6是圖5中服務(wù)器host側(cè)的exclog模塊進行異常信息獲取操作的示意圖;
圖7是圖5中服務(wù)器inic側(cè)的inicexclog模塊進行異常信息記錄的操作示意圖;
圖8是圖5中服務(wù)器inic側(cè)通過系統(tǒng)調(diào)用進行異常信息記錄的流程示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
參見圖1,提出本發(fā)明智能網(wǎng)卡側(cè)異常的處理方法一實施例,所述方法應(yīng)用于服務(wù)器,包括以下步驟:
s11、中央處理器申請一段內(nèi)存空間,并將內(nèi)存空間的信息傳遞給智能網(wǎng)卡。
本發(fā)明實施例中,中央處理器(相當(dāng)于host)與智能網(wǎng)卡通過通信接口建立通信連接,二者分別搭載獨立的操作系統(tǒng),如linux系統(tǒng)。中央處理器和智能網(wǎng)卡上運行虛擬化相關(guān)的應(yīng)用,共同完成網(wǎng)絡(luò)協(xié)議的處理,且中央處理器和智能網(wǎng)卡上的應(yīng)用彼此通過通信接口進行通信。
在某些實施例中,也可以將具有中央處理器(如x86處理器)的服務(wù)器作為host,智能網(wǎng)卡作為ep(pcie設(shè)備的一種工作模式,可以簡單理解為從設(shè)備)通過通信接口(如pcie接口)與服務(wù)器建立通信連接,智能網(wǎng)卡和host分別運行獨立的操作系統(tǒng)。
中央處理器申請一段內(nèi)存空間,該內(nèi)存空間優(yōu)選為一段連續(xù)的內(nèi)存空間,然后將該內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息通過通信接口傳遞給智能網(wǎng)卡,以將該內(nèi)存空間分配給智能網(wǎng)卡記錄異常信息。內(nèi)存空間的連續(xù)性,以linux系統(tǒng)為例,可以借助linux保留內(nèi)存或者巨頁的方式實現(xiàn),或者也可以采用現(xiàn)有的其它方式實現(xiàn),在此不贅述。
可選地,所述通信接口為pcie接口,即中央處理器與智能網(wǎng)卡通過pcie接口連接,則中央處理器通過pcie將內(nèi)存空間的信息傳遞給智能網(wǎng)卡。具體的,中央處理器將該內(nèi)存空間的信息寫入智能網(wǎng)卡對應(yīng)的pcie存儲空間(pciememory),以便于智能網(wǎng)卡直接從其對應(yīng)的pcie存儲空間獲取該內(nèi)存空間的 信息。
s12、智能網(wǎng)卡獲取內(nèi)存空間的信息。判斷是否發(fā)生異常,當(dāng)發(fā)生異常時,執(zhí)行下一步驟s13。
智能網(wǎng)卡通過通信接口獲取中央處理器傳遞的內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息,從而可以根據(jù)該信息訪問該內(nèi)存空間。
可選地,當(dāng)通信接口為pcie接口,即中央處理器與智能網(wǎng)卡通過pcie接口連接時,智能網(wǎng)卡直接從其對應(yīng)的pcie存儲空間中讀取中央處理器分配的內(nèi)存空間的信息。
s13、智能網(wǎng)卡獲取異常信息,并將異常信息寫入內(nèi)存空間。
當(dāng)智能網(wǎng)卡側(cè)的某個應(yīng)用發(fā)生異常時,智能網(wǎng)卡首先從用戶態(tài)獲取異常信息,然后將異常信息寫入中央處理器分配的內(nèi)存空間。
由于中央處理器分配的內(nèi)存空間的長度是固定的,為了防止異常信息的覆蓋,以及防止寫入的異常信息長度超過分配的內(nèi)存長度而導(dǎo)致信息溢出,本發(fā)明實施例優(yōu)選采用以下方式來寫入信息:智能網(wǎng)卡每次寫入異常信息時,均為異常信息添加標(biāo)記,同時寫入的位置從內(nèi)存基址開始依次向后偏移,直到超過內(nèi)存長度時,再從內(nèi)存基址重新寫入,覆蓋之前寫入的內(nèi)容,以保證內(nèi)存空間中記錄的異常信息是最新的。
為異常信息添加的標(biāo)記可以為前綴或后綴,該前綴或后綴的內(nèi)容可以為當(dāng)前的系統(tǒng)時間,或者為逐次累加的數(shù)字。逐次累加數(shù)字時,初始數(shù)字優(yōu)選為1或0,當(dāng)然也可以是任意數(shù)字,后續(xù)每次寫入時只要在前一次的數(shù)字上加1即可。
可選地,當(dāng)內(nèi)存空間為連續(xù)的內(nèi)存空間時,智能網(wǎng)卡則調(diào)用直接存儲器存取(directmemoryaccess,dma)接口,通過dma接口將異常信息寫入內(nèi)存空間,以實現(xiàn)快速寫入。dma是指存儲器和外設(shè)接口之間進行直接數(shù)據(jù)交換而不需要通過處理器暫存的存取方式。
s14、中央處理器獲取內(nèi)存空間中的異常信息。
中央處理器讀取分配給智能網(wǎng)卡的內(nèi)存空間中的內(nèi)容,獲取其中的異常信息,然后可以將該異常信息輸入特定的文件,也可以直接在屏幕上顯示。
本發(fā)明實施例智能網(wǎng)卡側(cè)異常的處理方法,通過host(中央處理器)側(cè)為智能網(wǎng)卡側(cè)分配一段內(nèi)存空間,當(dāng)智能網(wǎng)卡側(cè)發(fā)生異常時,智能網(wǎng)卡則將異常信息寫入內(nèi)存空間中,實現(xiàn)了智能網(wǎng)卡側(cè)異常信息的記錄,host側(cè)可以 從內(nèi)存空間中獲取異常信息,實現(xiàn)了異常信息從智能網(wǎng)卡向host的傳遞。本發(fā)明的方法,相當(dāng)于智能網(wǎng)卡將異常信息直接寫入host的內(nèi)存中,并在host上存儲智能網(wǎng)卡側(cè)的異常日志。通過對智能網(wǎng)卡側(cè)異常信息的記錄,使得技術(shù)人員可以參考異常信息來排除故障,提高了異常問題的解決速度。本發(fā)明的方法具有通用性,可以適用于現(xiàn)有的各種服務(wù)器或云化系統(tǒng)。
參見圖2,提出本發(fā)明智能網(wǎng)卡側(cè)異常的處理裝置一實施例,所述裝置應(yīng)用于服務(wù)器,包括中央處理器100和智能網(wǎng)卡200,中央處理器100(相當(dāng)于host)與智能網(wǎng)卡200通過通信接口(如pcie接口)建立通信連接,二者分別搭載獨立的操作系統(tǒng),如linux系統(tǒng)。中央處理器100和智能網(wǎng)卡200上運行虛擬化相關(guān)的應(yīng)用,共同完成網(wǎng)絡(luò)協(xié)議的處理,且中央處理器100和智能網(wǎng)卡200上的應(yīng)用彼此通過通信接口進行通信。中央處理器100包括一異常信息獲取模塊110,智能網(wǎng)卡200包括一異常信息記錄模塊210,其中:
異常信息獲取模塊110:用于申請一段內(nèi)存空間,并將該內(nèi)存空間的信息傳遞給智能網(wǎng)卡200,以將該內(nèi)存空間分配給智能網(wǎng)卡200進行異常信息的記錄;獲取內(nèi)存空間中的異常信息。
異常信息記錄模塊210:用于獲取中央處理器100分配的內(nèi)存空間的信息,以根據(jù)該信息訪問該內(nèi)存空間,當(dāng)發(fā)生異常時,獲取異常信息,并將異常信息寫入該內(nèi)存空間。
如圖3所示,異常信息獲取模塊110包括申請單元111、傳遞單元112和第二獲取單元113,其中:
申請單元111:用于申請一段內(nèi)存空間,獲取該內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息。該內(nèi)存空間優(yōu)選為一段連續(xù)的內(nèi)存空間,內(nèi)存空間的連續(xù)性,以linux系統(tǒng)為例,可以借助linux保留內(nèi)存或者巨頁的方式實現(xiàn),或者也可以采用現(xiàn)有的其它方式實現(xiàn),在此不贅述。
傳遞單元112:用于將申請單元111申請獲取的內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息通過通信接口傳遞給智能網(wǎng)卡200,以將該內(nèi)存空間分配給智能網(wǎng)卡200記錄異常信息。
當(dāng)中央處理器100與智能網(wǎng)卡200通過pcie接口連接時,傳遞單元112通過pcie將內(nèi)存空間的信息傳遞給智能網(wǎng)卡200。具體的,傳遞單元112將內(nèi)存空間的信息寫入智能網(wǎng)卡200對應(yīng)的pcie存儲空間,以便于智能網(wǎng)卡200直接從其對應(yīng)的pcie存儲空間獲取該內(nèi)存空間的信息。
第二獲取單元113:讀取分配給智能網(wǎng)卡200的內(nèi)存空間中的內(nèi)容,獲取其中的異常信息,然后可以將該異常信息輸入特定的文件,也可以直接在屏幕上顯示。
如圖4所示,異常信息記錄模塊210包括第一獲取單元211和寫入單元212,其中:
第一獲取單元211:用于通過通信接口獲取中央處理器100分配的內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息,以使寫入單元212可以根據(jù)該信息訪問該內(nèi)存空間。
當(dāng)通信接口為pcie接口,即中央處理器100與智能網(wǎng)卡200通過pcie接口連接時,第一獲取單元211直接從其對應(yīng)的pcie存儲空間中讀取中央處理器100分配的內(nèi)存空間的信息。
寫入單元212:用于當(dāng)智能網(wǎng)卡200側(cè)的某個應(yīng)用發(fā)生異常時,從用戶態(tài)獲取異常信息,然后將異常信息寫入中央處理器100分配的內(nèi)存空間。
由于中央處理器100分配的內(nèi)存空間的長度是固定的,為了防止異常信息被覆蓋,以及防止寫入的異常信息長度超過分配的內(nèi)存長度而導(dǎo)致信息溢出,本發(fā)明實施例優(yōu)選采用以下方式來寫入信息:寫入單元212每次寫入異常信息時,均為異常信息添加標(biāo)記,同時寫入的位置從內(nèi)存基址開始依次向后偏移,直到超過內(nèi)存長度時,再從內(nèi)存基址重新寫入,覆蓋之前寫入的內(nèi)容,以保證內(nèi)存空間中記錄的異常信息是最新的。
為異常信息添加的標(biāo)記可以為前綴或后綴,該前綴或后綴的內(nèi)容可以為當(dāng)前的系統(tǒng)時間,或者為逐次累加的數(shù)字。逐次累加數(shù)字時,初始數(shù)字優(yōu)選為1或0,當(dāng)然也可以是任意數(shù)字,后續(xù)每次寫入時只要在前一次的數(shù)字上加1即可。
可選地,當(dāng)內(nèi)存空間為連續(xù)的內(nèi)存空間時,寫入單元212則調(diào)用直接存儲器存取(directmemoryaccess,dma)接口,通過dma接口將異常信息寫入內(nèi)存空間,以實現(xiàn)快速寫入。dma是指存儲器和外設(shè)接口之間進行直接數(shù)據(jù)交換而不需要通過處理器暫存的存取方式。
本發(fā)明實施例智能網(wǎng)卡側(cè)異常的處理裝置,通過host(中央處理器)側(cè)的異常信息獲取模塊為智能網(wǎng)卡側(cè)分配一段內(nèi)存空間,當(dāng)智能網(wǎng)卡側(cè)發(fā)生異常時,智能網(wǎng)卡側(cè)的異常信息記錄模塊則將異常信息寫入內(nèi)存空間中,實現(xiàn)了智能網(wǎng)卡側(cè)異常信息的記錄,host側(cè)可以從內(nèi)存空間中獲取異常信息,實 現(xiàn)了異常信息從智能網(wǎng)卡向host的傳遞。本發(fā)明的方法,相當(dāng)于智能網(wǎng)卡將異常信息直接寫入host的內(nèi)存中,并在host上存儲智能網(wǎng)卡側(cè)的異常日志。通過對智能網(wǎng)卡側(cè)異常信息的記錄,使得技術(shù)人員可以參考異常信息來排除故障,提高了異常問題的解決速度。本發(fā)明的裝置具有通用性,可以適用于現(xiàn)有的各種服務(wù)器或云化系統(tǒng)。
以下參見圖5-圖8,通過一實例對本發(fā)明的技術(shù)方案進行詳細說明:
如圖5所示,為應(yīng)用本發(fā)明實施例智能網(wǎng)卡側(cè)異常的處理方法的服務(wù)器的結(jié)構(gòu)示意圖。其中,服務(wù)器包括主設(shè)備(以下簡稱host)和智能網(wǎng)卡(以下簡稱inic),host為中央處理器(如x86處理器),inic支持pcie接口,將服務(wù)器的pcie接口擴展為標(biāo)準(zhǔn)網(wǎng)口,通過pcie插槽與host連接。host和inic運行獨立的操作系統(tǒng),例如,host加載linux系統(tǒng),inic加載linux系統(tǒng)。host和inic上運行虛擬化相關(guān)的應(yīng)用,共同完成網(wǎng)絡(luò)協(xié)議的處理,host和inic上的應(yīng)用彼此通過pcie進行通信,如圖1所示,虛擬應(yīng)用(virtualapp)跨越host與inic。exclog和inicexclog兩個模塊(或稱進程)分別在host和inic上運行,其中,exclog相當(dāng)于異常信息獲取模塊,inicexclog相當(dāng)于異常信息記錄模塊。
如圖6所示,為服務(wù)器host側(cè)的exclog模塊進行異常信息獲取操作的示意圖。其中,host側(cè)的exclog模塊主要完成兩個工作:一是通過函數(shù)excmeminit初始化內(nèi)存空間,并通過函數(shù)excmemtran將內(nèi)存空間的信息傳遞給inic,實現(xiàn)內(nèi)存空間的分配;二是通過函數(shù)exclogshow讀取內(nèi)存空間中的異常信息。其中,excmeminit相當(dāng)于申請單元,excmemtran相當(dāng)于傳遞單元,exclogshow相當(dāng)于第二獲取單元。
exclog模塊初始化時調(diào)用函數(shù)excmeminit,申請一段連續(xù)的內(nèi)存空間。內(nèi)存空間的連續(xù)可以借助linux保留內(nèi)存或者巨頁的方式實現(xiàn)。在申請內(nèi)存空間前,excmeminit首先判斷標(biāo)志位meminitflag是否為1;如果為1,標(biāo)志內(nèi)存空間已分配,直接退出;如果為0,標(biāo)志內(nèi)存空間還未分配,則申請一段連續(xù)的內(nèi)存空間,進行內(nèi)存空間的分配。標(biāo)志位meminitflag的初始值為0,函數(shù)excmeminit在第一次內(nèi)存分配成功后置為1。
內(nèi)存空間確定后,exclog模塊再調(diào)用函數(shù)excmemtran,將內(nèi)存空間的內(nèi)存基址、內(nèi)存長度等信息寫入inic對應(yīng)的pcie存儲空間(pciememory),便于inic獲取host分配的內(nèi)存空間的信息。在寫入內(nèi)存空間的信息前, excmemtran首先判斷標(biāo)志位meminitflag是否為0;如果為0,標(biāo)志內(nèi)存空間還未分配,直接退出;如果為1,標(biāo)志內(nèi)存空間已分配,則寫入內(nèi)存空間的信息。
最后,exclog模塊調(diào)用函數(shù)exclogshow讀取分配給inic的內(nèi)存空間中的內(nèi)容,獲取異常信息,然后可以將異常信息輸入特定的文件,也可以直接顯示在屏幕上。在讀取內(nèi)存空間中的異常信息前,exclogshow首先判斷標(biāo)志位meminitflag是否為0;如果為0,標(biāo)志內(nèi)存空間還未分配,直接退出;如果為1,標(biāo)志內(nèi)存空間已分配,則讀取內(nèi)存空間中的異常信息。
如圖7所示,為服務(wù)器inic側(cè)的inicexclog模塊進行異常信息記錄操作的示意圖。在inic側(cè),為了便于多個應(yīng)用通過系統(tǒng)調(diào)用進行異常信息記錄,可以將異常信息記錄相關(guān)的主體功能做成ko的模式,直接加載到內(nèi)核。其中,inicexclog模塊初始化時(即圖中的module_init),在inic文件系統(tǒng)下生成字符設(shè)備文件/dev/exc_log,之后各個應(yīng)用可以通過該字符設(shè)備文件進行系統(tǒng)調(diào)用,調(diào)用inicexclog模塊內(nèi)核態(tài)的功能函數(shù),具體調(diào)用過程將在后面圖8中進行詳細說明。inicexclog模塊關(guān)閉異常信息記錄功能時(即圖中的module_exit),則刪除字符設(shè)備文件/dev/exc_log。
inicexclog模塊為用戶態(tài)提供的系統(tǒng)調(diào)用功能有兩個,一個是通過函數(shù)meminit獲取host分配的內(nèi)存空間的信息,另一個是通過函數(shù)logwrite向內(nèi)存空間寫入異常信息。其中,meminit相當(dāng)于第一獲取單元,logwrite相當(dāng)于寫入單元。
inicexclog模塊調(diào)用函數(shù)meminit從inic對應(yīng)的pcie存儲空間中讀取host分配的內(nèi)存空間的內(nèi)存基址內(nèi)存長度等信息。meminit在讀取內(nèi)存空間的信息前,首先判斷標(biāo)志位excmemready是否為1;如果為1,標(biāo)志內(nèi)存空間的信息已經(jīng)獲取,則不再往下執(zhí)行,并將標(biāo)志位的值返回給用戶態(tài);如果為0,則繼續(xù)往下執(zhí)行,當(dāng)讀取到的內(nèi)存長度值為0時,說明host沒有執(zhí)行分配內(nèi)存的操作,為標(biāo)志位excmemready賦值0,反之,當(dāng)讀取到內(nèi)存長度值不不為0時,為標(biāo)志位excmemready賦值1,并將標(biāo)志位的值返回給用戶態(tài)。
inicexclog模塊調(diào)用函數(shù)logwrite向內(nèi)存空間寫入異常信息。logwrite在寫入異常信息前,首先判斷標(biāo)志位excmemready是否為0;如果為0,標(biāo)志內(nèi)存空間的信息尚未獲取,則直接退出;如果為1,則繼續(xù)往下執(zhí)行,先從用戶態(tài)獲取要異常信息,再調(diào)用dma接口進行dma操作,將異常信息寫入 host分配的內(nèi)存空間中。
logwrite寫入異常信息時要判斷內(nèi)存空間的占用情況,因為host分配的內(nèi)存空間的內(nèi)存長度是固定的,logwrite不僅要防止異常信息的覆蓋,還要防止寫入的信息長度超過分配的內(nèi)存長度。logwrite可以采用以下策略進行信息寫入:每次寫入異常信息時,都給異常信息加一個前綴,前綴的內(nèi)容可以是當(dāng)前系統(tǒng)時間,或者從數(shù)字1開始編號,逐次累加;寫入的位置從獲取的內(nèi)存基址依次向后偏移,直到超過分配的內(nèi)存長度時,再從基址重新寫入,覆蓋之前寫入的內(nèi)容,以保證內(nèi)存空間中記錄的異常信息是最新的。
如圖8所示,為服務(wù)器inic側(cè)通過系統(tǒng)調(diào)用進行異常信息記錄的流程示意圖。當(dāng)inic側(cè)的某個應(yīng)用發(fā)生異常時,確定要寫入的異常信息,打開字符設(shè)備文件/dev/exc_log,通過系統(tǒng)調(diào)用調(diào)用內(nèi)核態(tài)函數(shù)meminit,初始化要寫入異常信息的內(nèi)存空間,保存系統(tǒng)調(diào)用返回的標(biāo)志位。如果標(biāo)志位為0,表示內(nèi)存空間沒有成功分配,異常信息無法記錄,則關(guān)閉字符設(shè)備文件/dev/exc_log,結(jié)束流程;如果標(biāo)志位為1,則繼續(xù)通過系統(tǒng)調(diào)用執(zhí)行內(nèi)核態(tài)函數(shù)logwrite,將需要寫入的異常信息作為系統(tǒng)調(diào)用的參數(shù)傳遞給內(nèi)核態(tài)函數(shù)logwrite,由logwrite向內(nèi)存空間寫入異常信息,最后關(guān)閉字符設(shè)備文件/dev/exc_log,結(jié)束流程。
本發(fā)明實施例中,host與inic上的流程既是相互聯(lián)系又是相互獨立的。首先,它們是相互聯(lián)系的,只有host上的進程exclog在host側(cè)申請到連續(xù)的內(nèi)存空間,并且將內(nèi)存空間的信息寫入inic對應(yīng)的pcie存儲空間中,inic側(cè)的異常信息記錄模塊inicexclog才能獲取到host分配的內(nèi)存空間,并將異常信息寫入該內(nèi)存空間。同時,它們又是相互獨立的,如果host側(cè)沒有運行exclog,inic側(cè)的inicexclog在運行時雖然無法獲取記錄異常信息所需要的內(nèi)存空間,不會執(zhí)行異常信息的寫入,但是不會影響inic側(cè)其它的正常功能;反過來,host側(cè)運行exclog后,如果inic側(cè)沒有啟動inicexclog,雖然exclog不能從申請的內(nèi)存空間中獲取到任何異常信息,但是host側(cè)的其它功能仍然正常運行。
本發(fā)明實施例的智能網(wǎng)卡側(cè)異常的處理方法是一種將智能網(wǎng)卡(inic)側(cè)異常信息傳遞給host的通用方法,不區(qū)分inic使用的處理器類型,因為其中使用到的關(guān)鍵技術(shù)如pcie通信、dma讀寫等都是通用功能。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述 實施例方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
應(yīng)當(dāng)理解的是,以上僅為本發(fā)明的優(yōu)選實施例,不能因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。