欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

NVMeoverFabric架構(gòu)中數(shù)據(jù)讀寫命令的控制方法、存儲設(shè)備和系統(tǒng)與流程

文檔序號:11635254閱讀:408來源:國知局
NVMe over Fabric架構(gòu)中數(shù)據(jù)讀寫命令的控制方法、存儲設(shè)備和系統(tǒng)與流程

本發(fā)明涉及信息技術(shù)領(lǐng)域,特別涉及一種基于fabric的非易失性高速傳輸總線nvme,nvmeoverfabric,架構(gòu)中數(shù)據(jù)讀寫命令的控制方法、存儲設(shè)備和系統(tǒng)。



背景技術(shù):

非易失性高速傳輸總線(英文:nvme,non-volatilememoryexpress)是一種控制器接口標(biāo)準(zhǔn),統(tǒng)一了通過快速外圍部件互連(英文:pcie,peripheralcomponentinterconnectexpress)總線進(jìn)行連接的nvme設(shè)備和主機(jī)(英文:host)之間的隊(duì)列(英文:queue)傳輸機(jī)制,優(yōu)化了隊(duì)列接口等。

已經(jīng)發(fā)布的pcie架構(gòu)的nvme標(biāo)準(zhǔn)在產(chǎn)業(yè)界取得了巨大的成功之后,業(yè)界很快希望將nvme標(biāo)準(zhǔn)擴(kuò)展到數(shù)據(jù)中心領(lǐng)域。但受限于數(shù)據(jù)中心領(lǐng)域沒有大量現(xiàn)成的pcie網(wǎng)絡(luò)以及pcie協(xié)議本身的缺陷(擴(kuò)展性、遠(yuǎn)距離連接等),產(chǎn)業(yè)界正在推動將nvme協(xié)議運(yùn)行在iwrap,基于融合以太的遠(yuǎn)程內(nèi)存直接訪問協(xié)議(英文:roce,remotedirectmemoryaccessoverconvergedethernet),infiniband,光纖通道(英文:fc,fiberchannel),omni-path等網(wǎng)絡(luò)上,以提供更靈活的更廣泛的應(yīng)用。業(yè)界將nvme協(xié)議運(yùn)行在iwrap、roce、infiniband、fc和omni-path等網(wǎng)絡(luò)上的應(yīng)用稱之為nvmeoverfabric(簡稱nof)。

在nvmeoverfabric的架構(gòu)中,host表示主機(jī),主機(jī)負(fù)責(zé)發(fā)起數(shù)據(jù)的讀寫;target表示目標(biāo)存儲設(shè)備,負(fù)責(zé)接收并且執(zhí)行host發(fā)送的命令。當(dāng)target接收到host發(fā)送的writecommand之后,解析writecommand中的內(nèi)容得到writecommand需要傳輸?shù)臄?shù)據(jù)長度,并在target的網(wǎng)卡內(nèi)存中分配對應(yīng)的緩存空間,用于緩存host待傳輸?shù)臄?shù)據(jù)。target的網(wǎng)卡分配好緩存數(shù)據(jù)所需的存儲空間后,host將數(shù)據(jù)傳輸?shù)奖环峙涞木W(wǎng)卡內(nèi)存的緩存空間中。之后,緩存在網(wǎng)卡內(nèi)存的緩存空間的數(shù)據(jù)被寫入target的硬盤中。當(dāng)host發(fā)送readcommand時(shí),實(shí)現(xiàn)過程類似,即需要將target硬盤中的數(shù)據(jù)緩存在target的網(wǎng)卡內(nèi)存的緩存空間中,再將緩存在緩存空間中的數(shù)據(jù),發(fā)送給host。

在具體的業(yè)務(wù)實(shí)現(xiàn)時(shí),可能會出現(xiàn)host發(fā)送的一個(gè)writecommand或一個(gè)readcommand需要傳輸?shù)臄?shù)據(jù)量很大,超過了target的網(wǎng)卡內(nèi)存的最大緩存空間,導(dǎo)致target的網(wǎng)卡內(nèi)存無法緩存需要傳輸?shù)臄?shù)據(jù)而造成數(shù)據(jù)讀寫命令執(zhí)行的失敗。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供一種nvmeoverfabric架構(gòu)中數(shù)據(jù)讀寫命令的控制方法、設(shè)備和系統(tǒng),以解決現(xiàn)有技術(shù)中因數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大,存儲設(shè)備中的緩存單元因存儲空間不足而導(dǎo)致的數(shù)據(jù)讀寫命令執(zhí)行失敗的問題。

一方面,本發(fā)明實(shí)施例提供了一種nvmeoverfabric架構(gòu)中控制設(shè)備與存儲設(shè)備之間數(shù)據(jù)讀寫命令的控制方法,所述存儲設(shè)備包括數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元中,所述數(shù)據(jù)處理單元用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中,所述方法包括:

所述數(shù)據(jù)處理單元接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述方法,所述數(shù)據(jù)處理單元根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,并依次將所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)遷移到目的地址所對應(yīng)的存儲空間中。解決了因數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大,緩存單元無法緩存需要傳輸?shù)臄?shù)據(jù)而導(dǎo)致的數(shù)據(jù)讀寫命令無法被執(zhí)行的問題。

可選的,所述nvmeoverfabric架構(gòu)中,所述控制設(shè)備與所述存儲設(shè)備之間可以通過iwarp、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)實(shí)現(xiàn)連接和通信。

所述存儲設(shè)備中的數(shù)據(jù)處理單元可以是網(wǎng)卡、獨(dú)立的fpga芯片或所述存儲設(shè)備中的中央處理器(英文:cpu,centralprocessingunit)來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存中的至少兩個(gè)組成的緩存資源池來實(shí)現(xiàn)來實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小是固定的,所述第一長度也是固定的。這樣,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù)大小或長度是固定的。這樣,數(shù)據(jù)處理單元每次按照固定的大小分配所述第一存儲空間,數(shù)據(jù)處理單元的實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小也可以是變化的,所述第一長度也隨之相應(yīng)變化。即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的大小不同,相應(yīng)的,所述第一長度的數(shù)據(jù)大小或長度至少有兩次是不同的。這樣,數(shù)據(jù)處理單元分配大小不同的所述第一存儲空間,能夠靈活地調(diào)整所述第一存儲空間的大小,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的位置是固定的,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù),被緩存在所述緩存單元固定位置的存儲空間中。這樣,數(shù)據(jù)處理單元每次在固定的所述第一存儲空間緩存需要傳輸?shù)臄?shù)據(jù),實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的位置是變化的,即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的位置不同。這樣,數(shù)據(jù)處理單元能夠能夠靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的大小和位置都是變化的,這樣能夠更進(jìn)一步靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述數(shù)據(jù)處理單元可以在分配所述第一存儲空間之間,判斷所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小是否大于或等于預(yù)設(shè)的閾值,在所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小,大于或等于預(yù)設(shè)的閾值時(shí),分配所述第一存儲空間。這樣,能夠避免數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)不大時(shí),不用分多次傳輸需要傳輸?shù)臄?shù)據(jù),提高數(shù)據(jù)傳輸?shù)男剩⒛軌蚬?jié)省所述數(shù)據(jù)處理單元和所述緩存單元因多次緩存需要傳輸?shù)臄?shù)據(jù)所帶來的資源的消耗。

在一個(gè)可能的設(shè)計(jì)中,所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間;或,

所述第一存儲空間為預(yù)設(shè)的閾值,當(dāng)所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元從所述緩存單元的可用存儲空間中分配所述第一存儲空間;當(dāng)所述第一存儲空間大于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元在等待預(yù)設(shè)時(shí)間后再判斷所述第一存儲空間是否小于或等于所述緩存單元的可用存儲空間,并在所述第一存儲空間小于所述緩存單元的可用存儲空間時(shí),從所述緩存單元的可用存儲空間中分配所述第一存儲空間。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令包括所述需要傳輸?shù)臄?shù)據(jù)的地址信息和所述需要傳輸?shù)臄?shù)據(jù)的長度。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為寫命令,所述需要傳輸?shù)臄?shù)據(jù)為需要存儲的數(shù)據(jù),所述寫命令包括所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址,所述需要存儲的數(shù)據(jù)的長度和所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址;

相應(yīng)的,所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù);

步驟s2:所述數(shù)據(jù)處理單元將獲取到的所述第一長度的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中,并修改所述寫命令,將所述寫命令中的所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址修改為所述第一存儲空間的地址,將所述需要存儲的數(shù)據(jù)的長度修改為所述第一長度;

步驟s3:所述數(shù)據(jù)處理單元將修改后的所述寫命令發(fā)送給所述存儲單元;

重復(fù)執(zhí)行所述步驟s1-s3,直到將所述需要存儲的數(shù)據(jù)遷移到所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址所對應(yīng)的存儲空間中。

可選的,所述步驟s1中,所述數(shù)據(jù)處理單元通過遠(yuǎn)程直接數(shù)據(jù)存取(英文:rdma,remotedirectmemoryaccess)的方式,從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù)。

可選的,所述步驟s3中,所述數(shù)據(jù)處理單元可以將修改后的所述寫命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述寫命令中所述需要存儲的數(shù)據(jù)在所述存儲單元中的目的地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的寫命令,通過rdma或直接內(nèi)存存取(英文:dma,directmemoryaccess)的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應(yīng)的存儲空間中。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為讀命令,所述需要傳輸?shù)臄?shù)據(jù)為需要讀取數(shù)據(jù),所述讀命令包括所述需要讀取的數(shù)據(jù)在所述存儲單元的源地址,所述需要讀取的數(shù)據(jù)的長度和所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址;

相應(yīng)的,所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元修改所述讀命令,將所述讀命令中的所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址修改為所述第一存儲空間的地址,將所述需要讀取的數(shù)據(jù)的長度修改為所述第一長度;并將修改后的讀命令發(fā)送給存儲單元;

步驟s2:所述數(shù)據(jù)處理單元將所述第一長度的數(shù)據(jù)緩存在所述第一存儲空間中,并將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備;

重復(fù)執(zhí)行所述步驟s1-s2,直到將所述需要讀取的數(shù)據(jù)遷移到所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址所對應(yīng)的存儲空間中。

可選的,上述步驟s1中,所述數(shù)據(jù)處理單元可以將修改后的所述讀命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述讀命令中所述需要讀取的數(shù)據(jù)在所述存儲單元中的源地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的讀命令,通過rdma或dma的方式,將所述需要讀取的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中。

