本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種數(shù)據(jù)讀寫方法、裝置、設(shè)備及介質(zhì)。
背景技術(shù):
1、在host主機端向ssd(solid?state?disk,固態(tài)硬盤)進行數(shù)據(jù)讀寫操作時,ssd的主控芯片mcu(microcontroller?unit,微控制單元)從sq(submission?queue,提交隊列)中獲取主機端發(fā)送的數(shù)據(jù)讀寫命令,并解析命令以配置dma(direct?memory?access,直接內(nèi)存訪問)描述符,并在dma描述符配置完成后,啟動dma引擎開始進行數(shù)據(jù)讀寫操作。具體的,dma引擎根據(jù)dma描述符中的sgl(scatter-gather?list,分散-聚集列表)或者prp(physical?region?page,物理區(qū)域頁)來確定主機端地址,基于主機端地址便可以將從ssd本地內(nèi)存中讀取的數(shù)據(jù)存入主機端指定位置或?qū)闹鳈C端指定位置讀取的數(shù)據(jù)寫入ssd本地內(nèi)存,并且,通過sgl/prp的機制可以靈活地描述主機端的地址。但是指示ssd本地內(nèi)存的方式是通過dma描述符中的起始地址和總數(shù)據(jù)量來確定的,因此只能指示一段連續(xù)的地址空間,若想要實現(xiàn)對ssd本地內(nèi)存中的非連續(xù)地址的數(shù)據(jù)傳輸,只能通過多次配置dma描述符來實現(xiàn),這樣不僅會影響數(shù)據(jù)讀寫速率,而且會加大數(shù)據(jù)讀寫所需的資源。
技術(shù)實現(xiàn)思路
1、有鑒于此,本發(fā)明實施例的目的在于提供一種數(shù)據(jù)讀寫方法、裝置、設(shè)備及介質(zhì),通過引入地址描述符鏈表使得對于非易失性存儲器中的非連續(xù)地址的數(shù)據(jù)讀寫操作,只需配置一次以及讀取一次控制描述符,提高了對非連續(xù)地址進行數(shù)據(jù)讀寫的速率,以及降低了數(shù)據(jù)讀寫所需的資源。其具體方案如下:
2、第一方面,本發(fā)明公開了一種數(shù)據(jù)讀寫方法,應(yīng)用于非易失性存儲器的主控芯片,包括:
3、獲取主機端發(fā)送的數(shù)據(jù)讀寫命令,并基于對所述數(shù)據(jù)讀寫命令的解析結(jié)果配置控制描述符,并將所述控制描述符的狀態(tài)設(shè)置為待完成狀態(tài);所述控制描述符用于管理所述主機端基于系統(tǒng)內(nèi)存對所述非易失性存儲器的數(shù)據(jù)讀寫操作,其中,所述非易失性存儲器基于直接內(nèi)存訪問技術(shù)和非易失性存儲器接口規(guī)范訪問所述系統(tǒng)內(nèi)存;
4、在所述控制描述符配置完成后,通過預(yù)設(shè)引擎基于所述控制描述符中的連續(xù)標志位確定所述數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作;
5、若所述數(shù)據(jù)讀寫操作為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,則基于所述控制描述符中的起始地址確定地址描述符鏈表,并按照所述地址描述符鏈表中地址描述符從前到后的順序依次對各所述地址描述符進行分析,以基于分析得到的與所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;其中,所述數(shù)據(jù)讀寫地址空間位于所述非易失性存儲器中,并且,任意兩個所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間為非連續(xù)的地址空間;
6、在完成對所述地址描述符鏈表中的各所述地址描述符分別對應(yīng)的數(shù)據(jù)讀寫地址空間的所述數(shù)據(jù)讀寫操作之后,將所述控制描述符的狀態(tài)從待完成狀態(tài)更新為已完成狀態(tài)。
7、可選的,所述基于所述控制描述符中的起始地址確定地址描述符鏈表,并按照所述地址描述符鏈表中地址描述符從前到后的順序依次對各所述地址描述符進行分析,以基于分析得到的與所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作,包括:
8、基于所述控制描述符中的起始地址確定地址描述符鏈表中與第一個地址描述符對應(yīng)的起始描述符地址,以得到當(dāng)前描述符地址,并基于所述當(dāng)前描述符地址從所述地址描述符鏈表中確定當(dāng)前地址描述符;
9、對所述當(dāng)前地址描述符進行分析,并基于分析得到的首地址和數(shù)據(jù)量大小確定與所述當(dāng)前地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間,以及基于所述數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;
10、基于對所述當(dāng)前地址描述符進行分析得到的下一描述符地址確定新的當(dāng)前描述符地址,并重新跳轉(zhuǎn)至所述基于所述當(dāng)前描述符地址從所述地址描述符鏈表中確定當(dāng)前地址描述符的步驟,直至所述當(dāng)前地址描述符為所述地址描述符鏈表中的最后一個地址描述符。
11、可選的,所述對所述當(dāng)前地址描述符進行分析,并基于分析得到的首地址和數(shù)據(jù)量大小確定與所述當(dāng)前地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間,以及基于所述數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作,包括:
12、對所述當(dāng)前地址描述符進行分析,以得到首地址和數(shù)據(jù)量大??;所述數(shù)據(jù)量大小為正整數(shù);
13、基于初始數(shù)值確定當(dāng)前數(shù)值,并基于所述當(dāng)前數(shù)值和單位數(shù)據(jù)量相乘確定當(dāng)前數(shù)據(jù)量,以及基于所述當(dāng)前數(shù)據(jù)量和所述首地址相加確定當(dāng)前起始讀寫地址;其中,所述初始數(shù)值為0;所述單位數(shù)據(jù)量為邏輯區(qū)塊地址的大??;
14、基于所述當(dāng)前起始讀寫地址和所述單位數(shù)據(jù)量確定當(dāng)前數(shù)據(jù)讀寫地址空間,并基于所述當(dāng)前數(shù)據(jù)讀寫地址空間生成數(shù)據(jù)讀寫請求信息,以利用所述數(shù)據(jù)讀寫請求信息對所述當(dāng)前數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;
15、判斷所述當(dāng)前數(shù)值是否等于預(yù)設(shè)數(shù)值;所述預(yù)設(shè)數(shù)值比所述數(shù)據(jù)量大小小1;
16、若所述當(dāng)前數(shù)值不等于所述預(yù)設(shè)數(shù)值,則對所述當(dāng)前數(shù)值進行自加一操作,以得到新的當(dāng)前數(shù)值,并重新跳轉(zhuǎn)至所述基于所述當(dāng)前數(shù)值和單位數(shù)據(jù)量相乘確定當(dāng)前數(shù)據(jù)量的步驟,直至所述當(dāng)前數(shù)值等于所述預(yù)設(shè)數(shù)值,并觸發(fā)所述基于對所述當(dāng)前地址描述符進行分析得到的下一描述符地址確定新的當(dāng)前描述符地址的步驟。
17、可選的,所述基于對所述當(dāng)前地址描述符進行分析得到的下一描述符地址確定新的當(dāng)前描述符地址,包括:
18、若所述當(dāng)前地址描述符中的鏈表連續(xù)位為第一連續(xù)位,則表征所述當(dāng)前描述符地址與所述下一描述符地址之間的關(guān)系滿足預(yù)設(shè)緊鄰關(guān)系,并基于所述當(dāng)前地址描述符的大小和所述當(dāng)前描述符地址確定所述下一描述符地址,以及將所述下一描述符地址確定為新的當(dāng)前描述符地址;
19、若所述當(dāng)前地址描述符中的鏈表連續(xù)位為第二連續(xù)位,則表征所述當(dāng)前描述符地址與所述下一描述符地址之間的關(guān)系不滿足預(yù)設(shè)緊鄰關(guān)系,并基于所述當(dāng)前地址描述符中的描述符地址信息確定所述下一描述符地址,以及將所述下一描述符地址確定為新的當(dāng)前描述符地址。
20、可選的,所述方法還包括:
21、在進行所述數(shù)據(jù)讀寫操作的過程中,對所述數(shù)據(jù)讀寫操作進行錯誤檢測,并在檢測到所述數(shù)據(jù)讀寫操作出現(xiàn)錯誤時,記錄相應(yīng)的錯誤信息,并將所述控制描述符的狀態(tài)從待完成狀態(tài)更新為出錯狀態(tài)。
22、可選的,所述基于所述控制描述符中的連續(xù)標志位確定所述數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,包括:
23、若所述控制描述符中的連續(xù)標志位為第一標志位,則確定所述數(shù)據(jù)讀寫操作為基于非連續(xù)地址的數(shù)據(jù)讀寫操作;
24、若所述控制描述符中的連續(xù)標志位為第二標志位,則確定所述數(shù)據(jù)讀寫操作為基于連續(xù)地址的數(shù)據(jù)讀寫操作。
25、可選的,所述基于所述控制描述符中的連續(xù)標志位確定所述數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作之后,還包括:
26、若所述數(shù)據(jù)讀寫操作為基于連續(xù)地址的數(shù)據(jù)讀寫操作,則基于所述控制描述符中的起始地址和總數(shù)據(jù)量確定連續(xù)讀寫地址空間,并基于所述連續(xù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;其中,所述連續(xù)讀寫地址空間位于所述非易失性存儲器中;
27、在完成對所述連續(xù)讀寫地址空間的所述數(shù)據(jù)讀寫操作之后,將所述控制描述符的狀態(tài)從待完成狀態(tài)更新為已完成狀態(tài)。
28、第二方面,本發(fā)明公開了一種數(shù)據(jù)讀寫裝置,應(yīng)用于非易失性存儲器的主控芯片,包括:
29、描述符配置模塊,用于獲取主機端發(fā)送的數(shù)據(jù)讀寫命令,并基于對所述數(shù)據(jù)讀寫命令的解析結(jié)果配置控制描述符,并將所述控制描述符的狀態(tài)設(shè)置為待完成狀態(tài);所述控制描述符用于管理所述主機端基于系統(tǒng)內(nèi)存對所述非易失性存儲器的數(shù)據(jù)讀寫操作,其中,所述非易失性存儲器基于直接內(nèi)存訪問技術(shù)和非易失性存儲器接口規(guī)范訪問所述系統(tǒng)內(nèi)存;
30、讀寫操作確定模塊,用于在所述控制描述符配置完成后,通過預(yù)設(shè)引擎基于所述控制描述符中的連續(xù)標志位確定所述數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作;
31、數(shù)據(jù)讀寫模塊,用于若所述數(shù)據(jù)讀寫操作為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,則基于所述控制描述符中的起始地址確定地址描述符鏈表,并按照所述地址描述符鏈表中地址描述符從前到后的順序依次對各所述地址描述符進行分析,以基于分析得到的與所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;其中,所述數(shù)據(jù)讀寫地址空間位于所述非易失性存儲器中,并且,任意兩個所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間為非連續(xù)的地址空間;
32、狀態(tài)更新模塊,用于在完成對所述地址描述符鏈表中的各所述地址描述符分別對應(yīng)的數(shù)據(jù)讀寫地址空間的所述數(shù)據(jù)讀寫操作之后,將所述控制描述符的狀態(tài)從待完成狀態(tài)更新為已完成狀態(tài)。
33、第三方面,本發(fā)明公開了一種電子設(shè)備,包括:
34、存儲器,用于存儲計算機程序;
35、處理器,用于執(zhí)行所述計算機程序以實現(xiàn)前述數(shù)據(jù)讀寫方法的步驟。
36、第四方面,本發(fā)明公開了一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)上存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)前述數(shù)據(jù)讀寫方法的步驟。
37、本技術(shù)中,非易失性存儲器的主控芯片獲取主機端發(fā)送的數(shù)據(jù)讀寫命令,并基于對所述數(shù)據(jù)讀寫命令的解析結(jié)果配置控制描述符,并將所述控制描述符的狀態(tài)設(shè)置為待完成狀態(tài);所述控制描述符用于管理所述主機端基于系統(tǒng)內(nèi)存對所述非易失性存儲器的數(shù)據(jù)讀寫操作,其中,所述非易失性存儲器基于直接內(nèi)存訪問技術(shù)和非易失性存儲器接口規(guī)范訪問所述系統(tǒng)內(nèi)存;在所述控制描述符配置完成后,通過預(yù)設(shè)引擎基于所述控制描述符中的連續(xù)標志位確定所述數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作;若所述數(shù)據(jù)讀寫操作為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,則基于所述控制描述符中的起始地址確定地址描述符鏈表,并按照所述地址描述符鏈表中地址描述符從前到后的順序依次對各所述地址描述符進行分析,以基于分析得到的與所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間進行所述數(shù)據(jù)讀寫操作;其中,所述數(shù)據(jù)讀寫地址空間位于所述非易失性存儲器中,并且,任意兩個所述地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間為非連續(xù)的地址空間;在完成對所述地址描述符鏈表中的各所述地址描述符分別對應(yīng)的數(shù)據(jù)讀寫地址空間的所述數(shù)據(jù)讀寫操作之后,將所述控制描述符的狀態(tài)從待完成狀態(tài)更新為已完成狀態(tài)。
38、有益效果:本發(fā)明基于控制描述符中的連續(xù)標志位確定主機端基于系統(tǒng)內(nèi)存對非易失性存儲器的數(shù)據(jù)讀寫操作是否為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,如果數(shù)據(jù)讀寫操作為基于非連續(xù)地址的數(shù)據(jù)讀寫操作,則基于地址描述符鏈表中的各地址描述符確定出位于非易失性存儲器中的相應(yīng)數(shù)據(jù)讀寫地址空間,并基于數(shù)據(jù)讀寫地址空間進行數(shù)據(jù)讀寫操作,而由于任意兩個地址描述符對應(yīng)的數(shù)據(jù)讀寫地址空間在非易失性存儲器中為非連續(xù)的地址空間,因此本發(fā)明通過地址描述符鏈表便可以實現(xiàn)對非易失性存儲器中的非連續(xù)地址空間的數(shù)據(jù)讀寫操作;并且,本發(fā)明對于非易失性存儲器中的非連續(xù)地址的數(shù)據(jù)讀寫操作,只需配置一次控制描述符以及讀取一次控制描述符即可,減少了控制描述符的配置次數(shù)和讀取次數(shù),從而提高了對非易失性存儲器中非連續(xù)地址進行數(shù)據(jù)讀寫的速率,以及降低了對非連續(xù)地址進行數(shù)據(jù)讀寫所需的資源。