本發(fā)明涉及一種nvme控制器及其初始化、數(shù)據(jù)讀寫方法,屬于pcie設(shè)備。
背景技術(shù):
1、隨著技術(shù)的不斷發(fā)展,pcie(peripheral?component?interconnect?express,一種高速串行計算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),主要用于擴(kuò)充計算機(jī)系統(tǒng)總線數(shù)據(jù)吞吐量以及提高設(shè)備通信速度)設(shè)備已成為現(xiàn)代計算機(jī)系統(tǒng)的重要組成部分,廣泛應(yīng)用于存儲、網(wǎng)絡(luò)、圖形處理等多個領(lǐng)域。由于pcie設(shè)備種類繁多,功能各異,因此對其進(jìn)行有效管理變得至關(guān)重要。
2、為了減少設(shè)計工作量,可以實(shí)現(xiàn)nvme-mi協(xié)議(nvme?management?interface,簡稱nvme-mi協(xié)議,是一種用于管理和監(jiān)控nvme存儲設(shè)備的接口規(guī)范),借助nvme(non-volatilememory?express,是一種高性能的存儲接口和協(xié)議,專為利用pcie總線提供的高帶寬而設(shè)計)生態(tài)來做管理。
3、復(fù)用nvme生態(tài)有以下優(yōu)勢:
4、1、標(biāo)準(zhǔn)化與兼容性:nvme-mi協(xié)議作為nvme規(guī)范的一部分,遵循統(tǒng)一的標(biāo)準(zhǔn)和接口定義。這意味著不同的pcie設(shè)備可以遵循相同的管理協(xié)議,簡化了管理流程,提高了系統(tǒng)的兼容性。
5、2、生態(tài)共享:由于nvme已經(jīng)在存儲領(lǐng)域建立了龐大的生態(tài)系統(tǒng)和廣泛的應(yīng)用基礎(chǔ),nvme-mi協(xié)議可以復(fù)用這些現(xiàn)有的生態(tài)資源。這意味著開發(fā)者可以利用現(xiàn)有的nvme工具、驅(qū)動和應(yīng)用程序來管理pcie設(shè)備,降低了開發(fā)成本和門檻。
6、3、擴(kuò)展性與靈活性:nvme-mi協(xié)議的設(shè)計允許進(jìn)行擴(kuò)展和定制,以滿足不同pcie設(shè)備的管理需求。同時,它還可以與其他管理協(xié)議和接口進(jìn)行集成,實(shí)現(xiàn)更全面的系統(tǒng)管理功能。
7、傳統(tǒng)的nvme控制器依賴硬件實(shí)現(xiàn),硬件需要實(shí)現(xiàn)nvme控制模塊、門鈴模塊、命令收發(fā)模塊、命令處理模塊、prp(physical?region?page,物理區(qū)域頁)處理模塊。nvme控制模塊用于用戶配置nvme控制器,nvme控制器產(chǎn)生對應(yīng)的邏輯進(jìn)行初始化、創(chuàng)建隊(duì)列、重置等操作,并通過中斷通知設(shè)備cpu進(jìn)行相應(yīng)處理。門鈴模塊用于用戶與設(shè)備cpu進(jìn)行交互,用戶寫門鈴模塊,設(shè)備會進(jìn)行數(shù)據(jù)收發(fā)處理,或者給設(shè)備cpu中斷進(jìn)行命令處理。命令收發(fā)模塊根據(jù)用戶觸發(fā)的門鈴及配置信息,從主機(jī)內(nèi)存的命令隊(duì)列中獲取命令到本地內(nèi)存,或者將設(shè)備的完成命令發(fā)送給主機(jī)內(nèi)存的命令完成隊(duì)列。命令處理模塊解析nvme命令進(jìn)行相應(yīng)的處理或者給到設(shè)備cpu處理。prp處理模塊根據(jù)命令處理模塊處理的指令,獲取prp信息指定的主機(jī)內(nèi)存到prp緩沖區(qū)中。
8、這種方法需要硬件實(shí)現(xiàn),雖然具有高性能和低延遲的特點(diǎn),但同時也帶來了靈活性方面的限制。硬件邏輯實(shí)現(xiàn)需要專門的硬件設(shè)計、驗(yàn)證過程,這不僅增加了開發(fā)成本,還可能導(dǎo)致產(chǎn)品上市時間延遲。
9、基于此,提出本發(fā)明。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明通過軟件結(jié)合通用硬件實(shí)現(xiàn)硬件nvme控制器的功能,需要解決以下幾點(diǎn)問題:
2、1)、nvme控制器實(shí)現(xiàn)了一片寄存器空間,用于主機(jī)和nvme設(shè)備信息交互,讓主機(jī)能控制nvme控制器和獲取nvme控制器狀態(tài)。本發(fā)明采用通用硬件sram(static?random-access?memory,靜態(tài)隨機(jī)存取存儲器)替代這塊寄存器空間來讓主機(jī)和軟件nvme控制器通信。
3、2)、sram只有存取數(shù)據(jù)的能力,沒有處理邏輯和通知機(jī)制,用戶寫sram的地址空間不能主動通知給設(shè)備cpu,設(shè)備cpu無法做出相應(yīng)的處理。本發(fā)明通過設(shè)備cpu上軟件線程一直輪詢對比sram空間的內(nèi)容,發(fā)現(xiàn)數(shù)據(jù)有變化以后進(jìn)行相應(yīng)處理。
4、3)、nvme控制器擁有獲取主機(jī)內(nèi)存到本地緩存和將本地緩存數(shù)據(jù)寫入主機(jī)內(nèi)存功能。設(shè)備cpu是不能直接與主機(jī)內(nèi)存通信的,不能做主機(jī)內(nèi)存和sram數(shù)據(jù)的互拷貝,本發(fā)明借助pcie模塊自帶的dma單元(dma,直接內(nèi)存訪問,允許硬件設(shè)備在無需cpu干預(yù)的情況下直接與內(nèi)存進(jìn)行數(shù)據(jù)傳輸)結(jié)合sram來進(jìn)行設(shè)備cpu和主機(jī)內(nèi)存通信,sram設(shè)計兩條通道,通道一留給pcie模塊的dma單元,通道二留給設(shè)備cpu通信。設(shè)備cpu控制pcie模塊的dma單元收發(fā)pcie?tlp包(transaction?layer?packet,傳輸層包,是pcie中用于數(shù)據(jù)傳輸?shù)幕締卧?,利用通道一將主機(jī)內(nèi)存拷貝到本地sram,cpu通過通道二讀寫sram內(nèi)容。
5、4)、nvme控制器擁有命令處理模塊和prp模塊,硬件解析到不同的命令做不同的處理或者觸發(fā)硬件中斷做處理。本發(fā)明基于軟件實(shí)現(xiàn)這部分邏輯,命令由dma單元獲取到本地sram的命令隊(duì)列中,軟件按順序讀取命令,逐條進(jìn)行處理,如果命令中帶有prp數(shù)據(jù),設(shè)備cpu解析prp數(shù)據(jù),再根據(jù)解析到地址,控制dma單元從主機(jī)內(nèi)存取數(shù)據(jù)到sram進(jìn)行處理。
6、本發(fā)明的目的在于提供一種nvme控制器,該nvme控制器通過軟件和通用硬件模塊實(shí)現(xiàn),基于此nvme控制器,用戶可以將nvme、nvme-mi和自定義指令傳輸給設(shè)備固件,來控制各種pcie設(shè)備。其好處在于,本發(fā)明不依賴硬件實(shí)現(xiàn),簡化了硬件設(shè)計,復(fù)用nvme協(xié)議做控制,簡化了協(xié)議設(shè)計和實(shí)現(xiàn),降低了研發(fā)成本和周期。本發(fā)明的具體內(nèi)容如下:
7、第一方面,一種nvme控制器,包括帶dma單元的pcie模塊、地址轉(zhuǎn)換單元atu模塊、sram和設(shè)備cpu;
8、帶dma單元的pcie模塊用于設(shè)備與主機(jī)通信并進(jìn)行設(shè)備與主機(jī)的信息交互,帶dma單元的pcie模塊的接收主機(jī)對sram的讀寫報文,轉(zhuǎn)發(fā)給sram;接收主機(jī)的控制信息自己模塊處理或者轉(zhuǎn)發(fā)給設(shè)備cpu;
9、dma單元接受設(shè)備cpu的控制,主動發(fā)起sram和主機(jī)內(nèi)存間的數(shù)據(jù)搬運(yùn);
10、地址轉(zhuǎn)換單元atu模塊用于靈活調(diào)整nvme控制器占用的sram區(qū)域;
11、sram用于數(shù)據(jù)緩存;sram具有兩條通道,分別為通道一和通道二,通道一和帶dma單元的pcie模塊相連,通道二和設(shè)備cpu相連;
12、所述設(shè)備cpu包括nvme控制器硬件模擬模塊、nvme協(xié)議通信模塊和應(yīng)用控制模塊,所述nvme控制器硬件模擬模塊輪詢監(jiān)聽nvme控制器的寄存器和門鈴寄存器,再交給其他模塊進(jìn)行nvme的初始化、控制、通信處理;
13、所述nvme協(xié)議通信模塊用于接收主機(jī)的nvme命令、nvme-mi命令以及其他自定義命令,所述nvme協(xié)議通信模塊控制dma單元對主機(jī)內(nèi)存進(jìn)行讀寫,獲取主機(jī)命令,根據(jù)命令類型轉(zhuǎn)交給對應(yīng)的模塊進(jìn)行處理,處理完成后,再將需返回的數(shù)據(jù)寫到主機(jī)內(nèi)存中;
14、所述應(yīng)用控制模塊負(fù)責(zé)初始化nvme控制器和進(jìn)行命令處理。
15、第二方面,一種nvme控制器初始化方法,包括以下步驟:
16、首先,初始化pcie配置空間寄存器,把pcie配置成nvmeep模式,然后初始化nvme控制器寄存器對應(yīng)的sram的值,初始化nvme控制器相關(guān)的基礎(chǔ)屬性;
17、隨后,初始化寄存器監(jiān)控線程,先記錄需要監(jiān)控的sram區(qū)域的初值,進(jìn)入循環(huán)后,判斷寄存器的值是否變化;如果寄存器的值沒有變化則繼續(xù)循環(huán),直到接收到關(guān)閉設(shè)備的命令退出;
18、當(dāng)寄存器的值有變化,如果是nvme控制器寄存器控制相關(guān)寄存器變化,則執(zhí)行nvme控制器邏輯;如果是nvme控制器寄存器門鈴寄存器有變化,交給nvme協(xié)議通信模塊處理。
19、更進(jìn)一步地,通過應(yīng)用控制模塊初始化pcie配置空間寄存器。
20、更進(jìn)一步地,所述nvme控制器相關(guān)的基礎(chǔ)屬性包括設(shè)備類型、隊(duì)列數(shù)量或隊(duì)列深度。
21、第三方面,一種nvme控制器數(shù)據(jù)讀寫方法,包括如下步驟:
22、步驟1、主機(jī)將一個或多個待執(zhí)行的命令放置在主機(jī)內(nèi)存的下一個空閑的提交隊(duì)列插槽中;
23、步驟2、主機(jī)寫提交隊(duì)列尾部門鈴寄存器,其值為新的提交隊(duì)列尾條目指針的值;nvme控制器硬件模擬模塊監(jiān)控到提交隊(duì)列尾部門鈴寄存值變化,感知到有新命令需要處理,將提交隊(duì)列尾部門鈴寄存器的值交給nvme協(xié)議通信模塊處理;
24、步驟3、nvme協(xié)議通信模塊控制dma單元,將提交隊(duì)列插槽中的命令傳輸?shù)絪ram的命令緩沖區(qū)中;
25、步驟4、nvme協(xié)議通信模塊讀取sram的命令并解析命令,如果命令包含prp信息,nvme解析prp信息,并將prp指代的主機(jī)的內(nèi)存頁通過dma單元傳輸?shù)絪ram的緩沖區(qū)中;
26、步驟5、nvme協(xié)議通信模塊解析命令并將命令交給應(yīng)用控制模塊進(jìn)行相應(yīng)業(yè)務(wù)處理;
27、步驟6、在命令執(zhí)行完成后,nvme協(xié)議通信模塊生成一條完成隊(duì)列條目存放到sram中,之后nvme協(xié)議通信模塊控制dma單元,將完成隊(duì)列條目存入主機(jī)的關(guān)聯(lián)完成隊(duì)中的下一個空閑插槽中;
28、步驟7、nvme協(xié)議通信模塊控制帶dma單元的pcie模塊向主機(jī)生成msi-x中斷以指示有一個新的完成隊(duì)列條目需要消耗和處理,根據(jù)中斷合并設(shè)置,判斷是否給每個新的完成隊(duì)列條都生成中斷;
29、步驟8、主機(jī)消耗并處理完成隊(duì)列中的新條目,直到遇到一個以前消耗的條目的階段標(biāo)記與當(dāng)前完成隊(duì)列條目的值相反的條目為止;
30、步驟9、主機(jī)寫入完成隊(duì)列頭部門鈴寄存,設(shè)備監(jiān)控到完成隊(duì)列頭部寄存器變化,更新本地完成隊(duì)列頭部緩存,結(jié)束。
31、本發(fā)明通過sram替代nvme硬件控制寄存器,設(shè)備cpu輪詢sram空間內(nèi)容獲取寄存器變化信息并給到不同模塊進(jìn)行處理。設(shè)備cpu輪詢控制器對應(yīng)的寄存器感知變化后,進(jìn)行初始化、重置等操作。設(shè)備cpu輪詢門鈴寄存器感知變化以后,設(shè)備cpu通過控制dma單元獲取主機(jī)存儲命令并進(jìn)行命令解析,交給通信模塊處理模塊處理。
32、本發(fā)明的有益效果:
33、1、本發(fā)明通過使用通用硬件結(jié)合軟件來實(shí)現(xiàn)nvme控制器,無需專門的硬件設(shè)計、驗(yàn)證,降低了開發(fā)成本和時間。通過復(fù)用成熟的通用模塊,減少了硬件的故障點(diǎn)和硬件錯誤的可能性,簡化了系統(tǒng)的復(fù)雜度。同時軟件實(shí)現(xiàn)的nvme控制器易于修改,維護(hù)更新成本低。
34、2、本發(fā)明實(shí)現(xiàn)了真實(shí)的nvme的協(xié)議,不用再開發(fā)主機(jī)端驅(qū)動程序,大大減少了開發(fā)工作量?;趎vme協(xié)議和nvme-mi,可以作為通用管理模塊,適用于各種設(shè)備進(jìn)行管理,各設(shè)備可以靈活擴(kuò)展各種設(shè)備管理功能,簡化管理軟件的設(shè)計工作量。本發(fā)明的為設(shè)備管理領(lǐng)域帶來重要的技術(shù)革新和應(yīng)用價值。