可選的,所述步驟s2中,所述數(shù)據(jù)處理單元可以通過rdma的方式,將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元與所述存儲單元之間通過基于快捷外圍部件互連標(biāo)準(zhǔn)pcie的nvme,nvmeoverpcie,架構(gòu)實(shí)現(xiàn)連接。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元中包括控制器,所述控制器用于控制所述緩存單元中緩存的數(shù)據(jù)與所述存儲單元之間的傳輸,所述控制器是nvmeoverfabric架構(gòu)中的物理控制器或非易矢性存儲控制器。

另一方面,本發(fā)明實(shí)施例提供了一種存儲設(shè)備,所述存儲設(shè)備是nvmeoverfabric架構(gòu)中的存儲設(shè)備,所述存儲設(shè)備與nvmeoverfabric架構(gòu)中的控制設(shè)備之間進(jìn)行數(shù)據(jù)傳輸,所述存儲設(shè)備包括數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元中,所述數(shù)據(jù)處理單元用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中,所述數(shù)據(jù)處理單元包括處理器,所述處理器用于執(zhí)行下述步驟:

接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述存儲設(shè)備,所述數(shù)據(jù)處理單元根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,并依次將所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)遷移到目的地址所對應(yīng)的存儲空間中。解決了因數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大,緩存單元無法緩存需要傳輸?shù)臄?shù)據(jù)而導(dǎo)致的數(shù)據(jù)讀寫命令無法被執(zhí)行的問題。

可選的,所述nvmeoverfabric架構(gòu)中,所述控制設(shè)備與所述存儲設(shè)備之間可以通過iwarp、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)實(shí)現(xiàn)連接和通信。

所述存儲設(shè)備中的數(shù)據(jù)處理單元可以是網(wǎng)卡、獨(dú)立的fpga芯片或所述存儲設(shè)備中的cpu來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存中的至少兩個(gè)組成的緩存資源池來實(shí)現(xiàn)來實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小是固定的,所述第一長度也是固定的。這樣,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù)大小或長度是固定的。這樣,數(shù)據(jù)處理單元每次按照固定的大小分配所述第一存儲空間,數(shù)據(jù)處理單元的實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小也可以是變化的,所述第一長度也隨之相應(yīng)變化。即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的大小不同,相應(yīng)的,所述第一長度的數(shù)據(jù)大小或長度至少有兩次是不同的。這樣,數(shù)據(jù)處理單元分配大小不同的所述第一存儲空間,能夠靈活地調(diào)整所述第一存儲空間的大小,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的位置是固定的,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù),被緩存在所述緩存單元固定位置的存儲空間中。這樣,數(shù)據(jù)處理單元每次在固定的所述第一存儲空間緩存需要傳輸?shù)臄?shù)據(jù),實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的位置是變化的,即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的位置不同。這樣,數(shù)據(jù)處理單元能夠能夠靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的大小和位置都是變化的,這樣能夠更進(jìn)一步靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述數(shù)據(jù)處理單元可以在分配所述第一存儲空間之間,判斷所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小是否大于或等于預(yù)設(shè)的閾值,在所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小,大于或等于預(yù)設(shè)的閾值時(shí),分配所述第一存儲空間。這樣,能夠避免數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)不大時(shí),不用分多次傳輸需要傳輸?shù)臄?shù)據(jù),提高數(shù)據(jù)傳輸?shù)男?,并能夠?jié)省所述數(shù)據(jù)處理單元和所述緩存單元因多次緩存需要傳輸?shù)臄?shù)據(jù)所帶來的資源的消耗。

在一個(gè)可能的設(shè)計(jì)中,所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間;或,

所述第一存儲空間為預(yù)設(shè)的閾值,當(dāng)所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元從所述緩存單元的可用存儲空間中分配所述第一存儲空間;當(dāng)所述第一存儲空間大于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元在等待預(yù)設(shè)時(shí)間后再判斷所述第一存儲空間是否小于或等于所述緩存單元的可用存儲空間,并在所述第一存儲空間小于所述緩存單元的可用存儲空間時(shí),從所述緩存單元的可用存儲空間中分配所述第一存儲空間。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令包括所述需要傳輸?shù)臄?shù)據(jù)的地址信息和所述需要傳輸?shù)臄?shù)據(jù)的長度。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為寫命令,所述需要傳輸?shù)臄?shù)據(jù)為需要存儲的數(shù)據(jù),所述寫命令包括所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址,所述需要存儲的數(shù)據(jù)的長度和所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址;

相應(yīng)的,所述依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù);

步驟s2:所述數(shù)據(jù)處理單元將獲取到的所述第一長度的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中,并修改所述寫命令,將所述寫命令中的所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址修改為所述第一存儲空間的地址,將所述需要存儲的數(shù)據(jù)的長度修改為所述第一長度;

步驟s3:所述數(shù)據(jù)處理單元將修改后的所述寫命令發(fā)送給所述存儲單元;

重復(fù)執(zhí)行所述步驟s1-s3,直到將所述需要存儲的數(shù)據(jù)遷移到所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址所對應(yīng)的存儲空間中。

可選的,所述步驟s1中,所述數(shù)據(jù)處理單元通過rdma的方式,從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù)。

可選的,所述步驟s3中,所述數(shù)據(jù)處理單元可以將修改后的所述寫命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述寫命令中所述需要存儲的數(shù)據(jù)在所述存儲單元中的目的地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的寫命令,通過rdma或dma的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應(yīng)的存儲空間中。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為讀命令,所述需要傳輸?shù)臄?shù)據(jù)為需要讀取數(shù)據(jù),所述讀命令包括所述需要讀取的數(shù)據(jù)在所述存儲單元的源地址,所述需要讀取的數(shù)據(jù)的長度和所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址;

相應(yīng)的,所述依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元修改所述讀命令,將所述讀命令中的所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址修改為所述第一存儲空間的地址,將所述需要讀取的數(shù)據(jù)的長度修改為所述第一長度;并將修改后的讀命令發(fā)送給存儲單元;

步驟s2:所述數(shù)據(jù)處理單元將所述第一長度的數(shù)據(jù)緩存在所述第一存儲空間中,并將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備;

重復(fù)執(zhí)行所述步驟s1-s2,直到將所述需要讀取的數(shù)據(jù)遷移到所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址所對應(yīng)的存儲空間中。

可選的,上述步驟s1中,所述數(shù)據(jù)處理單元可以將修改后的所述讀命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述讀命令中所述需要讀取的數(shù)據(jù)在所述存儲單元中的源地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的讀命令,通過rdma或dma的方式,將所述需要讀取的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中。

可選的,所述步驟s2中,所述數(shù)據(jù)處理單元可以通過rdma的方式,將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元與所述存儲單元之間通過基于快捷外圍部件互連標(biāo)準(zhǔn)pcie的nvme,nvmeoverpcie,架構(gòu)實(shí)現(xiàn)連接。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元中包括控制器,所述控制器用于控制所述緩存單元中緩存的數(shù)據(jù)與所述存儲單元之間的傳輸,所述控制器是nvmeoverfabric架構(gòu)中的物理控制器或非易矢性存儲控制器。

再一方面,本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng),所述系統(tǒng)包括nvmeoverfabric架構(gòu)中的控制設(shè)備和存儲設(shè)備,所述存儲設(shè)備包括數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元中,所述數(shù)據(jù)處理單元用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中,

所述控制設(shè)備,用于向所述存儲設(shè)備發(fā)送數(shù)據(jù)讀寫命令;

所述數(shù)據(jù)處理單元,用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

所述數(shù)據(jù)處理單元,還用于依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述系統(tǒng),所述數(shù)據(jù)處理單元根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,并依次將所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)遷移到目的地址所對應(yīng)的存儲空間中。解決了因數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大,緩存單元無法緩存需要傳輸?shù)臄?shù)據(jù)而導(dǎo)致的數(shù)據(jù)讀寫命令無法被執(zhí)行的問題。

可選的,所述nvmeoverfabric架構(gòu)中,所述控制設(shè)備與所述存儲設(shè)備之間可以通過iwarp、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)實(shí)現(xiàn)連接和通信。

所述存儲設(shè)備中的數(shù)據(jù)處理單元可以是網(wǎng)卡、獨(dú)立的fpga芯片或所述存儲設(shè)備中的cpu來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存來實(shí)現(xiàn)。所述存儲設(shè)備中的緩存單元也可以由網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、存儲設(shè)備上的緩存單元或所述存儲設(shè)備中的cpu的內(nèi)存中的至少兩個(gè)組成的緩存資源池來實(shí)現(xiàn)來實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小是固定的,所述第一長度也是固定的。這樣,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù)大小或長度是固定的。這樣,數(shù)據(jù)處理單元每次按照固定的大小分配所述第一存儲空間,數(shù)據(jù)處理單元的實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的大小也可以是變化的,所述第一長度也隨之相應(yīng)變化。即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的大小不同,相應(yīng)的,所述第一長度的數(shù)據(jù)大小或長度至少有兩次是不同的。這樣,數(shù)據(jù)處理單元分配大小不同的所述第一存儲空間,能夠靈活地調(diào)整所述第一存儲空間的大小,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的位置是固定的,所述數(shù)據(jù)處理單元每次獲取的所述第一長度的數(shù)據(jù),被緩存在所述緩存單元固定位置的存儲空間中。這樣,數(shù)據(jù)處理單元每次在固定的所述第一存儲空間緩存需要傳輸?shù)臄?shù)據(jù),實(shí)現(xiàn)方式簡單,容易實(shí)現(xiàn)。

可選的,所述第一存儲空間的位置是變化的,即所述數(shù)據(jù)處理單元至少有兩次分配的所述第一存儲空間的位置不同。這樣,數(shù)據(jù)處理單元能夠能夠靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述第一存儲空間的大小和位置都是變化的,這樣能夠更進(jìn)一步靈活地分配所述第一存儲空間,使得所述緩存單元能夠有更靈活的可用存儲空間來緩存各種數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

