本發(fā)明一般地涉及快速外圍組件互連(PCie)交換機(jī),其中央處理單元(CPU)連接在PCIe交換機(jī)的非透明網(wǎng)橋(NTB)之后,尤其涉及一種用于從次要PCIe域訪問主要PCIe域中的設(shè)備的方法與裝置。
背景技術(shù):
傳統(tǒng)的單CPU和端點(diǎn)設(shè)備
圖1示出了PCIe交換機(jī)域中傳統(tǒng)的單CPU網(wǎng)絡(luò)100。最上層的PCIe設(shè)備為CPU網(wǎng)絡(luò)100的PCIe控制器102,可以直接存儲(chǔ)訪問CPU存儲(chǔ)器104。這種傳統(tǒng)布局的最上層設(shè)備(PCIe控制器)稱為“根聯(lián)合體”(樹的根級(jí))。從“根級(jí)”向下還示出了PCIe交換機(jī)106,并且終端處為PCIe設(shè)備端點(diǎn)108。CPU網(wǎng)絡(luò)100采用通信目的的共享并行總線架構(gòu)103,其中,所有設(shè)備共享地址、數(shù)據(jù)和控制線的通用集合。
CPU主機(jī)110通常執(zhí)行通過“枚舉”來確定CPU網(wǎng)絡(luò)100的配置的操作系統(tǒng)。所述枚舉查找交換機(jī)106和端點(diǎn)108,并要求對CPU網(wǎng)絡(luò)100中所有資源的總所有權(quán)。1型和2型配置讀寫命令用于發(fā)現(xiàn)交換機(jī)106、設(shè)備端點(diǎn)108以及設(shè)備端點(diǎn)108和交換機(jī)106所擁有的內(nèi)存資源。將PCIe地址空間中的內(nèi)存地址分配給交換機(jī)106和設(shè)備端點(diǎn)108的所有資源。為所有交換機(jī)106配置基礎(chǔ)和限位交換機(jī)寄存器,以使CPU網(wǎng)絡(luò)100中的任何點(diǎn)均理解如何將周圍的內(nèi)存事務(wù)從設(shè)備端點(diǎn)到設(shè)備端點(diǎn)進(jìn)行路由。CPU主機(jī)110和設(shè)備端點(diǎn)108可以讀取并寫入CPU網(wǎng)絡(luò)100中任何地方的內(nèi)存資源。因此,CPU主機(jī)110可以配置設(shè)備端點(diǎn)108以便進(jìn)行使用,并且一旦將設(shè)備端點(diǎn)108設(shè)置用來執(zhí)行功能和從CPU存儲(chǔ)器104讀取以及向CPU存儲(chǔ)器104寫入,則設(shè)備端點(diǎn)108可以獨(dú)立行動(dòng)。
例如,設(shè)備端點(diǎn)108的一種類型為以太網(wǎng)控制器108a,可以對其進(jìn)行設(shè)置以訪問來自CPU存儲(chǔ)器104的發(fā)送和接收描述符,這些描述符指向CPU主機(jī)110管理的緩沖區(qū)。以太網(wǎng)控制器108a可以與一個(gè)或多個(gè)PCIe設(shè)備(例如,以太網(wǎng)設(shè)備)相關(guān)聯(lián)。每個(gè)以太網(wǎng)設(shè)備可以在其發(fā)送描述符環(huán)(TX環(huán))中獨(dú)立發(fā)送由發(fā)送描述符描述的緩沖區(qū)內(nèi)容,并且以太網(wǎng)控制器108a可以接收數(shù)據(jù)并經(jīng)由CPU存儲(chǔ)器104中的接收描述符環(huán)(RX環(huán))通過其DMA功能直接發(fā)送這些數(shù)據(jù)至接收緩沖區(qū)。根據(jù)以太網(wǎng)設(shè)備編程和PCIe標(biāo)準(zhǔn),以太網(wǎng)控制器108a可以經(jīng)由稱為MSI/MSI-x消息的PCIe內(nèi)存事務(wù)向CPU主機(jī)110發(fā)送中斷。這是在映射到PCIe的CPU內(nèi)存空間中擊中CPU主機(jī)110設(shè)備/中斷寄存器是一種內(nèi)存事務(wù)。
用于此目的的交換機(jī)被廣泛使用,并且成本相對較低。CPU網(wǎng)絡(luò)100被稱為實(shí)現(xiàn)單個(gè)PCIe域的透明PCIe網(wǎng)絡(luò)。然而,從另一個(gè)網(wǎng)絡(luò)域訪問該P(yáng)CIe域需要使用專門的設(shè)備驅(qū)動(dòng)程序或?qū)iT的硬件。
技術(shù)實(shí)現(xiàn)要素:
由前述可知,本領(lǐng)域技術(shù)人員可以理解,在不需要專門的設(shè)備驅(qū)動(dòng)程序或硬件的情況下,已經(jīng)出現(xiàn)了從一個(gè)PCIe域訪問另一PCIe域中的設(shè)備的技術(shù)需求。根據(jù)本公開,提供了一種通過利用商品型PCIe交換機(jī)在PCIe結(jié)構(gòu)中的CPU上使用未經(jīng)修改的PCIe設(shè)備驅(qū)動(dòng)程序來從次要PCIe域訪問主要快速外圍組件互連(PCIe)域中的設(shè)備的方法與裝置,從而大大降低或基本消除與傳統(tǒng)PCIe結(jié)構(gòu)實(shí)現(xiàn)方式相關(guān)聯(lián)的問題和缺點(diǎn)。
一種用于從次要PCIe域訪問主要PCIe域中的設(shè)備的方法,包括:確定使主要PCIe域中的設(shè)備的哪一個(gè)或多個(gè)虛擬功能對于所述次要PCIe域可用。在與所述一個(gè)或多個(gè)虛擬功能相關(guān)聯(lián)的主要PCIe域中安裝虛擬功能驅(qū)動(dòng)程序。將與所述一個(gè)或多個(gè)虛擬功能對應(yīng)的信息提供給所述次要PCIe域。根據(jù)所述信息,在所述次要PCIe域中安裝與所述一個(gè)或多個(gè)虛擬功能相關(guān)聯(lián)的虛擬功能驅(qū)動(dòng)程序。所述次要PCIe域中的虛擬功能驅(qū)動(dòng)程序具有與所述主要PCIe域中的虛擬功能驅(qū)動(dòng)程序相同的性質(zhì)。根據(jù)所述次要PCIe域中的虛擬功能驅(qū)動(dòng)程序訪問所述主要PCIe域中的設(shè)備。
本發(fā)明描述了相比于常規(guī)PCIe結(jié)構(gòu)實(shí)現(xiàn)方式的許多技術(shù)優(yōu)勢。例如,一個(gè)技術(shù)優(yōu)點(diǎn)在于,在不使用專門的設(shè)備驅(qū)動(dòng)程序和硬件的情況下,使次要PCIe域訪問主要PCIe域中的設(shè)備。另一個(gè)技術(shù)優(yōu)點(diǎn)在于,從主要PCIe域提供信息,以使次要PCIe域安裝設(shè)備驅(qū)動(dòng)程序,其中,所述設(shè)備驅(qū)動(dòng)程序具有與主要PCIe域中相應(yīng)設(shè)備驅(qū)動(dòng)程序相同的性質(zhì)。通過以下附圖、說明書和權(quán)利要求書,其它技術(shù)優(yōu)點(diǎn)對于本領(lǐng)域技術(shù)人員來說可以是顯而易見的且可以認(rèn)識(shí)到。
附圖說明
為了更全面的理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)結(jié)合附圖參考以下描述,相同的附圖標(biāo)記表示相同的部件,其中:
圖1示出了PCIe交換機(jī)域中傳統(tǒng)的單CPU系統(tǒng);
圖2示出了圖1所示的主要PCIe域通過非透明網(wǎng)橋(NTB)主要和次要端點(diǎn)與次要PCIe域互連;
圖3示出了主要PCIe域與次要PCIe域之間的轉(zhuǎn)換方案;以及
圖4示出了從次要域訪問主要域中設(shè)備的方法。
具體實(shí)施方式
以下進(jìn)行討論的圖1至圖4以及用于描述本專利文檔中本發(fā)明原理的各實(shí)施例僅示意性說明,而不應(yīng)解釋為對本發(fā)明范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)理解,本發(fā)明原理可以在任何類型的適當(dāng)設(shè)置的設(shè)備或系統(tǒng)中進(jìn)行實(shí)現(xiàn)。一幅圖中所示出并討論的特征可以是當(dāng)?shù)卦谝粋€(gè)或多個(gè)其它附圖中實(shí)現(xiàn)。
本發(fā)明描述了一種使正常寫入的PCIe設(shè)備驅(qū)動(dòng)程序在PCIe結(jié)構(gòu)的根聯(lián)合體上運(yùn)行的系統(tǒng),即使其不在這種根聯(lián)合體上并且實(shí)際上位于NTB之后,其中,所述NTB僅僅能夠向所述設(shè)備實(shí)際存在于其中的PCIe結(jié)構(gòu)進(jìn)行內(nèi)存轉(zhuǎn)換,也能夠猶如該系統(tǒng)在能夠訪問所述設(shè)備的CPU根聯(lián)合體上運(yùn)行一樣。所述系統(tǒng)通過對于操作系統(tǒng)可用的軟件允許訪問通常用于獨(dú)立虛擬機(jī)或CPU的對稱多處理(SMP)內(nèi)核的虛擬功能、物理功能或設(shè)備隊(duì)列。所述系統(tǒng)避免了對設(shè)備驅(qū)動(dòng)程序進(jìn)行復(fù)雜變化,并且避免了為此目的需要新型PCIe交換機(jī)硬件。
通過非透明網(wǎng)橋連接的CPU的PCIe網(wǎng)絡(luò)
圖2示出了CPU網(wǎng)絡(luò)200,其中,圖1所示的主要PCIe域220與次要PCIe域222通過稱為非透明網(wǎng)橋(NTB)主要端點(diǎn)207的新型端點(diǎn)耦合在一起。主要PCIe域220中的NTB主要端點(diǎn)207緊鄰NTB次要端點(diǎn)208a,所述NTB次要端點(diǎn)208a是次要PCIe域222的設(shè)備端點(diǎn)208。次要PCIe域222包括與主要PCIe域220類似的結(jié)構(gòu),其中具有CPU主機(jī)210、CPU存儲(chǔ)器204、建立根聯(lián)合體的PCIe控制器202、PCIe交換機(jī)206以及PCIe設(shè)備端點(diǎn)208,比如,NTB次要端點(diǎn)208a,所有組件均通過高速內(nèi)部總線203相互連接。
起初構(gòu)想PCIe網(wǎng)絡(luò)只具有一個(gè)根聯(lián)合體,在本發(fā)明中也是這樣認(rèn)為的,因?yàn)橹饕?lián)合體和次要根聯(lián)合體是不同域(例如,主要PCIe域220和次要PCIe域222,如圖所示)的一部分?!胺峭该鳂蚪印痹试S多個(gè)根聯(lián)合體通過它們各自的獨(dú)立域在共同的PCIe網(wǎng)絡(luò)中運(yùn)行。NTB主要端點(diǎn)207和NTB次要端點(diǎn)208a是允許對許可內(nèi)存事務(wù)從NTB的一側(cè)穿到另一側(cè)的性質(zhì)進(jìn)行編程的PCIe設(shè)備。在本發(fā)明的上下文中,這類特征允許NTB主要端點(diǎn)207之后的次要PCIe域222中的次要根聯(lián)合體訪問主要PCIe域220中PCIe設(shè)備的設(shè)備寄存器或存儲(chǔ)。這些類型的網(wǎng)橋已由不同供應(yīng)商開發(fā)有一段時(shí)間,并且被廣泛使用而且價(jià)格低廉。
單PCIe域中的單根I/O虛擬化(SR-IOV)
針對傳統(tǒng)的單CPU網(wǎng)絡(luò)100和設(shè)備端點(diǎn),上述對以太網(wǎng)控制器108a進(jìn)行了描述。例如,可以將以太網(wǎng)控制器108a配置成從CPU存儲(chǔ)器104讀取,用以讀取TX環(huán)中的描述符和緩沖區(qū)并讀取來自以太網(wǎng)電纜的數(shù)據(jù),并將其寫入CPU的RX環(huán)中的接收緩沖區(qū)。
以太網(wǎng)SR-IOV控制器允許CPU主機(jī)110建立更多的RX和TX描述符、緩沖區(qū)以及環(huán)以便用于以下目的,例如,提供一個(gè)或多個(gè)虛擬機(jī)在CPU主機(jī)110上運(yùn)行,建立對稱多處理(SMP)系統(tǒng)中多CPU操作以使CPU內(nèi)核發(fā)送和接收數(shù)據(jù)并獲得性能優(yōu)勢,例如,但不限于,減少緩存一致性沖突并實(shí)現(xiàn)多個(gè)隊(duì)列以便對每一SMP內(nèi)核分配隊(duì)列。
SR-IOV抽象允許虛擬機(jī)或每個(gè)CPU執(zhí)行上下文(例如,但不限于“設(shè)備驅(qū)動(dòng)程序”)具有自己獨(dú)立的接收/發(fā)送環(huán)、描述符和緩沖區(qū)用以根據(jù)具體情況獲得性能優(yōu)勢或其它優(yōu)勢。
多根CPU系統(tǒng)使用的單根I/O虛擬化(SR-IOV)
隨著單根I/O虛擬化(SR-IOV)PCIe設(shè)備的出現(xiàn),出現(xiàn)了允許上述多根聯(lián)合體訪問來自不同域的單根I/O虛擬化設(shè)備的虛擬功能的應(yīng)用程序。
舉例說明,在單CPU的示例中,給定的SR-IOV設(shè)備(比如,以太網(wǎng)控制器108a)可以具有物理功能(PF)230和64個(gè)虛擬功能(VF)232,并且這些功能可以被一個(gè)CPU訪問。CPU主機(jī)110可以具有2個(gè)SMP內(nèi)核和2個(gè)VF或1個(gè)帶有2個(gè)隊(duì)列的VF,每個(gè)內(nèi)核1個(gè)隊(duì)列,從而獲得性能優(yōu)勢。類似地,可以給CPU上的10個(gè)虛擬機(jī)分配10個(gè)VF,使得每個(gè)虛擬機(jī)看上去似乎有其自己的VF以太網(wǎng)控制器。PF 230用于配置并管理設(shè)備端點(diǎn)108的功能,比如,實(shí)現(xiàn)虛擬化并顯示PCIe VF 232。VF 232與設(shè)備端點(diǎn)108上的PF 230相關(guān)聯(lián),并代表設(shè)備端點(diǎn)108的虛擬化實(shí)例。每個(gè)VF 232都有其自己的PCI配置空間并與PF 230和其它VF 232共享設(shè)備端點(diǎn)108上的一個(gè)或多個(gè)物理資源,例如,外部網(wǎng)絡(luò)端口。VF 232的性質(zhì)完全就像VF 232的驅(qū)動(dòng)程序?qū)σ蕴W(wǎng)控制器108a具有總控制。這是因?yàn)轵?qū)動(dòng)程序與存在于非SR-IOV設(shè)備中的相同接收和發(fā)送環(huán)合作。以太網(wǎng)控制器108a起到以太網(wǎng)交換機(jī)的作用,使得每個(gè)VF 232不知道也不需要知道其它的VF 232。
主要PCIe域220包括在管理操作系統(tǒng)中管理PF 230的PF驅(qū)動(dòng)程序116。通過PF驅(qū)動(dòng)程序116對VF 232以及用以支持VF 232的其它硬件和軟件資源進(jìn)行配置和設(shè)定。PF驅(qū)動(dòng)程序116采用傳統(tǒng)的驅(qū)動(dòng)程序功能用以訪問管理操作系統(tǒng)的網(wǎng)絡(luò)I/O資源。PF驅(qū)動(dòng)程序116也用作對設(shè)備端點(diǎn)108上分配給VF 232的資源進(jìn)行管理的方法。主要PCIe域220還包括安裝用以管理VF 232的VF驅(qū)動(dòng)程序118。由VF驅(qū)動(dòng)程序118執(zhí)行的任何操作均不影響同一設(shè)備端點(diǎn)108上的任何其它VF 232或PF 230。VF驅(qū)動(dòng)程序118的功能和任何PCIe設(shè)備驅(qū)動(dòng)程序一樣,比如,讀取并寫入VF 232配置空間。對VF 232的訪問由PF驅(qū)動(dòng)程序230來管理。
VF 232的配置寄存器是獨(dú)立的,使得獨(dú)立的虛擬機(jī)驅(qū)動(dòng)程序或不同CPU核心上下文中的驅(qū)動(dòng)程序可以像獨(dú)立設(shè)備一樣對其進(jìn)行訪問。因此,非透明網(wǎng)橋的另一側(cè)上的第二域中的CPU可以配置其自己的VF驅(qū)動(dòng)程序并且也利用主要域中的設(shè)備端點(diǎn)108。但是,第二域中需要專門的虛擬功能驅(qū)動(dòng)程序來提供合適的訪問。
在次要PCIe 222的一側(cè)寫入專門的虛擬功能驅(qū)動(dòng)程序是眾所周知的。例如,主要PCIe域220中的CPU主機(jī)110可以使用配置周期來查找以太網(wǎng)控制器108a并在設(shè)備配置層級(jí)中定義其位置、分配其總線、設(shè)備和功能編號(hào),然后為其程序基址寄存器(BAR)分配主要PCIe域220中PCIe存儲(chǔ)器位置。一經(jīng)定義,驅(qū)動(dòng)程序映射到BAR的訪問,并針對其在其域內(nèi)使用的虛擬功能編程接收/發(fā)送環(huán)信息和MSI/MSI-x中斷寄存器等。
為了使次要PCIe域222中的CPU訪問虛擬功能,主要域根聯(lián)合體和次要域根聯(lián)合體之間通常存在通信協(xié)議,以使次要PCIe域222找出主要PCIe域220上VF 232的內(nèi)存地址信息,并通過NTB次要端點(diǎn)208a和NTB主要端點(diǎn)207設(shè)置內(nèi)存轉(zhuǎn)換以對其進(jìn)行訪問。此時(shí),實(shí)際上,次要驅(qū)動(dòng)程序通過轉(zhuǎn)換到它們的內(nèi)存地址基本上可以對VF 232 BAR執(zhí)行相同的編程功能。在需要配置讀取或?qū)懭胫芷诘那闆r,通過通信機(jī)構(gòu)將這些周期傳遞給主要側(cè)根聯(lián)合體,并由專門的驅(qū)動(dòng)程序軟件代表次要側(cè)根聯(lián)合體來執(zhí)行。在需要對其它功能進(jìn)行編程的情況,比如MSI-x中斷,次要側(cè)根聯(lián)合體為NTB主要端點(diǎn)207中的轉(zhuǎn)換寄存器發(fā)送有關(guān)MSI-x“地址”和“數(shù)據(jù)”的信息以擊中次要PCIe域222中的CPU主機(jī)210。采用相同或相似的機(jī)制來實(shí)現(xiàn)其它這樣的要求,例如,確保分配給次要PCIe域222的來自主要PCIe域220中VF 232的DMA擊中CPU存儲(chǔ)器204。
上述在次要PCIe域222的一側(cè)寫入專門的虛擬功能驅(qū)動(dòng)程序在不需要多根I/O虛擬化(MR-IOV)規(guī)范的情況下進(jìn)行執(zhí)行。上述在次要PCIe域222的一側(cè)寫入專門的虛擬功能驅(qū)動(dòng)程序通過SR-IOV實(shí)現(xiàn)MR-IOV,并且這些專門的軟件機(jī)制在本文中稱為“共享SR-IOV”方法。然而,這些專門的軟件機(jī)制在維護(hù)方面非常昂貴。為了避免專門的驅(qū)動(dòng)程序,一種可選方法是在專門的硬件中處理這種能力。專門的PCIe交換機(jī)硬件已得到實(shí)施,以使次要域中的CPU執(zhí)行諸如配置周期的主要根功能并繞過對專門寫入的驅(qū)動(dòng)程序的需求。在該可選方法中,將維護(hù)開銷轉(zhuǎn)移到硬件方面。然而,這個(gè)可選方法沒有解決在使用標(biāo)準(zhǔn)的PCIe硬件實(shí)現(xiàn)方式時(shí)的問題。
運(yùn)行未經(jīng)改變的虛擬設(shè)備驅(qū)動(dòng)程序
本發(fā)明描述了一種用于在次要PCIe域222上運(yùn)行未經(jīng)改變的虛擬設(shè)備驅(qū)動(dòng)程序以及其它類型的未經(jīng)改變的驅(qū)動(dòng)程序的系統(tǒng),而不需要專門的虛擬功能驅(qū)動(dòng)程序或?qū)iT的硬件。本發(fā)明中描述的實(shí)現(xiàn)方式的一些優(yōu)點(diǎn)包括,避免對虛擬設(shè)備驅(qū)動(dòng)程序進(jìn)行專門的共享SR-IOV軟件的改變,這些改變對在次要PCIe域222中使用次要CPU網(wǎng)絡(luò)上的VF有必然影響,從而在維護(hù)方面非常昂貴。可以避免支持可能需要釋放給主要PCIe域220的專門改變,因?yàn)槠淇梢员徽J(rèn)為是對驅(qū)動(dòng)程序的修改。通過在次要PCIe域222上運(yùn)行未經(jīng)改變的虛擬設(shè)備驅(qū)動(dòng)程序以及其它類型的驅(qū)動(dòng)程序,不需要專門的硬件,因?yàn)楝F(xiàn)有廣泛普及的廉價(jià)非透明網(wǎng)橋硬件可以在不加修改的情況下被使用。具有多個(gè)物理功能的設(shè)備可以提供相同或相似益處,并且具有多個(gè)隊(duì)列的設(shè)備也可以跨域進(jìn)行使用,從而產(chǎn)生相同或相似益處。
本發(fā)明描述了一種包括在CPU主機(jī)110和210中執(zhí)行的應(yīng)用程序(在本文中稱為共享SR-IOV管理器)的系統(tǒng),其具有到操作系統(tǒng)的良好定義的接口,并且提供需要使次要CPU主機(jī)210和未經(jīng)改變的虛擬功能驅(qū)動(dòng)程序找到BAR和配置空間的機(jī)制,以對需要什么來使其將“想到”的VF得以存在進(jìn)行初始化并獲得與主要PCIe域220中的VF同樣高水平的性能,同時(shí)始終“相信”這種功能和設(shè)備在其自身域中存在。
作為說明性示例,在主要PCIe域220中的CPU主機(jī)110和次要PCIe域222中的CPU主機(jī)210上,主要PCIe域220中的共享SR-IOV管理器212和次要PCIe域222中的共享SR-IOV管理器214包括代碼主體,使主要PCIe域220和次要PCIe域222傳送以及交換信息并向操作系統(tǒng)提供良好定義的接口,用以檢索或修改位于不同域中的標(biāo)準(zhǔn)數(shù)據(jù)或功能。可以先在主要PCIe域220中的CPU主機(jī)110上執(zhí)行共享SR-IOV管理器212,并在次要PCIe域222中的CPU主機(jī)210枚舉其PCIe總線之前進(jìn)行初始化。通過NTB主要端點(diǎn)207和NTB次要端點(diǎn)208a或者通過可在不同域之間設(shè)計(jì)的任何其它機(jī)制,通信可以在PCIe總線上進(jìn)行。
在PCIe總線上進(jìn)行通信的情況下,主要PCIe域220的CPU主機(jī)110枚舉并確定例如在以太網(wǎng)控制器108a中的VF 232的內(nèi)存資源,可以視情況而定,包括帶有轉(zhuǎn)換和/或通信功能的NTB主要端點(diǎn)207。次要PCIe域222的CPU主機(jī)210也枚舉其PCIe結(jié)構(gòu),并定位其NTB次要端點(diǎn)208a。
主要PCIe域220的CPU主機(jī)110通過PF驅(qū)動(dòng)程序116采用可能需要的參數(shù)加載以太網(wǎng)控制器108a的PF 230,這些參數(shù)使得所需數(shù)量的VF 232(max_vfs=nnn)出現(xiàn)。對一個(gè)或多個(gè)目的和域?qū)⒖捎玫腣F 232的總線、設(shè)備、功能和內(nèi)存地址被加載在主要PCIe域220的共享SR-IOV管理器212中。通過通信機(jī)制,指導(dǎo)次要PCIe域222的共享SR-IOV管理器214獲得有關(guān)包括每個(gè)VF BAR的主要PCIe域220地址空間中VF 232的信息,以及其可能需要用于所描述的功能的任何其它信息,比如,根據(jù)PCIe標(biāo)準(zhǔn),其所位于的BAR以及MSI-x表偏移的PCIe內(nèi)存地址。主要PCIe域220可以判斷其會(huì)使多少個(gè)VF對于次要PCIe域222可用。
次要共享SR-IOV管理器214從主要共享SR-IOV管理器212收集對于從主要地址空間創(chuàng)建地址轉(zhuǎn)換以訪問在主要PCIe域220中的授權(quán)BAR內(nèi)存來說有必要的信息。如有需要,這可以是VF 232的BAR和MSI-x表的BAR。此外,主要PCIe域220的共享SR-IOV管理器212提供對于次要PCIe域222將可用的所有VF 232的配置空間的模擬副本。
圖3示出了次要PCIe域222和主要PCIe域220之間地址轉(zhuǎn)換的示例??梢愿淖冡槍F 232的BAR的次要PCIe域222內(nèi)的次要模擬配置空間,以包含通過NTB次要端點(diǎn)208a轉(zhuǎn)換到主要PCIe域220中VF 232的相應(yīng)BAR的PCIe地址。另外,為這些VF配置操作系統(tǒng)已知的PCIe層級(jí)、能力、區(qū)域等或具體的CPU功能。配置空間是照原樣使用還是改進(jìn)使用,以下將進(jìn)一步進(jìn)行詳細(xì)描述。
一旦次要共享SR-IOV管理器214接收到與主要PCIe域220中VF 232對應(yīng)的信息,則此時(shí)可以在次要PCIe域222中啟動(dòng)虛擬功能驅(qū)動(dòng)程序,即,VF驅(qū)動(dòng)程序218,并且其可以使用PCIe驅(qū)動(dòng)程序通常使用的特定操作系統(tǒng)功能來初始化主要PCIe域220中的VF 232。次要PCIe域222也安裝與主要PCIe域220中PF驅(qū)動(dòng)程序116運(yùn)行方式類似的PF驅(qū)動(dòng)程序216。以下為可以進(jìn)行使用的功能的示例性列表,并且其在次要PCIe域222中對VF 232的改進(jìn)用途將在以下進(jìn)一步進(jìn)行詳細(xì)描述。本領(lǐng)域技術(shù)人員將理解也可以使用其它功能。這些功能包括pci_request_regions及其請求區(qū)域或BAR地址的同級(jí)功能、dma_map_page和dma_map_single及其取消映射功能、用于MSI/MSI-x功能的request_irq以及pci_enable_device、pci_set_master和pci_enable_msix功能(以及AER、內(nèi)存、許多其它操作系統(tǒng)和配置空間級(jí)別功能)。
由于次要PCIe域222中的VF驅(qū)動(dòng)程序218啟動(dòng)或探尋其PCIe設(shè)備類型,VF驅(qū)動(dòng)程序218可以執(zhí)行通過標(biāo)準(zhǔn)操作系統(tǒng)功能發(fā)生的以下初始化,這些標(biāo)準(zhǔn)操作系統(tǒng)功能的操作在某些情況下被次要共享SR-IOV管理器214所使用的良好定義的接口改變。功能pci_request_regions用于特定VF 232待使用的BAR。取決于次要共享SR-IOV管理器214是否希望使該VF用在次要PCIe域222中,該功能可以成功或失敗。次要共享SR-IOV管理器214使用到pci_request_regions代碼的良好定義的接口,以使次要共享SR-IOV管理器214來調(diào)節(jié)這種使用。假設(shè)允許使用VF 232,則初始化可以繼續(xù)。VF驅(qū)動(dòng)程序218可以記錄VF 232的BAR地址,并且基于內(nèi)存的讀取和寫入到BAR寄存器可以轉(zhuǎn)換成到主要PCIe域220中的BAR。
諸如pci_enable_device和pci_set_master的功能以及其它功能可以實(shí)現(xiàn)能夠?qū)CIe寄存器執(zhí)行配置讀寫數(shù)據(jù)周期并為設(shè)備端點(diǎn)108執(zhí)行各種能力的代碼。本發(fā)明的操作是通過次要共享SR-IOV管理器214的良好定義的接口將該操作委派給主要PCIe域220。以下為可以實(shí)現(xiàn)這種方式的可能方法的示例列表。config_read和config_write命令可以被傳遞給主要PCIe域220并執(zhí)行,并且在次要PCIe域222中返回并模擬結(jié)果。實(shí)際的PCI功能本身可以通過次要共享SR-IOV管理器214與主要PCIe域220進(jìn)行交互,但是,采用所述傳遞給主要PCIe域220可以提供更透明的方法。在一些情況下,出于不同的所需目的,可以對傳遞給主要PCIe域220的操作進(jìn)行修改。例如,如有需要,在調(diào)用pci_enable_device或pci_set_master功能時(shí),次要共享SR-IOV管理器214可以通過這些功能調(diào)節(jié)訪問控制,也可以拒絕請求。可能需要對操作進(jìn)行修改以根據(jù)需要對操作進(jìn)行正確的模擬。
如有必要,VF驅(qū)動(dòng)程序218可以采用pci_enable_msi或pci_enable_msix或其它適當(dāng)功能啟用MSI或MSI-x。VF驅(qū)動(dòng)程序218也可以調(diào)用request_irq來為特定的MSI-x向量或?yàn)镸SI中斷設(shè)置本地CPU中斷處理程序。這些功能對以太網(wǎng)控制器108a采用專門創(chuàng)建的數(shù)據(jù)應(yīng)當(dāng)擊中的PCIe“總線”側(cè)(或DMA側(cè))地址已經(jīng)進(jìn)行了定義,所述專門創(chuàng)建的數(shù)據(jù)可以為所需的中斷擊中APIC或其它CPU架構(gòu)寄存器。次要共享SR-IOV管理器214可以通過其良好定義的接口類似地修改這個(gè)功能。應(yīng)對MSI/MSI-x消息的計(jì)算地址進(jìn)行正確計(jì)算以通過從主要PCIe域220到次要PCIe域222的網(wǎng)橋采用計(jì)算數(shù)據(jù)(其通常不需要修改)轉(zhuǎn)換CPU中斷寄存器。也可以使用其它方法,比如,上述涉及委派給主要PCIe域220的這些方法。
VF驅(qū)動(dòng)程序218此時(shí)可以設(shè)置RX和TX描述符環(huán)以及指向緩沖區(qū)的描述符。VF驅(qū)動(dòng)程序218編程入VF 232 BAR的地址是由dma_map_page和dma_map_single計(jì)算的“總線”側(cè)(或DMA側(cè))地址。這些功能的目的是向以太網(wǎng)控制器108a提供以太網(wǎng)控制器108a應(yīng)該讀取或?qū)懭氲摹翱偩€”側(cè)地址,因?yàn)?此處未描述的原因)“PCIe總線”側(cè)地址不總是1-1映射到物理地址。與這些功能接口連接的次要共享SR-IOV管理器214可以向內(nèi)存地址提供調(diào)整,使得以太網(wǎng)控制器108a可以通過主要PCIe域220的NTB主要端點(diǎn)207讀取并寫入次要PCIe域222中的RX/TX隊(duì)列和緩沖區(qū)。
VF驅(qū)動(dòng)程序218運(yùn)行并在其域內(nèi)為其認(rèn)為是VF 232的那些定位,并且可以以上述類似的方式根據(jù)其域內(nèi)的內(nèi)存資源配置并運(yùn)行以太網(wǎng)控制器108a。中斷處理程序的操作以及以太網(wǎng)控制器108a的拆卸和釋放根據(jù)上述相同的成熟原則運(yùn)行??梢允共僮飨到y(tǒng)功能或其最低層的config_read和寫入命令由次要共享SR-IOV管理器214在需要時(shí)對主要PCIe域220進(jìn)行直接操作。對BAR的內(nèi)存訪問和“PCIe總線”側(cè)或DMA地址的編程被透明地處理,并且已經(jīng)獲得了通過PCIe結(jié)構(gòu)的速度運(yùn)行效益。對BAR的次要側(cè)訪問被映射,并且次要PCIe域222向主要PCIe域220映射到CPU主機(jī)210存儲(chǔ)器204及其系統(tǒng)寄存器的PCIe“窗口”。
圖4示出了用于從次要PCIe域222訪問主要PCIe域220中設(shè)備的示例過程400。過程400開始于框402,其中,主要PCIe域220中的CPU主機(jī)110執(zhí)行枚舉進(jìn)程,以便發(fā)現(xiàn)存在什么設(shè)備,比如交換機(jī)106和設(shè)備端點(diǎn)108以及相關(guān)的內(nèi)存資源,并為發(fā)現(xiàn)的設(shè)備分配內(nèi)存地址。在塊404中,由CPU主機(jī)110執(zhí)行的共享SR-IOV管理器212識(shí)別用于主要PCIe域220中的VF 232的總線、設(shè)備、功能和基址寄存器。共享SR-IOV管理器212在塊406中確定使哪些VF 232對于次要PCIe域222(以及任何其它次要域)可用。在塊408中,次要PCIe域222中的CPU主機(jī)210執(zhí)行枚舉過程,以便發(fā)現(xiàn)存在什么設(shè)備,比如交換機(jī)206和設(shè)備端點(diǎn)208以及相關(guān)的內(nèi)存資源,并為發(fā)現(xiàn)的設(shè)備分配內(nèi)存地址。由CPU主機(jī)210執(zhí)行的次要PCIe域222的共享SR-IOV管理器214在塊410中與主要PCIe域220中的共享SR-IOV管理器212通信,以接收與所述對于次要PCIe域222可用的VF 232相對應(yīng)的合適信息。在框412中,根據(jù)共享SR-IOV管理器214接收到的信息,對與主要PCIe域220中授權(quán)VF 232對應(yīng)的VF驅(qū)動(dòng)程序218進(jìn)行實(shí)例化。在框414中,利用VF驅(qū)動(dòng)程序218,次要PCIe域222可以訪問以太網(wǎng)控制器108a的VF 232。VF驅(qū)動(dòng)程序218在次要PCIe域222中的運(yùn)行情況就像主要PCIe域220中的VF驅(qū)動(dòng)程序118訪問以太網(wǎng)控制器108a的VF 232。因此,不需要寫入專門的驅(qū)動(dòng)程序,并且不要求專門的硬件來允許次要域訪問主要域中的設(shè)備。
上述實(shí)現(xiàn)方式用以說明本發(fā)明所述系統(tǒng)的一個(gè)示例。通過共享SR-IOV管理器212和214,以這樣一種方式,即,用在主要域中的原有虛擬功能驅(qū)動(dòng)程序可以安裝并用在次要域中,任何物理功能、虛擬功能或基址寄存器或基址寄存器的一部分均可以被傳送,以便在任何次要PCIe域中被發(fā)現(xiàn)并使用。應(yīng)理解,可以想到根據(jù)相同或相似原理操作的其它實(shí)現(xiàn)方式(例如,透明地允許操作或系統(tǒng)或低級(jí)功能或高級(jí)功能來使虛擬功能驅(qū)動(dòng)程序不變地進(jìn)行運(yùn)行)。這種實(shí)現(xiàn)方式的示例包括:使次要共享SR-IOV管理器214在次要PCIe域222枚舉期間,對主要PCIe域220中一個(gè)或多個(gè)VF的配置空間進(jìn)行預(yù)配置,所述配置空間在枚舉過程中可以被查找到,然后可以將這種模擬配置用來使次要虛擬功能驅(qū)動(dòng)程序?qū)ζ溥M(jìn)行配置并利用。根據(jù)需要,可以靜態(tài)或動(dòng)態(tài)地創(chuàng)建預(yù)配置的配置,以便對從主要地址空間到次要地址空間轉(zhuǎn)換的合適BAR地址進(jìn)行設(shè)置。根據(jù)執(zhí)行者的需要,可以靜態(tài)或動(dòng)態(tài)地執(zhí)行MSI/MSIx的dma_map_single、dma_map_page和dma_map的處理。內(nèi)存訪問和/或配置空間可以對MSI-x表進(jìn)行訪問。次要CPU主機(jī)210可以在其在枚舉過程期間枚舉NTB次要端點(diǎn)208a之后使模擬設(shè)備和/或模擬配置空間顯示。如有需要,可以暫停枚舉來運(yùn)行通信機(jī)制,并且可以增加模擬設(shè)備和/或模擬配置空間??梢酝ㄟ^模擬方式經(jīng)由對于PCIe設(shè)備在使用中的公知“熱插拔”機(jī)制將模擬設(shè)備和/或模擬配置空間加入到次要PCIe域222中。
正如執(zhí)行者所期望的,為了操作簡單,可以使次要PCIe域222知道所有VF或只是一些特殊的VF??梢允勾我狿CIe域222對提供多個(gè)隊(duì)列的VF進(jìn)行訪問,以使SMP系統(tǒng)的CPU內(nèi)核自己可以訪問RX/TX環(huán)和緩沖區(qū),如出于同一目的在主要PCIe域220中完成一樣。
還可以容易地使同一系統(tǒng)對各種類型的驅(qū)動(dòng)程序進(jìn)行操作,其中所述系統(tǒng)修改操作系統(tǒng)較高和較低級(jí)別的PCI功能以使PCIe設(shè)備驅(qū)動(dòng)程序不經(jīng)改變地運(yùn)行。例如,多個(gè)物理功能驅(qū)動(dòng)程序允許多個(gè)物理功能獨(dú)立地訪問一個(gè)或多個(gè)設(shè)備。特別是,可以以同一方式在次要PCIe域222上配置用于公共以太網(wǎng)控制器的物理功能驅(qū)動(dòng)程序,即,通過向次要PCIe域222輸出人工配置空間和設(shè)備樹信息并允許相同類型的低級(jí)別和高級(jí)別操作系統(tǒng)功能對其進(jìn)行查找和配置。設(shè)備驅(qū)動(dòng)程序可以具有用于訪問一個(gè)或多個(gè)物理資源的多個(gè)隊(duì)列??梢砸灶愃频臋C(jī)制使包含多個(gè)隊(duì)列的設(shè)備對次要PCIe域222中的CPU主機(jī)210可用,其中每個(gè)所述隊(duì)列可以獨(dú)立控制通用設(shè)備,并且每個(gè)次要PCIe域222可以對分配給其自己使用的各隊(duì)列進(jìn)行配置。舉一個(gè)示例來說,可以使模擬PCIe設(shè)備和/或模擬配置空間可用,并且次要PCIe域222可以針對以太網(wǎng)控制器108a示例中描述的所有益處(SMP隊(duì)列、虛擬機(jī)或任何其它虛擬化目的)編程各隊(duì)列。
此外,本文中所描述的系統(tǒng)并不限于通過操作系統(tǒng)功能來操作,也可以在任何軟件系統(tǒng)中進(jìn)行操作以獲得避免對關(guān)鍵驅(qū)動(dòng)程序進(jìn)行改變的相同優(yōu)點(diǎn),其中所述關(guān)鍵驅(qū)動(dòng)程序可以通過允許對設(shè)備控制進(jìn)行單獨(dú)PCIe訪問的VF、基于隊(duì)列的VF或其它功能操作。應(yīng)理解,本發(fā)明中列出的功能名稱是眾所周知的LINUX操作系統(tǒng)功能,但本文所述系統(tǒng)的操作并不限于使用該操作系統(tǒng)或這些功能。可以將本文所述系統(tǒng)應(yīng)用到任何虛擬化目的的設(shè)備中,比如存儲(chǔ)控制器或具有SR-IOV型功能、多個(gè)物理功能、多個(gè)隊(duì)列或任何虛擬化功能的任何類型的控制器。
在一些實(shí)施例中,所述一個(gè)或多個(gè)設(shè)備的部分或所有功能或進(jìn)程由計(jì)算機(jī)程序來實(shí)現(xiàn)或支持,其中所述計(jì)算機(jī)程序形成于計(jì)算機(jī)可讀程序代碼并在計(jì)算機(jī)可讀介質(zhì)中得以體現(xiàn)。短語“代碼”包括任何類型的計(jì)算機(jī)代碼,包括源代碼、目標(biāo)代碼和可執(zhí)行代碼。短語“計(jì)算機(jī)可讀介質(zhì)”包括能夠由計(jì)算機(jī)訪問的任何類型的介質(zhì),比如:只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、硬盤驅(qū)動(dòng)器、壓縮盤(CD)、數(shù)字視頻盤(DVD)或者任何其它類型的存儲(chǔ)器。
對本專利文檔中使用的特定詞語和短語的定義進(jìn)行闡述可能是比較有利的。術(shù)語“包括”和“包含”及其衍生物是指沒有限制的包括。術(shù)語“或”是包含的意思,是指和/或。短語“與......有關(guān)聯(lián)”和“與其相關(guān)聯(lián)”及其衍生物指包括、包括在內(nèi)、與......互連、包含、包含在內(nèi)、連接到或與......連接、耦合到或與......耦合、與......通信連接、配合、交織、并列、接近于、密切相關(guān)或與......密切相關(guān)、具有、具有......的特性等等。
雖然本發(fā)明已經(jīng)對某些實(shí)施例以及通常相關(guān)聯(lián)的方法進(jìn)行了描述,這些實(shí)施例的變化和變換對于本領(lǐng)域技術(shù)人員而言是顯而易見的并且很容易辨別。因此,示例實(shí)施例的上述描述并不限定或限制本發(fā)明。例如,雖然采用單個(gè)次要PCIe域?qū)Ω鲗?shí)施例進(jìn)行表示,這些實(shí)施例適用于包括多個(gè)次要PCIe域的場景。在不脫離所附權(quán)利要求所限定的本發(fā)明范圍的情況下,也可以做出其它變化、替換和修改。