本發(fā)明涉及一種具有存儲和網(wǎng)絡(luò)加速功能的pcie交換芯片,屬于交換芯片。
背景技術(shù):
1、pcie是一種高速串行計(jì)算機(jī)擴(kuò)展總線,廣泛應(yīng)用于計(jì)算機(jī)主機(jī)連接外圍設(shè)備。主機(jī)端的pcie控制器叫做rc,設(shè)備端的pcie控制器叫做ep。每個ep設(shè)備都有一個標(biāo)準(zhǔn)的配置空間寄存器,表明了該設(shè)備的基本屬性和可配置的信息,其中的bar寄存器標(biāo)識了該設(shè)備的寄存器和內(nèi)存等地址空間資源,簡稱bar空間。pcie物理層建立鏈接并且經(jīng)過枚舉以后,rc將ep設(shè)備的配置空間和bar空間映射到主機(jī)的地址空間,然后主機(jī)的驅(qū)動程序便可以訪問和操作該設(shè)備。在pcie總線拓?fù)湎拢總€pcie設(shè)備都有唯一的bdf號。
2、pcie使用tlp傳輸配置請求和數(shù)據(jù)請求,tlp有以下4種類型:內(nèi)存請求tlp用來讀寫設(shè)備的寄存器或內(nèi)存,io?tlp用來訪問某些體系架構(gòu)下的io空間,配置tlp用來訪問設(shè)備的配置空間寄存器,消息tlp用來實(shí)現(xiàn)用戶自定義的消息。
3、pcie是點(diǎn)到點(diǎn)連接,當(dāng)主機(jī)的rc控制器數(shù)量不夠,而需要連接更多的設(shè)備時,就需要使用pcie交換芯片。如圖1所示,pcie交換芯片通常具有一個上游端口usp,用來連接主機(jī)端的rc,多個下游端口dsp,用來連接ep設(shè)備。在pcie枚舉時,pcie交換芯片內(nèi)部生成了一個查找表,該表記錄了各個端口的總線號以及地址范圍等信息。枚舉完成后,每個端口進(jìn)來的tlp,根據(jù)其不同類型查找該表,便可將該tlp路由至對應(yīng)端口,從而實(shí)現(xiàn)一個rc連接多個ep設(shè)備的目的,并且也可以實(shí)現(xiàn)各ep設(shè)備之間的通信。
4、通常可以使用pcie交換芯片將存儲設(shè)備、網(wǎng)絡(luò)設(shè)備和各種數(shù)據(jù)運(yùn)算設(shè)備等連接至主機(jī)。
5、目前主流的存儲設(shè)備,按照其存儲介質(zhì)的不同,有傳統(tǒng)的機(jī)械磁盤以及使用閃存芯片的nvme磁盤兩類。其中nvme磁盤的讀寫速率要遠(yuǎn)優(yōu)于傳統(tǒng)機(jī)械磁盤,對cpu的處理性能要求較高。
6、目前常見的主流網(wǎng)絡(luò)設(shè)備有ib網(wǎng)卡和以太網(wǎng)卡,ib網(wǎng)卡有自己的rdma加速技術(shù)。以下本文中的網(wǎng)絡(luò)設(shè)備,除非特別指出,均為以太網(wǎng)卡。
7、一臺主機(jī)的cpu,通常通過pcie接口連接外置的網(wǎng)絡(luò)或存儲設(shè)備。如果cpu的pcie接口較少,而需要連接更多的設(shè)備,則需要使用pcie交換芯片進(jìn)行擴(kuò)展。
8、網(wǎng)絡(luò)設(shè)備即網(wǎng)卡,需要配合其驅(qū)動程序使用。一般在linux或其他操作系統(tǒng)當(dāng)中,應(yīng)用程序運(yùn)行在用戶態(tài),而驅(qū)動程序運(yùn)行在內(nèi)核態(tài)。當(dāng)應(yīng)用程序使用驅(qū)動程序收發(fā)數(shù)據(jù)時,必然要經(jīng)過操作系統(tǒng)的用戶態(tài)和內(nèi)核態(tài)的狀態(tài)切換,以及數(shù)據(jù)在用戶態(tài)和內(nèi)核態(tài)之間的拷貝過程,會給cpu帶來一定的額外的負(fù)載。另外,網(wǎng)卡收到數(shù)據(jù)后,通常會產(chǎn)生中斷給cpu,驅(qū)動程序響應(yīng)中斷并處理數(shù)據(jù),操作系統(tǒng)在進(jìn)入和退出中斷上下文時,也會帶來額外的開銷。同時,由于以上用戶態(tài)和內(nèi)核態(tài)的反復(fù)切換,以及系統(tǒng)頻繁進(jìn)入和退出中斷,會導(dǎo)致系統(tǒng)緩存被不停刷新,影響緩存的命中率,進(jìn)而影響系統(tǒng)效率。隨著網(wǎng)卡速率的提高,以上性能影響也越顯著。
9、為解決以上問題,一些專門的軟件解決方案被開發(fā)出來,以取代傳統(tǒng)的驅(qū)動程序。例如英特爾公司的dpdk,它是專門加速網(wǎng)絡(luò)數(shù)據(jù)處理的軟件解決方案,主要采用以下技術(shù)提高網(wǎng)絡(luò)處理效率:將網(wǎng)卡設(shè)備映射到操作系統(tǒng)的用戶態(tài);使用輪詢的方式取代中斷;將網(wǎng)絡(luò)處理線程固定到專門的cpu核;使用大頁技術(shù),提高緩存命中率;采用無鎖隊(duì)列,減少資源競爭等。使用dpdk,可以大幅提高網(wǎng)絡(luò)數(shù)據(jù)處理的效率。
10、對于存儲設(shè)備,特別是nvme存儲設(shè)備,也存在同樣的情況,即隨著設(shè)備速率的提高,傳統(tǒng)驅(qū)動程序帶來的大量的操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)的切換,以及頻繁進(jìn)出中斷處理程序等操作,極大地影響了數(shù)據(jù)處理性能。
11、相應(yīng)地,為解決存儲設(shè)備性能問題,也有一些專門的軟件解決方案,例如英特爾公司的spdk,采用跟dpdk類似的方式,例如將設(shè)備映射到用戶態(tài),使用輪詢代替中斷等手段,來提高系統(tǒng)效率。
12、傳統(tǒng)的網(wǎng)絡(luò)或存儲設(shè)備的驅(qū)動程序,由于其帶來的大量的操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)的切換,以及頻繁進(jìn)入和退出中斷上下文等,會引發(fā)cpu的有效利用率下降。
13、以dpdk和spdk為代表的數(shù)據(jù)加速處理軟件解決方案,能規(guī)避傳統(tǒng)驅(qū)動程序的工作模式的缺點(diǎn),極大地提高系統(tǒng)的處理效率。但也存在明顯的缺點(diǎn):需要占用專門的cpu核來處理數(shù)據(jù),如果一個系統(tǒng)連接多個網(wǎng)絡(luò)或存儲設(shè)備,則需要多個cpu核都被占用。另外,當(dāng)沒有數(shù)據(jù)需要處理的時候,這些cpu核仍在空轉(zhuǎn),而不能用來處理其他任務(wù)。這將造成cpu利用率的浪費(fèi),通常服務(wù)器的cpu應(yīng)該用來運(yùn)行更有價值的應(yīng)用程序,而不是被硬件設(shè)備占用或者空轉(zhuǎn)。
14、總之,現(xiàn)有的方案,都會有cpu利用率的額外浪費(fèi),導(dǎo)致cpu的有效利用率不高。
15、基于此,提出本發(fā)明。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)發(fā)明人通過多次試驗(yàn)分析,在使用pcie交換芯片把網(wǎng)絡(luò)或存儲設(shè)備連接到主機(jī)cpu以后,為減少cpu處理硬件設(shè)備帶來的額外負(fù)載,可以將cpu上運(yùn)行的傳統(tǒng)驅(qū)動程序或者數(shù)據(jù)加速處理軟件卸載到pcie交換芯片上。通過在pcie交換芯片增加專門的硬件及軟件,使pcie交換芯片具備網(wǎng)絡(luò)或存儲設(shè)備的加速功能。
2、網(wǎng)絡(luò)或存儲設(shè)備連接到cpu以后,傳統(tǒng)的設(shè)備驅(qū)動程序帶來的操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)之間的狀態(tài)切換,頻繁進(jìn)入及退出以及中斷處理上下文,會帶來一定的性能損失;而采用將硬件設(shè)備映射到用戶態(tài),以軟件輪詢?yōu)橹鞯臄?shù)據(jù)處理加速技術(shù),會導(dǎo)致專門的cpu核被占用,即便在沒有數(shù)據(jù)需要處理的時候。尤其是使用pcie交換芯片連接更多的網(wǎng)絡(luò)或存儲設(shè)備以后,對cpu的占用導(dǎo)致cpu上運(yùn)行的應(yīng)用程序性能損失更加明顯,因此本發(fā)明的目標(biāo)是解決以上問題。使pcie交換芯片具備網(wǎng)絡(luò)和存儲的數(shù)據(jù)處理和加速能力,讓cpu的算力更有效地專注在用戶的應(yīng)用程序上,而不是被硬件設(shè)備的操作過多占用。
3、本發(fā)明提供了一種具有存儲和網(wǎng)絡(luò)加速功能的pcie交換芯片,具體技術(shù)方案如下:
4、一種具有存儲和網(wǎng)絡(luò)加速功能的pcie交換芯片,通過在pcie交換芯片內(nèi)添加數(shù)據(jù)加速功能模組,所述數(shù)據(jù)加速功能模組包括內(nèi)置iep、控制單元、內(nèi)置cpu及固件、dma和地址轉(zhuǎn)換單元atu;
5、在pcie交換芯片中,一個ep連接在dsp下面是通過dsp集成ep來實(shí)現(xiàn),稱為內(nèi)置iep;
6、所述控制單元包括狀態(tài)寄存器、頁表和指針寄存器;
7、所述狀態(tài)寄存器將內(nèi)部cpu對網(wǎng)絡(luò)或者存儲設(shè)備的信息展示給主機(jī)cpu,使主機(jī)cpu得知設(shè)備是否可以進(jìn)行讀寫操作;
8、所述頁表為主機(jī)當(dāng)中使用的虛擬地址和物理地址的轉(zhuǎn)換表,記錄需要讀寫的數(shù)據(jù)所在內(nèi)存區(qū)域的虛擬地址和物理地址的轉(zhuǎn)換關(guān)系,供地址轉(zhuǎn)換單元atu查找使用;
9、所述指針寄存器,用來表明主機(jī)內(nèi)存中申請的數(shù)據(jù)區(qū)域的起始和結(jié)束位置以及數(shù)據(jù)的頭尾指針,還包括數(shù)據(jù)的讀寫指令;數(shù)據(jù)的主機(jī)在對數(shù)據(jù)進(jìn)行讀或?qū)懖僮饕院?,更新該頭或尾指針寄存器,dma根據(jù)讀或?qū)懼噶罾^續(xù)進(jìn)行數(shù)據(jù)拷貝;
10、從存儲或者網(wǎng)絡(luò)設(shè)備讀出或者要寫入的數(shù)據(jù),在pcie交換芯片中緩存,dma完成數(shù)據(jù)在pcie交換芯片緩存和主機(jī)內(nèi)存之間的傳輸;
11、dma訪問主機(jī)內(nèi)存時,要經(jīng)過地址轉(zhuǎn)換單元atu,地址轉(zhuǎn)換單元atu查找控制單元內(nèi)預(yù)先編寫好的頁表,把虛擬地址轉(zhuǎn)換成物理地址,再進(jìn)行內(nèi)存讀寫訪問;
12、固件可枚舉到交換芯片連接的網(wǎng)絡(luò)或存儲設(shè)備,內(nèi)置cpu取代外部主機(jī)cpu,對外接的網(wǎng)絡(luò)或存儲設(shè)備進(jìn)行直接管理。
13、更進(jìn)一步的改進(jìn),所述存儲設(shè)備的信息包括設(shè)備的類型、名稱、當(dāng)前的運(yùn)行狀態(tài)。
14、更進(jìn)一步的改進(jìn),所述內(nèi)置iep被主機(jī)cpu枚舉到,內(nèi)置iep將控制單元內(nèi)的寄存器和內(nèi)存資源通過bar空間映射到主機(jī)cpu的地址空間,使主機(jī)cpu訪問到控制單元。
15、更進(jìn)一步的改進(jìn),所述數(shù)據(jù)加速功能模組的使用流程包括如下步驟:
16、步驟s1、系統(tǒng)連接網(wǎng)絡(luò)或存儲設(shè)備,啟動后,內(nèi)置cpu上的固件運(yùn)行,枚舉到設(shè)備;
17、步驟s2、固件配置狀態(tài)寄存器,表明其功能以及設(shè)備已經(jīng)準(zhǔn)備好;
18、步驟s3、主機(jī)cpu上的程序,枚舉到內(nèi)置iep設(shè)備,讀取其功能和狀態(tài);
19、步驟s4、主機(jī)上的程序在主機(jī)內(nèi)存中分配地址空間,并將其鎖住,其含義為該內(nèi)存不會產(chǎn)生換頁行為,即虛擬地址和物理地址的對應(yīng)關(guān)系將保持不變;
20、步驟s5、主機(jī)將分配的內(nèi)存起始和結(jié)束位置寫入到控制單元的指針寄存器內(nèi);
21、步驟s6、主機(jī)將所使用的內(nèi)存空間的虛擬地址和物理地址的轉(zhuǎn)換表寫入控制單元的頁表內(nèi);
22、步驟s7、主機(jī)在數(shù)據(jù)讀寫操作開始前,將指針寄存器的頭和尾指針至于內(nèi)存起始地址;
23、步驟s8、主機(jī)向指針寄存器發(fā)出讀數(shù)據(jù)指令,
24、或者,
25、主機(jī)準(zhǔn)備好數(shù)據(jù),向指針寄存器更新數(shù)據(jù)的尾指針,發(fā)出寫數(shù)據(jù)指令;
26、步驟s9、對于主機(jī)的讀數(shù)據(jù)指令,內(nèi)部固件啟動,輪詢設(shè)備數(shù)據(jù),將數(shù)據(jù)存入緩存;
27、或者,
28、對于主機(jī)的寫數(shù)據(jù)指令,內(nèi)部固件啟動,當(dāng)緩存中有數(shù)據(jù)時,將其寫入設(shè)備;
29、步驟s10、dma將數(shù)據(jù)從pcie交換芯片緩存搬運(yùn)至主機(jī)內(nèi)存,同時更新數(shù)據(jù)的尾指針;
30、或者,
31、dma將數(shù)據(jù)從主機(jī)內(nèi)存搬運(yùn)至交換芯片緩存,同時更新數(shù)據(jù)的頭指針;
32、步驟s11、主機(jī)應(yīng)用程序從主機(jī)內(nèi)存中讀到數(shù)據(jù),更新數(shù)據(jù)頭指針;
33、或者,
34、主機(jī)內(nèi)存中的數(shù)據(jù)被寫出,可以繼續(xù)寫其入他數(shù)據(jù),更新數(shù)據(jù)尾指針;
35、步驟s12、以上步驟8~步驟11循環(huán),直至所有數(shù)據(jù)被讀寫完成,另外,數(shù)據(jù)讀寫同時并行執(zhí)行。
36、更進(jìn)一步的改進(jìn),分別將一個數(shù)據(jù)加速功能模組部署在每個dsp端口上方,pcie交換芯片內(nèi)的總線的下方。
37、更進(jìn)一步的改進(jìn),將一個數(shù)據(jù)加速功能模組部署在usp端口下,pcie交換芯片內(nèi)的總線的下方。
38、本發(fā)明的有益效果:
39、1、本發(fā)明是在常規(guī)pcie交換芯片基礎(chǔ)上,增加數(shù)據(jù)加速功能模組,所述數(shù)據(jù)加速功能模組包括內(nèi)置iep、控制單元、內(nèi)置cpu及固件、dma和地址轉(zhuǎn)換單元atu,從而可以將原本在主機(jī)cpu上運(yùn)行的跟網(wǎng)絡(luò)或存儲設(shè)備硬件交互相關(guān)的負(fù)載,卸載到pcie交換芯片來執(zhí)行,保證主機(jī)cpu能更有效地運(yùn)行應(yīng)用程序。現(xiàn)有pcie交換芯片均不具備此功能。
40、2、在使用了本發(fā)明提供的具有數(shù)據(jù)加速功能的pcie交換芯片,連接網(wǎng)絡(luò)或存儲設(shè)備到主機(jī)cpu以后,cpu的全部算力都可以用來運(yùn)行應(yīng)用程序,不需要花費(fèi)cpu的運(yùn)算能力在跟硬件相關(guān)的操作系統(tǒng)用戶態(tài)和內(nèi)核態(tài)的狀態(tài)切換、中斷處理上下文切換,或者輪詢等數(shù)據(jù)處理上,可以顯著提高cpu的處理能力和使用效率。