可選的,所述數(shù)據(jù)處理單元可以在分配所述第一存儲空間之間,判斷所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小是否大于或等于預(yù)設(shè)的閾值,在所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的長度或大小,大于或等于預(yù)設(shè)的閾值時(shí),分配所述第一存儲空間。這樣,能夠避免數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)不大時(shí),不用分多次傳輸需要傳輸?shù)臄?shù)據(jù),提高數(shù)據(jù)傳輸?shù)男?,并能夠?jié)省所述數(shù)據(jù)處理單元和所述緩存單元因多次緩存需要傳輸?shù)臄?shù)據(jù)所帶來的資源的消耗。

在一個(gè)可能的設(shè)計(jì)中,所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間;或,

所述第一存儲空間為預(yù)設(shè)的閾值,當(dāng)所述第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元從所述緩存單元的可用存儲空間中分配所述第一存儲空間;當(dāng)所述第一存儲空間大于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間時(shí),所述數(shù)據(jù)處理單元在等待預(yù)設(shè)時(shí)間后再判斷所述第一存儲空間是否小于或等于所述緩存單元的可用存儲空間,并在所述第一存儲空間小于所述緩存單元的可用存儲空間時(shí),從所述緩存單元的可用存儲空間中分配所述第一存儲空間。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令包括所述需要傳輸?shù)臄?shù)據(jù)的地址信息和所述需要傳輸?shù)臄?shù)據(jù)的長度。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為寫命令,所述需要傳輸?shù)臄?shù)據(jù)為需要存儲的數(shù)據(jù),所述寫命令包括所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址,所述需要存儲的數(shù)據(jù)的長度和所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址;

相應(yīng)的,所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù);

步驟s2:所述數(shù)據(jù)處理單元將獲取到的所述第一長度的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中,并修改所述寫命令,將所述寫命令中的所述需要存儲的數(shù)據(jù)在所述控制設(shè)備的源地址修改為所述第一存儲空間的地址,將所述需要存儲的數(shù)據(jù)的長度修改為所述第一長度;

步驟s3:所述數(shù)據(jù)處理單元將修改后的所述寫命令發(fā)送給所述存儲單元;

重復(fù)執(zhí)行所述步驟s1-s3,直到將所述需要存儲的數(shù)據(jù)遷移到所述需要存儲的數(shù)據(jù)在所述存儲單元的目的地址所對應(yīng)的存儲空間中。

可選的,所述步驟s1中,所述數(shù)據(jù)處理單元通過rdma的方式,從所述控制設(shè)備處獲取所述需要存儲的數(shù)據(jù)中所述第一長度的數(shù)據(jù)。

可選的,所述步驟s3中,所述數(shù)據(jù)處理單元可以將修改后的所述寫命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述寫命令中所述需要存儲的數(shù)據(jù)在所述存儲單元中的目的地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的寫命令,通過rdma或dma的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應(yīng)的存儲空間中。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)讀寫命令為讀命令,所述需要傳輸?shù)臄?shù)據(jù)為需要讀取數(shù)據(jù),所述讀命令包括所述需要讀取的數(shù)據(jù)在所述存儲單元的源地址,所述需要讀取的數(shù)據(jù)的長度和所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址;

相應(yīng)的,所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中包括:

步驟s1:所述數(shù)據(jù)處理單元修改所述讀命令,將所述讀命令中的所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址修改為所述第一存儲空間的地址,將所述需要讀取的數(shù)據(jù)的長度修改為所述第一長度;并將修改后的讀命令發(fā)送給存儲單元;

步驟s2:所述數(shù)據(jù)處理單元將所述第一長度的數(shù)據(jù)緩存在所述第一存儲空間中,并將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備;

重復(fù)執(zhí)行所述步驟s1-s2,直到將所述需要讀取的數(shù)據(jù)遷移到所述需要讀取的數(shù)據(jù)在所述控制設(shè)備的目的地址所對應(yīng)的存儲空間中。

可選的,上述步驟s1中,所述數(shù)據(jù)處理單元可以將修改后的所述讀命令發(fā)送給所述存儲單元中的目的硬盤的控制器。其中,所述目的硬盤是所述數(shù)據(jù)處理設(shè)備根據(jù)所述讀命令中所述需要讀取的數(shù)據(jù)在所述存儲單元中的源地址確定的。

可選的,所述目的硬盤的控制器可以根據(jù)接收到的修改后的讀命令,通過rdma或dma的方式,將所述需要讀取的數(shù)據(jù)緩存在所述緩存單元的所述第一存儲空間中。

可選的,所述步驟s2中,所述數(shù)據(jù)處理單元可以通過rdma的方式,將所述第一存儲空間中的數(shù)據(jù)發(fā)送給所述控制設(shè)備。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元與所述存儲單元之間通過基于快捷外圍部件互連標(biāo)準(zhǔn)pcie的nvme,nvmeoverpcie,架構(gòu)實(shí)現(xiàn)連接。

在一個(gè)可能的設(shè)計(jì)中,所述數(shù)據(jù)處理單元中包括控制器,所述控制器用于控制所述緩存單元中緩存的數(shù)據(jù)與所述存儲單元之間的傳輸,所述控制器是nvmeoverfabric架構(gòu)中的物理控制器或非易矢性存儲控制器。

附圖說明

為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為現(xiàn)有技術(shù)中nvmeoverfabric一種實(shí)現(xiàn)方式架構(gòu)示意圖;

圖2為本發(fā)明實(shí)施例中主機(jī)host與一個(gè)target連接并實(shí)現(xiàn)數(shù)據(jù)傳遞的實(shí)現(xiàn)方式的結(jié)構(gòu)示意圖;

圖3本發(fā)明實(shí)施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法一種實(shí)現(xiàn)方式的流程示意圖;

圖4本發(fā)明實(shí)施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法另一種實(shí)現(xiàn)方式的流程示意圖;

圖5為本發(fā)明實(shí)施例一種nvmeoverfabric架構(gòu)中控制設(shè)備與存儲設(shè)備之間數(shù)據(jù)讀寫命令的控制方法的流程示意圖;

圖6為本發(fā)明實(shí)施例提供的一種存儲設(shè)備600的結(jié)構(gòu)示意圖;

圖7為本發(fā)明實(shí)施例一種實(shí)現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng)的結(jié)構(gòu)示意圖。

具體實(shí)施方式

下面結(jié)合附圖,對本發(fā)明的實(shí)施例進(jìn)行描述。

另外,本發(fā)明實(shí)施例中的術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括一個(gè)或者更多個(gè)該特征。

參考圖1,圖1為現(xiàn)有技術(shù)中nvmeoverfabric一種實(shí)現(xiàn)方式架構(gòu)示意圖。圖1中包括host100、target200和target300。其中,host100是主機(jī),主要負(fù)責(zé)發(fā)起數(shù)據(jù)的讀寫,例如發(fā)送數(shù)據(jù)讀寫命令等。target200和target210是目標(biāo)存儲設(shè)備,在nvme協(xié)議中也稱為nvmsubsystem,主要負(fù)責(zé)接收并且執(zhí)行主機(jī)host100發(fā)送的數(shù)據(jù)讀寫命令。其中,主機(jī)host100的具體形態(tài)包括但不限于物理服務(wù)器或物理服務(wù)器上的虛擬機(jī),所述物理服務(wù)器可以是包括cpu、內(nèi)存和網(wǎng)卡等組成部件的計(jì)算機(jī)設(shè)備等。

target200可以是一個(gè)獨(dú)立的物理硬盤系統(tǒng),如圖1所示,target200包括網(wǎng)卡201和一個(gè)以上的硬盤,網(wǎng)卡201和一個(gè)以上的硬盤分別連接。需要說明的是,圖1中以三個(gè)硬盤為例進(jìn)行說明,在具體實(shí)現(xiàn)時(shí),target200可以包括一個(gè)以上的硬盤。target200中的硬盤可以是固態(tài)磁盤(英文:ssd,solidstatedisk)或硬盤驅(qū)動器(英文:hdd,harddiskdriver)等具備存儲功能的存儲介質(zhì)。其中網(wǎng)卡201具有網(wǎng)絡(luò)接口卡的功能,可以是nvmeoverfabric中的遠(yuǎn)端網(wǎng)絡(luò)接口卡(英文:rnic,remotenetworkinterfacecard),網(wǎng)卡201通過fabric與host100進(jìn)行與數(shù)據(jù)讀寫命令或數(shù)據(jù)傳輸相關(guān)的通信。

target210的結(jié)構(gòu)與target200類似,包括網(wǎng)卡211和一個(gè)以上的硬盤。target210中組成部件(網(wǎng)卡211和硬盤等)的功能和實(shí)現(xiàn)方式,與target200中的組成部件(網(wǎng)卡201和硬盤)的功能和實(shí)現(xiàn)方式類同。在具體實(shí)現(xiàn)時(shí),還可以有多個(gè)target,圖1只是示出兩個(gè)target(target200和target210)為例進(jìn)行說明。

下面以圖1中host100需要向target200存儲數(shù)據(jù)為例,對host100發(fā)送數(shù)據(jù)、target接收數(shù)據(jù)的過程進(jìn)行描述,包括:

步驟s100:當(dāng)host100需要存儲數(shù)據(jù)到target200時(shí),host100通過writecommand發(fā)送命令,該writecommand通常會攜帶需要存儲的數(shù)據(jù)。如果需要存儲的數(shù)據(jù)量較大,host100無法通過writecommand承載并發(fā)送時(shí)(例如需要存儲的數(shù)據(jù)超過writecommand能夠承載的最大數(shù)據(jù)量),host100會在writecommand中攜帶sgl(scattergatherlist)。所述sgl中包括一個(gè)字段,例如可以是一個(gè)entry,該字段包括需要存儲的數(shù)據(jù)在host100中的源地址、需要存儲的數(shù)據(jù)的長度、以及需要存儲的數(shù)據(jù)在target200中的目的地址等信息。需要說明的是,所述sgl也可以包括多個(gè)字段,例如多個(gè)entry,每個(gè)entry都包含需要存儲的數(shù)據(jù)在host100中的源地址、需要存儲的數(shù)據(jù)的長度、以及需要存儲的數(shù)據(jù)在target200中的目的地址等信息。當(dāng)所述需要存儲的數(shù)據(jù)包括多個(gè)地址段,即所述需要存儲的數(shù)據(jù)在host100中是不連續(xù),存在于多個(gè)地址段中時(shí),就需要用多個(gè)entry來記錄多個(gè)地址段中的數(shù)據(jù)。本發(fā)明實(shí)施例以sgl中包括一個(gè)entry為例進(jìn)行說明。

下面的步驟以host100需要存儲的數(shù)據(jù)超過writecommand自身能夠攜帶的數(shù)據(jù)量,需要在writecommand中通過sgl通知target200需要存儲的數(shù)據(jù)的地址信息和長度為例進(jìn)行說明。

步驟s101:host100通過網(wǎng)卡103發(fā)送writecommand到target200;所述writecommand中包括sgl;

可選的,所述需要存儲的數(shù)據(jù)可以是一個(gè)以上的數(shù)據(jù)塊,由于數(shù)據(jù)塊的長度是固定的,所述待寫數(shù)據(jù)的長度可以通過數(shù)據(jù)塊的個(gè)數(shù)來記錄。

步驟s102:target200中的網(wǎng)卡201接收到所述writecommand之后,獲取所述writecommand中攜帶的需要存儲的數(shù)據(jù)的長度,并在網(wǎng)卡201的網(wǎng)卡內(nèi)存(圖1中未示出)中分配相應(yīng)的存儲空間,即在網(wǎng)卡201的網(wǎng)卡內(nèi)存中分配與所述writecommand中攜帶的需要存儲的數(shù)據(jù)的長度相同的存儲空間,用于緩存host100發(fā)送的需要存儲的數(shù)據(jù)。

步驟s103:網(wǎng)卡201分配好緩存數(shù)據(jù)所需的存儲空間后,通過rdma命令通知網(wǎng)卡103通過rdma方式傳輸需要存儲的數(shù)據(jù)。即通知網(wǎng)卡103根據(jù)所述需要存儲的數(shù)據(jù)在host100的源地址,讀取所述需要存儲的數(shù)據(jù),并接收網(wǎng)卡103通過網(wǎng)絡(luò)傳輸?shù)乃鲂枰鎯Φ臄?shù)據(jù),將接收到的所述需要存儲的數(shù)據(jù)緩存在網(wǎng)卡內(nèi)存的存儲空間中。

緩存在網(wǎng)卡內(nèi)存的所述需要存儲的數(shù)據(jù)會被遷移到target200中的硬盤中。

上述步驟s102中,可能會出現(xiàn)網(wǎng)卡內(nèi)存的存儲空間不足的情況。例如:網(wǎng)卡內(nèi)存的存儲空間的大小為1000kbytes,但是host100發(fā)送target200的writecommand所要傳輸?shù)臄?shù)據(jù)的大小為5000kbytes。即該writecommand所要傳輸?shù)臄?shù)據(jù)占用的存儲空間大于網(wǎng)卡內(nèi)存的最大存儲空間。此時(shí)網(wǎng)卡201會因無足夠的存儲空間來緩存所述需要存儲的數(shù)據(jù),導(dǎo)致執(zhí)行所述writecommand失敗?;蛘?,網(wǎng)卡內(nèi)存的存儲空間的大小為1000kbytes,但是host100發(fā)送target200的writecommand所要傳輸?shù)臄?shù)據(jù)的大小為800kbytes。即該writecommand所要傳輸?shù)臄?shù)據(jù)占用的存儲空間需要占用網(wǎng)卡內(nèi)存存儲空間的80%,網(wǎng)卡內(nèi)存的存儲空間因緩存其它數(shù)據(jù)而無法提供80%的存儲空間來緩存該writecommand所要傳輸?shù)臄?shù)據(jù),也會導(dǎo)致執(zhí)行所述writecommand失敗。

同樣的,當(dāng)host100向target200發(fā)送讀取數(shù)據(jù)請求時(shí),host100會發(fā)送readcommand到網(wǎng)卡201。如果所述需要readcommand需要傳輸?shù)臄?shù)據(jù)占用的存儲空間大于網(wǎng)卡內(nèi)存的存儲空間,也會導(dǎo)致所述網(wǎng)卡201執(zhí)行所述readcommand失敗。如果通過擴(kuò)大網(wǎng)卡內(nèi)存的存儲空間的方式,會造成成本的提升。如果通過外掛普通存儲設(shè)備作為target的網(wǎng)卡內(nèi)存的存儲空間,則會因?yàn)榇鎯r(shí)延的增大造成性能的下降。

為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供一種nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法、存儲設(shè)備和系統(tǒng)。下面實(shí)施例的描述,以主機(jī)host與一個(gè)target連接并實(shí)現(xiàn)數(shù)據(jù)傳遞為例進(jìn)行說明。對于host與多個(gè)target連接并實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)那闆r,可以參照host與一個(gè)target連接的情況來實(shí)現(xiàn),不再贅述。

需要說明的是,作為存儲設(shè)備的target,在具體實(shí)現(xiàn)時(shí),可以由網(wǎng)卡、獨(dú)立的現(xiàn)場可編程門陣列(英文:fpga,fieldprogrammablegatearray)芯片或target中的中央處理器(英文:cpu,centralprocessingunit)來接收作為控制設(shè)備的host發(fā)送的數(shù)據(jù)讀寫命令。本發(fā)明實(shí)施例將存儲設(shè)備中接收控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令的網(wǎng)卡、fpga芯片或cpu等,統(tǒng)稱為數(shù)據(jù)處理單元。可以理解,本發(fā)明實(shí)施例中的數(shù)據(jù)處理單元,還可以是與網(wǎng)卡、fpga芯片或cpu具有相同功能的單元或?qū)嶓w,只要能夠接收作為控制設(shè)備的host發(fā)送的數(shù)據(jù)讀寫命令并處理,都可以作為本發(fā)明實(shí)施例的存儲設(shè)備中的數(shù)據(jù)處理單元。

當(dāng)網(wǎng)卡作為存儲設(shè)備中的數(shù)據(jù)處理單元時(shí),網(wǎng)卡內(nèi)存用于緩存網(wǎng)卡接收到的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。當(dāng)fpga作為存儲設(shè)備中的數(shù)據(jù)處理單元時(shí),fpga中的存儲單元用于緩存fpga接收到的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。當(dāng)存儲設(shè)備中的cpu作為存儲設(shè)備中的數(shù)據(jù)處理單元時(shí),cpu的內(nèi)存用于緩存cpu接收到的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù),即通過共享cpu的內(nèi)存實(shí)現(xiàn)數(shù)據(jù)的緩存。另外,在target上的緩存單元,例如以ddr作為緩存的緩存設(shè)備,也可以作為網(wǎng)卡、fpga或cpu的緩存。本發(fā)明實(shí)施例中將上述網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、cpu的內(nèi)存或target上的緩存單元,統(tǒng)稱為緩存單元??梢岳斫猓景l(fā)明實(shí)施例中的緩存單元,還可以是與網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元或cpu的內(nèi)存具有相同功能的其它存儲介質(zhì),只要能夠用于緩存作為控制設(shè)備的host發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù),都可以作為本發(fā)明實(shí)施例的存儲設(shè)備中的緩存單元。并且,上述網(wǎng)卡內(nèi)存、fpga芯片中的存儲單元、cpu的內(nèi)存或target上的緩存單元也可以組成一個(gè)緩存資源池,在具體實(shí)現(xiàn)時(shí),可以由網(wǎng)卡、fpga芯片或cpu中的一個(gè)或多個(gè)接收host發(fā)送的數(shù)據(jù)讀寫命令,并將需要傳輸?shù)臄?shù)據(jù)緩存在該緩存資源池中。

下面以網(wǎng)卡作為存儲設(shè)備中的數(shù)據(jù)處理單元,網(wǎng)卡內(nèi)存作為存儲設(shè)備中的緩存單元,target作為存儲設(shè)備,host作為控制設(shè)備,對本發(fā)明實(shí)施例進(jìn)行說明??梢岳斫?,對于fpga和cpu作為數(shù)據(jù)處理單元的實(shí)現(xiàn)方式,可以參考網(wǎng)卡作為數(shù)據(jù)處理單元的實(shí)現(xiàn)方式來實(shí)現(xiàn)。對于fpga芯片中的存儲單元、target上的緩存單元或cpu的內(nèi)存作為緩存單元的實(shí)現(xiàn)方式或其組成的資源池的實(shí)現(xiàn)方式,可以參考網(wǎng)卡內(nèi)存作為緩存單元的實(shí)現(xiàn)方式來實(shí)現(xiàn),不再贅述。

圖2為本發(fā)明實(shí)施例中主機(jī)host與一個(gè)target連接并實(shí)現(xiàn)數(shù)據(jù)傳遞的實(shí)現(xiàn)方式的結(jié)構(gòu)示意圖。如圖2所示,host300與target400通過fabric連接。具體的,host300與target400之間可以通過iwrap、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)實(shí)現(xiàn)連接和通信。

其中,host300包括cpu301、內(nèi)存302和網(wǎng)卡303等硬件組成,target400包括網(wǎng)卡401和一個(gè)以上的硬盤。host300是主機(jī),主要負(fù)責(zé)發(fā)起數(shù)據(jù)的讀寫,例如發(fā)送數(shù)據(jù)的讀寫命令等。主機(jī)host300的具體形態(tài)包括但不限于物理服務(wù)器或物理服務(wù)器上的虛擬機(jī),所述物理服務(wù)器可以是包括cpu、內(nèi)存和網(wǎng)卡等組成部件的計(jì)算機(jī)設(shè)備等。需要說明的是,在主機(jī)host300為物理服務(wù)器上的虛擬機(jī)的情況下,以上所述的host300包括cpu301、內(nèi)存302和網(wǎng)卡303等硬件組成指的是物理服務(wù)器分配給該虛擬機(jī)使用的cpu、內(nèi)存和網(wǎng)卡等資源。同理,在target400中的網(wǎng)卡401也可以為虛擬網(wǎng)卡,該虛擬網(wǎng)卡為target400中的物理網(wǎng)卡分配給該虛擬網(wǎng)卡使用的網(wǎng)卡資源。

target400是目標(biāo)存儲設(shè)備,在nvmeoverfabric架構(gòu)中也稱為nvmsubsystem,主要負(fù)責(zé)接收并且執(zhí)行主機(jī)host300發(fā)送的讀寫命令。target400中的硬盤可以是ssd或hdd等具有存儲功能的介質(zhì),圖2中以三個(gè)硬盤為例進(jìn)行說明。網(wǎng)卡401包括網(wǎng)卡處理器4011和網(wǎng)卡內(nèi)存4012。網(wǎng)卡401具有網(wǎng)絡(luò)接口卡的功能,可以是nvmeoverfabric中的rnic,網(wǎng)卡401通過nvmeoverfabric架構(gòu)中的網(wǎng)絡(luò)與host300進(jìn)行與數(shù)據(jù)讀寫命令或數(shù)據(jù)傳輸相關(guān)的通信。

圖2以網(wǎng)卡內(nèi)存4012位于網(wǎng)卡401中,即網(wǎng)卡401中包括網(wǎng)卡內(nèi)存4012為例進(jìn)行說明。在具體實(shí)現(xiàn)時(shí),網(wǎng)卡內(nèi)存4012也可以位于網(wǎng)卡401的外部,即target400中的網(wǎng)卡內(nèi)存可以是獨(dú)立于網(wǎng)卡401的存儲介質(zhì)。本發(fā)明實(shí)施例中,獨(dú)立于網(wǎng)卡401的存儲介質(zhì),可以是雙倍數(shù)據(jù)速率(英文:ddr,doubledatarate)等存儲介質(zhì)。作為另一種可選的實(shí)現(xiàn)方式,網(wǎng)卡401的網(wǎng)卡內(nèi)存4012也可以是target400中多個(gè)網(wǎng)卡的內(nèi)存資源共同構(gòu)成的一個(gè)內(nèi)存資源池。本發(fā)明實(shí)施例不限定網(wǎng)卡內(nèi)存的具體呈現(xiàn)形式。

為避免現(xiàn)有技術(shù)中因網(wǎng)卡401的網(wǎng)卡內(nèi)存的存儲空間不足導(dǎo)致的數(shù)據(jù)讀寫命令無法被執(zhí)行的問題,下面分別以host300向target400發(fā)送寫數(shù)據(jù)命令和host300向target400發(fā)送讀數(shù)據(jù)命令為例,對本發(fā)明實(shí)施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法進(jìn)行詳細(xì)說明。

當(dāng)host300向target400發(fā)送寫數(shù)據(jù)命令時(shí),本發(fā)明實(shí)施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法如圖3所示,包括:

步驟200:網(wǎng)卡401接收host300發(fā)送的writecommand,所述writecommand中攜帶sgl,所述sgl中包括所述需要存儲的數(shù)據(jù)在host300中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息;

具體的,當(dāng)host300需要向target400寫入需要存儲的數(shù)據(jù)時(shí),host300向target400發(fā)送writecommand。即host300通過iwrap、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)向target400發(fā)送所述writecommand。

步驟202:網(wǎng)卡401判斷所述需要存儲的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值;

所述預(yù)設(shè)閾值根據(jù)具體的業(yè)務(wù)實(shí)現(xiàn)場景會有不同的設(shè)置。例如當(dāng)網(wǎng)卡內(nèi)存4012的總的存儲空間為1gb時(shí),所述預(yù)設(shè)閾值為200mb;或當(dāng)網(wǎng)卡內(nèi)存4012的總的存儲空間為500mb時(shí),所述預(yù)設(shè)閾值為150mb。在具體實(shí)現(xiàn)時(shí),可以根據(jù)網(wǎng)卡內(nèi)存4012的總的存儲空間以及對不同業(yè)務(wù)的需要設(shè)置不同的預(yù)設(shè)閾值。

步驟204:當(dāng)所述需要存儲的數(shù)據(jù)的長度達(dá)到預(yù)設(shè)閾值時(shí),所述網(wǎng)卡401從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述網(wǎng)卡內(nèi)存4012的存儲空間,且所述第一長度小于所述需要存儲數(shù)據(jù)的長度;

其中,所述第一存儲空間可以是小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間。例如,網(wǎng)卡401接收到所述writecommand時(shí),網(wǎng)卡4012的可用存儲空間是100kb,則所述第一存儲空間的大小可以是80kb或100kb;或者網(wǎng)卡401接收到所述writecommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲100個(gè)數(shù)據(jù)塊,則所述第一存儲空間的大小可以是80個(gè)數(shù)據(jù)塊或100個(gè)數(shù)據(jù)塊。

所述第一存儲空間的大小也可以為預(yù)設(shè)的閾值。例如,預(yù)先設(shè)定所述第一存儲空間的閾值為100個(gè)數(shù)據(jù)塊。當(dāng)網(wǎng)卡401接收到的所述writecommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲120個(gè)數(shù)據(jù)塊,所述writecommand需要存儲的數(shù)據(jù)為500個(gè)數(shù)據(jù)塊,則所述網(wǎng)卡分配100個(gè)數(shù)據(jù)塊的存儲空間為第一存儲空間。當(dāng)網(wǎng)卡401接收到所述writecommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲80個(gè)數(shù)據(jù)塊,則網(wǎng)卡等待預(yù)設(shè)的時(shí)間,例如3分鐘,在該預(yù)設(shè)時(shí)間后再次判斷網(wǎng)卡4012的可用存儲空間是否大于或等于所述預(yù)設(shè)的閾值。如果此時(shí)網(wǎng)卡4012的可用存儲空間大于或等于所述預(yù)設(shè)的閾值,例如網(wǎng)卡4012的可用存儲空間為150個(gè)數(shù)據(jù)塊,則所述網(wǎng)卡分配100個(gè)數(shù)據(jù)塊的存儲空間為第一存儲空間。如果此時(shí)網(wǎng)卡4012的可用存儲空間小于所述預(yù)設(shè)的閾值,例如網(wǎng)卡4012的可用存儲空間為90個(gè)數(shù)據(jù)塊,則繼續(xù)等待預(yù)設(shè)時(shí)間后再判斷網(wǎng)卡4012的可用存儲空間是否大于或等于所述預(yù)設(shè)的閾值。

在具體實(shí)現(xiàn)時(shí),可以在網(wǎng)卡401中的一個(gè)寄存器中設(shè)置所述第一存儲空間的大小。所述第一存儲空間的大小可以用可存儲數(shù)據(jù)的長度(例如20mb)來表示,也可以用可存儲的數(shù)據(jù)塊的個(gè)數(shù)來(例如20個(gè)數(shù)據(jù)塊)表示。當(dāng)所述第一存儲空間的大小用可存儲的數(shù)據(jù)的長度表示時(shí),所述第一長度是可存儲數(shù)據(jù)的長度的值,例如20mb。當(dāng)所述第一存儲空間的大小用可存儲的數(shù)據(jù)塊的個(gè)數(shù)來表示時(shí),所述第一長度是可存儲數(shù)據(jù)塊的值,例如20個(gè)數(shù)據(jù)塊。

當(dāng)然,在具體實(shí)現(xiàn)時(shí),網(wǎng)卡401也可以不判斷所述需要存儲的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值,即上述步驟202是一個(gè)可選的實(shí)現(xiàn)步驟。當(dāng)沒有執(zhí)行判斷所述需要存儲的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值的步驟時(shí),所述網(wǎng)卡401可以直接從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配第一存儲空間。這時(shí)網(wǎng)卡401分配的第一存儲空間,既可以是第一存儲空間小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間,也可以預(yù)設(shè)的閾值大小的第一存儲空間。

可以理解,所述網(wǎng)卡401從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配的第一存儲空間,可以是一個(gè)位置固定的存儲空間,也可以是位置變動的存儲空間。

當(dāng)所述第一存儲空間的位置固定時(shí),是從網(wǎng)卡內(nèi)存4012的可用存儲空間中劃分出的一段地址空間,該段地址空間在所述writecommand需要存儲的數(shù)據(jù)被傳輸?shù)倪^程中不被用于緩存其它數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。例如地址段0001到0100,從起始地址0001到結(jié)束地址0100,這個(gè)地址段所對應(yīng)的存儲空間為第一存儲空間。具體的,網(wǎng)卡401可以在分配所述第一存儲空間后,為所述第一存儲空間所在的地址段設(shè)置一個(gè)標(biāo)識,該標(biāo)識用于指示該地址段已經(jīng)被占用,網(wǎng)卡401不再將其它數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)緩存在該地址段對應(yīng)的存儲空間中。這樣,所述第一存儲空間只被用于緩存所述writecommand所要存儲的數(shù)據(jù)。當(dāng)所述writecommand所要存儲的數(shù)據(jù)都被寫入target400中的目的地址所對應(yīng)的存儲空間后,網(wǎng)卡401取消設(shè)置的所述標(biāo)識,所述第一存儲空間即可被用于緩存其它數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)。

當(dāng)所述第一存儲空間的位置不固定時(shí),在所述writecommand需要存儲的數(shù)據(jù)被傳輸?shù)倪^程中,每次分配的第一存儲空間的地址段會不相同。例如第一次分配的第一存儲空間的地址段為0001到0100,即從起始地址0001到結(jié)束地址0100的地址段所對應(yīng)的存儲空間為所述第一存儲空間所在的地址空間;第二次分配的第一存儲空間的地址段為0301到0400,即從起始地址0301到結(jié)束地址0400的地址段所對應(yīng)的存儲空間為所述第一存儲空間所在的地址空間。這樣,網(wǎng)卡401可以根據(jù)網(wǎng)卡內(nèi)存4012的可用存儲空間,靈活分配所述第一存儲空間。

本發(fā)明實(shí)施例不限定分配的第一存儲空間在網(wǎng)卡內(nèi)存4012中的位置,所述第一存儲空間的位置固定或變化的情況,都是本發(fā)明實(shí)施例中分配所述第一存儲空間的實(shí)現(xiàn)方式。

步驟206:網(wǎng)卡401通知網(wǎng)卡303傳輸所述需要存儲的數(shù)據(jù)中第一長度的數(shù)據(jù);

具體的,網(wǎng)卡401可以通過rdma的方式通知網(wǎng)卡303,從所述writecommand攜帶的sgl中所述需要存儲的數(shù)據(jù)的源地址處,讀取第一長度的數(shù)據(jù)。

具體的,所述writecommand攜帶的sgl中所述需要存儲的數(shù)據(jù)的源地址是一個(gè)起始地址,在讀取所述第一長度的數(shù)據(jù)時(shí),從所述需要存儲的數(shù)據(jù)的源地址開始讀取所述第一長度的數(shù)據(jù)。

步驟208:網(wǎng)卡401接收網(wǎng)卡303通過網(wǎng)絡(luò)傳輸?shù)乃龅谝婚L度的數(shù)據(jù),并將接收到的與第一長度的數(shù)據(jù)緩存在已經(jīng)分配的網(wǎng)卡內(nèi)存4012的所述第一存儲空間中;并修改接收到的writecommand,將修改后的writecommand發(fā)送給目的硬盤,即發(fā)送給目的硬盤的控制器;

具體的,可以是網(wǎng)卡401接收網(wǎng)卡303通過網(wǎng)絡(luò)傳輸?shù)乃龅谝婚L度的數(shù)據(jù),并將接收到的與第一長度的數(shù)據(jù)緩存在已經(jīng)分配的網(wǎng)卡內(nèi)存4012的所述第一存儲空間中。然后修改接收到的writecommand,將所述writecommand攜帶的sgl中需要存儲的數(shù)據(jù)在host300中的源地址修改為網(wǎng)卡內(nèi)存4012中所述第一存儲空間的地址,將所述writecommand攜帶的sgl中所述需要存儲的數(shù)據(jù)的長度修改為所述第一長度;并將修改后的writecommand發(fā)送給目的硬盤,即發(fā)送給目的硬盤的控制器;即網(wǎng)卡401發(fā)送給目的硬盤的控制器的writecommand攜帶的sgl中包括網(wǎng)卡內(nèi)存4012中所述第一存儲空間的地址,所述第一長度,以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息。

其中,目的硬盤是網(wǎng)卡401根據(jù)所述writecommand中所述需要存儲的數(shù)據(jù)在target400中的目的地址確定的。網(wǎng)卡401能夠根據(jù)所述需要存儲的數(shù)據(jù)在target400中的目的地址,確定所述需要存儲的數(shù)據(jù)在target400中的哪個(gè)硬盤中,并將所述需要存儲的數(shù)據(jù)在target400中的目的地址所在的硬盤確定為目的硬盤。在target400中,每個(gè)硬盤都會對應(yīng)一個(gè)地址段,網(wǎng)卡401根據(jù)所述writecommand的sgl中所述需要存儲的數(shù)據(jù)在target400中的目的地址,確定該目的地址所在的地址段,與該地址段對應(yīng)的硬盤即為目的硬盤。

步驟210:目的硬盤的控制器根據(jù)接收到的writecommand中攜帶的所述第一存儲空間的地址,從網(wǎng)卡內(nèi)存4012中讀取所述第一長度的數(shù)據(jù),并將所述第一長度的數(shù)據(jù)寫入目的硬盤的目的地址對應(yīng)的存儲空間中。

可選的,目的硬盤的控制器可以通過rdma或直接內(nèi)存存取(英文:dma,directmemoryaccess)的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應(yīng)的存儲空間中。本發(fā)明實(shí)施例中,網(wǎng)卡401與target400中的硬盤之間,基于nvmeoverpcie架構(gòu)實(shí)現(xiàn)連接。因此,target400中目的硬盤的控制器與網(wǎng)卡401之間,可以通過nvmeoverpcie連接和通信方式,即目的硬盤的控制器可以基于nvmeoverpcie協(xié)議規(guī)定的方式,將所述需要存儲的數(shù)據(jù)從網(wǎng)卡內(nèi)存4012寫入目的硬盤中。

上述網(wǎng)卡401修改所述writecommand并將修改后的writecommand發(fā)送給目的硬盤的控制器,可以由網(wǎng)卡401中的一個(gè)控制模塊來實(shí)現(xiàn)。該控制模塊可以由一個(gè)物理芯片(例如arm、x86或powerpc等處理器)實(shí)現(xiàn),也可以由運(yùn)行在物理芯片上的軟件模塊來實(shí)現(xiàn),還可以是在物理芯片上通過虛擬機(jī)技術(shù)創(chuàng)建一個(gè)或多個(gè)虛擬的控制器。該控制模塊可以是nvmeoverfabric中的physicalcontroller或nvmcontroller。

循環(huán)執(zhí)行上述步驟206-步驟210,直到將所述需要存儲的數(shù)據(jù)全部寫入所述需要存儲的數(shù)據(jù)在target400中的目的地址所對應(yīng)的存儲空間中。

下面以需要存儲的數(shù)據(jù)為202個(gè)數(shù)據(jù)塊,所述第一長度為10個(gè)數(shù)據(jù)塊為例,說明循環(huán)執(zhí)行上述步驟206-步驟210的過程。在第一次執(zhí)行步驟206-步驟210時(shí),緩存在網(wǎng)卡內(nèi)存4012的第一長度的數(shù)據(jù)是從host300中所述需要存儲的數(shù)據(jù)的源地址開始的第1至第10的數(shù)據(jù)塊;該第一長度的數(shù)據(jù)被寫入所述需要存儲的數(shù)據(jù)在target400中的目的地址的起始地址所開始的10個(gè)數(shù)據(jù)塊所對應(yīng)的存儲空間中。在第二次執(zhí)行步驟206-步驟210時(shí),緩存在網(wǎng)卡內(nèi)存4012的第一長度的數(shù)據(jù)是從host300中所述需要存儲的數(shù)據(jù)的源地址開始的第11至第20的數(shù)據(jù)塊;該第一長度的數(shù)據(jù)被寫入所述需要存儲的數(shù)據(jù)在target400中的目的地址的起始地址并加上10個(gè)數(shù)據(jù)塊的地址空間開始的10個(gè)數(shù)據(jù)塊所對應(yīng)的存儲空間中。以此類推,直到將所述需要存儲的數(shù)據(jù)全部寫入所述需要存儲的數(shù)據(jù)在target400中的目的地址所對應(yīng)的存儲空間中。

需要說明的是,當(dāng)最后一次執(zhí)行步驟206-步驟210時(shí),由于剩余的數(shù)據(jù)為2個(gè)數(shù)據(jù)塊,網(wǎng)卡401發(fā)送給目的硬盤的控制器的writecommand攜帶的sgl中所包含的需要存儲數(shù)據(jù)的長度為剩余數(shù)據(jù)的長度,即2個(gè)數(shù)據(jù)塊的長度。即網(wǎng)卡401發(fā)送給目的硬盤的控制器的writecommand攜帶的sgl中包括網(wǎng)卡內(nèi)存4012中所述第一存儲空間的地址,2個(gè)數(shù)據(jù)塊的長度,以及所述需要存儲的數(shù)據(jù)在target400中的目的地址的起始地址加上200個(gè)數(shù)據(jù)塊的長度后的起始地址的信息。

當(dāng)所述需要存儲的數(shù)據(jù)是通過數(shù)據(jù)長度來表示時(shí),例如需要存儲的數(shù)據(jù)為200kb,表示需要存儲的數(shù)據(jù)的源地址可以為具體的地址信息,例如00001-01000等。在循環(huán)執(zhí)行步驟206-步驟210時(shí)的實(shí)現(xiàn)方式與上述以數(shù)據(jù)塊表示時(shí)的實(shí)現(xiàn)方式類似,不再贅述。

上述循環(huán)執(zhí)行步驟206-步驟210的過程中,所述第一存儲空間的大小是固定的,只是在最后一次執(zhí)行步驟206-步驟210中因數(shù)據(jù)的長度不足所述第一長度,才根據(jù)實(shí)際的數(shù)據(jù)長度進(jìn)行傳輸??梢岳斫猓谘h(huán)執(zhí)行步驟206-步驟210時(shí)所述第一存儲空間的大小也可以變化。即根據(jù)網(wǎng)卡內(nèi)存4012的可用存儲空間的大小,可以在每次執(zhí)行步驟206-步驟210時(shí),分配的所述第一存儲空間的大小可以不同。例如,第n次分配的所述第一存儲空間的大小為100個(gè)數(shù)據(jù)塊;在第n+2次時(shí),網(wǎng)卡內(nèi)存4012的可用存儲空間增大了,則分配的所述第一存儲空間的大小為150個(gè)數(shù)據(jù)塊;在第n+6次時(shí),網(wǎng)卡內(nèi)存4012的可用存儲空間減小了,則分配的所述第一存儲空間的大小為50個(gè)數(shù)據(jù)塊等等。其中,n為大于等于1的正整數(shù)。

并且,在循環(huán)執(zhí)行步驟206-步驟210的過程中,當(dāng)每次分配的所述第一存儲空間的大小不同時(shí),網(wǎng)卡401在修改writecommand時(shí),所寫入的需要存儲數(shù)據(jù)的長度也會隨之改變。其實(shí)現(xiàn)過程與上述描述的實(shí)現(xiàn)過程類似,不再贅述。

當(dāng)host300向target400發(fā)送讀數(shù)據(jù)命令時(shí),本發(fā)明實(shí)施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法如圖4所示,包括:

步驟300:網(wǎng)卡401接收host300發(fā)送的readcommand;所述readcommand中攜帶sgl,所述sgl中包括所述需要讀取的數(shù)據(jù)在target400中的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述需要讀取的數(shù)據(jù)在host300中的目的地址等信息;

具體的,當(dāng)host300需要從target400讀取數(shù)據(jù)時(shí),host300向target400發(fā)送readcommand。即host300通過iwrap、roce、infiniband、fc或omni-path等網(wǎng)絡(luò)向target400發(fā)送所述readcommand。

步驟302:網(wǎng)卡401判斷所述需要讀取的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值;

所述預(yù)設(shè)閾值根據(jù)具體的業(yè)務(wù)實(shí)現(xiàn)場景會有不同的設(shè)置。例如當(dāng)網(wǎng)卡內(nèi)存4012的總的存儲空間為10gb時(shí),所述預(yù)設(shè)閾值為2gb;或當(dāng)網(wǎng)卡內(nèi)存4012的總的存儲空間為500mb時(shí),所述預(yù)設(shè)閾值為450mb。在具體實(shí)現(xiàn)時(shí),可以根據(jù)網(wǎng)卡內(nèi)存4012的總的存儲空間以及對不同業(yè)務(wù)的需要設(shè)置不同的預(yù)設(shè)閾值。

步驟304:當(dāng)所述需要讀取的數(shù)據(jù)的長度達(dá)到預(yù)設(shè)閾值時(shí),所述網(wǎng)卡401從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述網(wǎng)卡內(nèi)存4012的存儲空間,且所述第一長度小于所述需要讀取數(shù)據(jù)的長度;

其中,所述第一存儲空間可以是小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間。例如,網(wǎng)卡401接收到所述readcommand,網(wǎng)卡4012的可用存儲空間是100kb,則所述第一存儲空間的大小可以是80kb或100kb;或者網(wǎng)卡401接收到所述readcommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲100個(gè)數(shù)據(jù)塊,則所述第一存儲空間的大小可以是80個(gè)數(shù)據(jù)塊或100個(gè)數(shù)據(jù)塊。

所述第一存儲空間的大小也可以為預(yù)設(shè)的閾值。例如,預(yù)先設(shè)定所述第一存儲空間的閾值為100個(gè)數(shù)據(jù)塊。當(dāng)網(wǎng)卡401接收到所述readcommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲120個(gè)數(shù)據(jù)塊,所述readcommand需要存儲的數(shù)據(jù)為600個(gè)數(shù)據(jù)塊,則所述網(wǎng)卡分配100個(gè)數(shù)據(jù)塊的存儲空間為第一存儲空間。當(dāng)網(wǎng)卡401接收到所述readcommand時(shí),網(wǎng)卡4012的可用存儲空間是可存儲80個(gè)數(shù)據(jù)塊,則網(wǎng)卡等待預(yù)設(shè)的時(shí)間,例如3分鐘,在該預(yù)設(shè)時(shí)間后再次判斷網(wǎng)卡4012的可用存儲空間是否大于或等于所述預(yù)設(shè)的閾值。如果此時(shí)網(wǎng)卡4012的可用存儲空間大于或等于所述預(yù)設(shè)的閾值,例如網(wǎng)卡4012的可用存儲空間為150個(gè)數(shù)據(jù)塊,則所述網(wǎng)卡分配100個(gè)數(shù)據(jù)塊的存儲空間為第一存儲空間。如果此時(shí)網(wǎng)卡4012的可用存儲空間小于所述預(yù)設(shè)的閾值,例如網(wǎng)卡4012的可用存儲空間為90個(gè)數(shù)據(jù)塊,則繼續(xù)等待預(yù)設(shè)時(shí)間后再判斷網(wǎng)卡4012的可用存儲空間是否大于或等于所述預(yù)設(shè)的閾值。

在具體實(shí)現(xiàn)時(shí),可以在網(wǎng)卡401中的一個(gè)寄存器中設(shè)置所述第一存儲空間的大小。所述第一存儲空間的大小可以用可存儲數(shù)據(jù)的長度(例如20mb)來表示,也可以用可存儲的數(shù)據(jù)塊的個(gè)數(shù)來(例如20個(gè)數(shù)據(jù)塊)表示。當(dāng)所述第一存儲空間的大小用可讀取的數(shù)據(jù)的長度表示時(shí),所述第一長度是可讀取數(shù)據(jù)的長度的值,例如20mb。當(dāng)所述第一存儲空間的大小用可讀取的數(shù)據(jù)塊的個(gè)數(shù)來表示時(shí),所述第一長度是可讀取數(shù)據(jù)塊的值,例如20個(gè)數(shù)據(jù)塊。

當(dāng)然,在具體實(shí)現(xiàn)時(shí),網(wǎng)卡401也可以不判斷所述需要存儲的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值,即上述步驟302是一個(gè)可選的實(shí)現(xiàn)步驟。當(dāng)沒有執(zhí)行判斷所述需要存儲的數(shù)據(jù)的長度是否達(dá)到預(yù)設(shè)閾值的步驟時(shí),所述網(wǎng)卡401可以直接從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配第一存儲空間。這時(shí)網(wǎng)卡401分配的第一存儲空間,既可以是第一存儲空間可以是小于或等于所述數(shù)據(jù)處理單元接收數(shù)據(jù)讀寫命令時(shí)的可用存儲空間,也可以預(yù)設(shè)的閾值大小的第一存儲空間。

與上述writecommand的實(shí)現(xiàn)過程類似,所述網(wǎng)卡401從網(wǎng)卡內(nèi)存4012的可用存儲空間中分配的第一存儲空間用于存儲readcommand所要讀取的數(shù)據(jù)時(shí),該被分配的第一存儲空間可以是一個(gè)位置固定的存儲空間,也可以是位置變動的存儲空間。

步驟306:網(wǎng)卡401修改所述readcommand,將所述readcommand中攜帶的所述需要讀取的數(shù)據(jù)在host300中的目的地址,修改為所述網(wǎng)卡內(nèi)存4012中所述第一存儲空間的地址,將所述readcommand攜帶的sgl中所述需要讀取的數(shù)據(jù)的長度修改為所述第一長度,并將修改后的readcommand發(fā)送給目的硬盤,即目的硬盤的控制器。

即網(wǎng)卡401發(fā)送給目的硬盤控制器的readcommand攜帶的sgl中包括所述需要讀取的數(shù)據(jù)在target400中的源地址、所述第一長度、以及所述網(wǎng)卡內(nèi)存4012所述第一存儲空間的地址等信息。目的硬盤的控制器根據(jù)接收到的所述修改后的readcommand,將所述第一長度的所述需要讀取的數(shù)據(jù)緩存在網(wǎng)卡內(nèi)存4012的所述第一存儲空間中??蛇x的,目的硬盤的控制器通過rdma或直接內(nèi)存存取(英文:dma,directmemoryaccess)的方式,將所述需要讀取的數(shù)據(jù)遷移到所述第一命令隊(duì)列對應(yīng)的網(wǎng)卡內(nèi)存4012的存儲空間中。

可選的,所述網(wǎng)卡401與target400中的硬盤之間基于nvmeoverpcie架構(gòu)實(shí)現(xiàn)連接。網(wǎng)卡401與target400中目的硬盤的控制器之間,通過nvmeoverpcie架構(gòu)中連接和通信的方式,將所述需要讀取的數(shù)據(jù)緩存在所述第一命令隊(duì)列對應(yīng)的網(wǎng)卡內(nèi)存4012的存儲空間中。

其中,目的硬盤是網(wǎng)卡401根據(jù)所述readcommand中所述需要讀取的數(shù)據(jù)在target400中的源地址確定的。網(wǎng)卡401能夠根據(jù)所述需要讀取的數(shù)據(jù)在target400中的源地址,確定所述需要讀取的數(shù)據(jù)在target400中的哪個(gè)硬盤中,并將所述需要讀取的數(shù)據(jù)在target400中的源地址所在的硬盤確定為目的硬盤。

具體的,在上述實(shí)現(xiàn)網(wǎng)卡內(nèi)存4012中數(shù)據(jù)緩存和遷移過程中,可以由網(wǎng)卡401中的一個(gè)控制模塊來實(shí)現(xiàn)對所述writecommand或readcommand的修改。該控制模塊可以由一個(gè)物理芯片(例如arm、x86或powerpc等處理器)實(shí)現(xiàn),也可以由運(yùn)行在物理芯片上的軟件模塊來實(shí)現(xiàn),還可以是在物理芯片上通過虛擬機(jī)技術(shù)創(chuàng)建的一個(gè)或多個(gè)虛擬控制器。該控制模塊可以是nvmeoverfabric中的physicalcontroller或nvmcontroller。

步驟308:網(wǎng)卡401接收所述目的硬盤控制器發(fā)送的所述第一長度的需要讀取的數(shù)據(jù),緩存在所述網(wǎng)卡內(nèi)存4012的所述第一存儲空間,并根據(jù)所述readcommand中所述需要讀取的數(shù)據(jù)在host300中的目的地址,將緩存的所述第一長度的需要讀取的數(shù)據(jù)發(fā)送給host300。

可選的,網(wǎng)卡401可以通過rdma的方式,將緩存的所述第一長度的需要讀取的數(shù)據(jù)發(fā)送給host300。

循環(huán)執(zhí)行上述步驟306-步驟308,直到將所述需要讀取的數(shù)據(jù)全部寫入所述需要讀取的數(shù)據(jù)在host300中的目的地址所對應(yīng)的存儲空間中。

下面以需要讀取的數(shù)據(jù)為202個(gè)數(shù)據(jù)塊,所述第一長度為10個(gè)數(shù)據(jù)塊為例,說明循環(huán)執(zhí)行上述步驟步驟306-步驟308的過程。在第一次執(zhí)行步驟306-步驟308時(shí),緩存在網(wǎng)卡內(nèi)存4012的第一長度的數(shù)據(jù)是從target400中所述需要讀取的數(shù)據(jù)的源地址開始的第1至第10的數(shù)據(jù)塊;該第一長度的數(shù)據(jù)被寫入所述需要讀取的數(shù)據(jù)在host300中的目的地址的起始地址所開始的10個(gè)數(shù)據(jù)塊所對應(yīng)的存儲空間中。在第二次執(zhí)行步驟306-步驟308時(shí),緩存在網(wǎng)卡內(nèi)存4012的所述第一長度的數(shù)據(jù)是從target400中所述需要讀取的數(shù)據(jù)的源地址開始的第11至第20的數(shù)據(jù)塊;該第一長度的數(shù)據(jù)被寫入所述需要讀取的數(shù)據(jù)在host300中的目的地址的起始地址并加上10個(gè)數(shù)據(jù)塊的地址空間后開始的10個(gè)數(shù)據(jù)塊所對應(yīng)的存儲空間中。以此類推,直到將所述需要讀取的數(shù)據(jù)全部寫入所述需要讀取的數(shù)據(jù)在host300中的目的地址所對應(yīng)的存儲空間中。

需要說明的是,當(dāng)最后一次步驟306-步驟308時(shí),由于剩余的數(shù)據(jù)為2個(gè)數(shù)據(jù)塊,網(wǎng)卡401發(fā)送給目的硬盤的控制器的readcommand攜帶的sgl中所包含的需要存儲數(shù)據(jù)的長度為剩余數(shù)據(jù)的長度,即2個(gè)數(shù)據(jù)塊的長度。即網(wǎng)卡401發(fā)送給目的硬盤的控制器的readcommand攜帶的sgl中包括網(wǎng)卡內(nèi)存4012中所述第一存儲空間的地址,2個(gè)數(shù)據(jù)塊的長度,以及所述需要讀取的數(shù)據(jù)在target400中的目的地址的起始地址加上200個(gè)數(shù)據(jù)塊的長度后的起始地址的信息。

當(dāng)所述需要讀取的數(shù)據(jù)是通過數(shù)據(jù)長度來表示時(shí),例如需要讀取的數(shù)據(jù)為200kb,表示需要讀取的數(shù)據(jù)的源地址可以為具體的地址信息,例如00001-01000等。在循環(huán)執(zhí)行步驟306-步驟308時(shí)的實(shí)現(xiàn)方式與上述以數(shù)據(jù)塊表示時(shí)的實(shí)現(xiàn)方式類似,不再贅述。

上述循環(huán)執(zhí)行步驟306-步驟308的過程中,所述第一存儲空間的大小是固定的,只是在最后一次執(zhí)行步驟步驟306-步驟308中因數(shù)據(jù)的長度不足所述第一長度,才根據(jù)實(shí)際的數(shù)據(jù)長度進(jìn)行傳輸。可以理解,每次執(zhí)行步驟306-步驟308時(shí)所述第一存儲空間的大小也可以變化。即根據(jù)網(wǎng)卡內(nèi)存4012的可用存儲空間的大小,可以在每次執(zhí)行步驟306-步驟308時(shí),分配的所述第一存儲空間的大小不同。例如,第n次分配的所述第一存儲空間的大小為100個(gè)數(shù)據(jù)塊;在第n+2次時(shí),網(wǎng)卡內(nèi)存4012的可用存儲空間增大了,則分配的所述第一存儲空間的大小為150個(gè)數(shù)據(jù)塊;在第n+6次時(shí),網(wǎng)卡內(nèi)存4012的可用存儲空間減小了,則分配的所述第一存儲空間的大小為50個(gè)數(shù)據(jù)塊等等。其中,n為大于等于1的正整數(shù)。

在循環(huán)執(zhí)行步驟306-步驟308的過程中,當(dāng)每次分配的所述第一存儲空間的大小不同時(shí),網(wǎng)卡401在修改readcommand時(shí),所寫入的需要存儲數(shù)據(jù)的長度也會隨之改變。其實(shí)現(xiàn)過程與上述描述的實(shí)現(xiàn)過程類似,不再贅述。

圖5為本發(fā)明實(shí)施例一種nvmeoverfabric架構(gòu)中控制設(shè)備與存儲設(shè)備之間數(shù)據(jù)讀寫命令的控制方法的流程示意圖,所述存儲設(shè)備包括數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元中,所述數(shù)據(jù)處理單元用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中,所述方法包括下述步驟:

步驟500:所述數(shù)據(jù)處理單元接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

步驟502:所述數(shù)據(jù)處理單元依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述方法,由于所述數(shù)據(jù)處理單元從所述緩存單元的可用存儲空間中分配第一存儲空間小于所述緩存單元的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,通過依次將所述第一長度的數(shù)據(jù)遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中,能夠解決因一個(gè)數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于存儲設(shè)備中緩存單元的存儲空間所帶來的數(shù)據(jù)讀寫命令執(zhí)行失敗的問題。

本發(fā)明實(shí)施例中圖5所示的方法實(shí)現(xiàn)方式,還可以參考上述圖2、圖3和圖4所示的實(shí)現(xiàn)方式來實(shí)現(xiàn),不再贅述。例如,數(shù)據(jù)處理單元可以參考網(wǎng)卡401的方式來實(shí)現(xiàn),緩存單元可以參考網(wǎng)卡內(nèi)存4012的實(shí)現(xiàn)方式來實(shí)現(xiàn),存儲單元可以參考圖2中硬盤的實(shí)現(xiàn)方式來實(shí)現(xiàn),控制設(shè)備可以參考host300的實(shí)現(xiàn)方式來實(shí)現(xiàn)等。

圖6為本發(fā)明實(shí)施例提供的一種存儲設(shè)備600的結(jié)構(gòu)示意圖,所述存儲設(shè)備600是nvmeoverfabric架構(gòu)中的存儲設(shè)備,所述存儲設(shè)備600與nvmeoverfabric架構(gòu)中的控制設(shè)備之間進(jìn)行數(shù)據(jù)傳輸,所述存儲設(shè)備600包括數(shù)據(jù)處理單元601、緩存單元602和存儲單元603,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元603中,所述數(shù)據(jù)處理單元601用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元602用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中,所述數(shù)據(jù)處理單元601包括處理器,所述處理器用于執(zhí)行下述步驟:

接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元602的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元602的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述存儲設(shè)備600提供的實(shí)現(xiàn)方式,由于所述數(shù)據(jù)處理單元601從所述緩存單元602的可用存儲空間中分配第一存儲空間小于所述緩存單元602的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,通過依次將所述第一長度的數(shù)據(jù)遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中,能夠解決因一個(gè)數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于存儲設(shè)備中緩存單元602的存儲空間所帶來的數(shù)據(jù)讀寫命令執(zhí)行失敗的問題。

本發(fā)明實(shí)施例中圖6所示的存儲設(shè)備600實(shí)現(xiàn)方式,還可以參考上述圖2、圖3和圖4所示的實(shí)現(xiàn)方式來實(shí)現(xiàn),不再贅述。例如,數(shù)據(jù)處理單元601可以參考網(wǎng)卡401的方式來實(shí)現(xiàn),緩存單元602可以參考網(wǎng)卡內(nèi)存4012的實(shí)現(xiàn)方式來實(shí)現(xiàn),存儲單元603可以參考圖2中硬盤的實(shí)現(xiàn)方式來實(shí)現(xiàn),控制設(shè)備可以參考host300的實(shí)現(xiàn)方式來實(shí)現(xiàn)等。

圖7為本發(fā)明實(shí)施例一種實(shí)現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng)的結(jié)構(gòu)示意圖,所述系統(tǒng)包括nvmeoverfabric架構(gòu)中的控制設(shè)備700和存儲設(shè)備800,所述存儲設(shè)備800包括數(shù)據(jù)處理單元801、緩存單元802和存儲單元803,所述控制設(shè)備需要讀寫的數(shù)據(jù)存儲在所述存儲單元803中,所述數(shù)據(jù)處理單元801用于接收所述控制設(shè)備發(fā)送的數(shù)據(jù)讀寫命令,所述緩存單元802用于緩存所述數(shù)據(jù)讀寫命令所需要傳輸?shù)臄?shù)據(jù);其中:

所述控制設(shè)備700,用于向所述存儲設(shè)備800發(fā)送數(shù)據(jù)讀寫命令;

所述數(shù)據(jù)處理單元801,用于接收所述控制設(shè)備700發(fā)送的數(shù)據(jù)讀寫命令,根據(jù)所述數(shù)據(jù)讀寫命令中攜帶的需要傳輸數(shù)據(jù)的長度,從所述緩存單元802的可用存儲空間中分配第一存儲空間,所述第一存儲空間能夠存儲數(shù)據(jù)的長度為第一長度,所述第一存儲空間小于所述緩存單元802的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度;

所述數(shù)據(jù)處理單元801,還用于依次獲取所述第一長度的數(shù)據(jù),緩存在所述第一存儲空間中,并將緩存在所述第一存儲空間的數(shù)據(jù),依次遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中。

通過上述系統(tǒng)提供的實(shí)現(xiàn)方式,由于所述數(shù)據(jù)處理單元801從所述緩存單元802的可用存儲空間中分配第一存儲空間小于所述緩存單元802的存儲空間,且所述第一長度小于所述需要傳輸數(shù)據(jù)的長度,通過依次將所述第一長度的數(shù)據(jù)遷移到所述數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)的目的地址所對應(yīng)的存儲空間中,能夠解決因一個(gè)數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于存儲設(shè)備中緩存單元的存儲空間所帶來的數(shù)據(jù)讀寫命令執(zhí)行失敗的問題。

本發(fā)明實(shí)施例中圖7所示的系統(tǒng)實(shí)現(xiàn)方式,還可以參考上述圖2、圖3和圖4所示的實(shí)現(xiàn)方式來實(shí)現(xiàn),不再贅述。例如,數(shù)據(jù)處理單元801可以參考網(wǎng)卡401的方式來實(shí)現(xiàn),緩存單元802可以參考網(wǎng)卡內(nèi)存4012的實(shí)現(xiàn)方式來實(shí)現(xiàn),存儲單元803可以參考圖2中硬盤的實(shí)現(xiàn)方式來實(shí)現(xiàn),控制設(shè)備700可以參考host300的實(shí)現(xiàn)方式來實(shí)現(xiàn)等。

結(jié)合本發(fā)明公開內(nèi)容所描述的方法或步驟可以硬件的方式來實(shí)現(xiàn),也可以是由處理器執(zhí)行軟件指令的方式來實(shí)現(xiàn)。軟件指令可以由相應(yīng)的軟件模塊組成,軟件模塊可以被存放于隨機(jī)存取存儲器(英文:randomaccessmemory,ram)、閃存、只讀存儲器(英文:readonlymemory,rom)、可擦除可編程只讀存儲器(英文:erasableprogrammablerom,eprom)、電可擦可編程只讀存儲器(英文:electricallyeprom,eeprom)、寄存器、硬盤、移動硬盤、只讀光盤(英文:cd-rom)或者本領(lǐng)域熟知的任何其它形式的存儲介質(zhì)中。一種示例性的存儲介質(zhì)耦合至處理器,從而使處理器能夠從該存儲介質(zhì)讀取信息,且可向該存儲介質(zhì)寫入信息。當(dāng)然,存儲介質(zhì)也可以是處理器的組成部分。處理器和存儲介質(zhì)可以位于asic中。另外,該asic可以位于核心網(wǎng)接口設(shè)備中。當(dāng)然,處理器和存儲介質(zhì)也可以作為分立組件存在于核心網(wǎng)接口設(shè)備中。

本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。

所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。

在本申請所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口、裝置或單元的間接耦合或通信連接,也可以是電的,機(jī)械的或其它的形式連接。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本發(fā)明實(shí)施例方案的目的。

另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以是兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲在一個(gè)計(jì)算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分,或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(英文:rom,read-onlymemory)、隨機(jī)存取存儲器(英文:ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
长海县| 石渠县| 都江堰市| 潜山县| 南陵县| 石台县| 察隅县| 敖汉旗| 平山县| 灌云县| 乐平市| 抚州市| 光山县| 普宁市| 张家界市| 西安市| 米脂县| 广西| 巴塘县| 海阳市| 屏东县| 洛扎县| 玛多县| 安图县| 始兴县| 定西市| 黑河市| 汕尾市| 石渠县| 舟曲县| 察雅县| 米泉市| 黄梅县| 遂平县| 安丘市| 弥渡县| 新安县| 绍兴市| 兴宁市| 信宜市| 济南市|