亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

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

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

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



背景技術:

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

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

在nvmeoverfabric的架構中,host表示主機,主機負責發(fā)起數(shù)據(jù)的讀寫;target表示目標存儲設備,負責接收并且執(zhí)行host發(fā)送的命令。當target接收到host發(fā)送的writecommand之后,target中的網卡解析writecommand中的內容得到writecommand需要傳輸?shù)臄?shù)據(jù)長度,并在網卡內存中分配對應的存儲空間,用于緩存host待傳輸?shù)臄?shù)據(jù)。target的網卡緩存需要傳輸?shù)臄?shù)據(jù)后,再將緩存的數(shù)據(jù)遷入target中的目的硬盤中。當host通過readcommand從target的硬盤中讀取數(shù)據(jù)時,實現(xiàn)過程類似。即需要先將target的硬盤中的數(shù)據(jù)緩存在網卡內存中,再將緩存在網卡內存中的數(shù)據(jù),發(fā)送給host。

在具體的業(yè)務實現(xiàn)時,可能會出現(xiàn)網卡的網卡內存不足的情況。即網卡內存的存儲空間不能緩存host通過命令(包括writecommand或readcommand)傳輸?shù)臄?shù)據(jù)。在這種情況下,會導致host發(fā)出的命令執(zhí)行失敗。host需要等到網卡內存中其它存儲空間被釋放后才能再次申請可用存儲空間。并且,target中的網卡需要緩存未被執(zhí)行的命令、等待內存空間的釋放以及再次分配可用內存空間等等。這樣的實現(xiàn)方式使得target中網卡在處理網卡內存不足時的實現(xiàn)方式復雜,可維護性也差。



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

本發(fā)明實施例提供一種nvmeoverfabric架構中數(shù)據(jù)讀寫命令的控制方法、設備和系統(tǒng),以解決因target中網卡內存的存儲空間不足,導致的緩存數(shù)據(jù)讀寫命令時所帶來的處理機制復雜的問題。

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

所述控制設備獲取所述緩存單元的可用存儲空間;

所述控制設備判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間;

在所述第一數(shù)據(jù)占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;

在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。

通過上述方法,所述控制設備在發(fā)送第一數(shù)據(jù)讀寫命令之前,獲取所述緩存單元的可用存儲空間。在所述第一數(shù)據(jù)占用的存儲空間小于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;在所述第一數(shù)據(jù)占用的存儲空間大于或等于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,所述控制設備只在所述緩存單元能夠緩存數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送相應的數(shù)據(jù)讀寫命令,能夠避免所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于緩存單元的可用存儲空間時,因緩存數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

可選的,所述緩存單元的可用存儲空間,是所述數(shù)據(jù)處理單元在接收到所述控制設備發(fā)送的獲取所述緩存單元可用存儲空間的請求時,所述緩存單元中未被占用的存儲空間。

可選的,所述控制設備和所述存儲設備之間可以通過iwarp、roce、infiniband、fc或omni-path等網絡實現(xiàn)連接和通信。

所述存儲設備中的數(shù)據(jù)處理單元可以是網卡、獨立的現(xiàn)場可編程門陣列(英文:fpga,fieldprogrammablegatearray)芯片或存儲設備中的中央處理器(英文:cpu,centralprocessingunit)來實現(xiàn)。所述存儲設備中的緩存單元也可以由網卡內存、fpga芯片中的存儲單元、存儲設備上的緩存單元或所述存儲設備中cpu的內存來實現(xiàn)。所述存儲設備中的緩存單元也可以由網卡內存、fpga芯片中的存儲單元、存儲設備上的緩存單元或所述存儲設備中的cpu的內存中的至少兩個組成的緩存資源池來實現(xiàn)來實現(xiàn)。

在一個可能的設計中,所述控制設備獲取所述緩存單元的可用存儲空間包括:

所述控制設備在向所述存儲設備發(fā)送第一數(shù)據(jù)讀寫命令之前,向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求,以獲取所述緩存單元的可用存儲空間。

在一個可能的設計中,在所述控制設備向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求之前,所述方法還包括:

所述控制設備向所述存儲設備發(fā)送第二數(shù)據(jù)讀寫命令,所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于所述緩存單元的可用存儲空間;

所述控制設備接收所述數(shù)據(jù)處理單元發(fā)送的反壓消息,所述反壓消息用于指示所述緩存單元的可用存儲空間不足。

這樣,所述控制設備在所述緩存單元的可用存儲空間不足,且不能緩存所述控制設備發(fā)送的所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,才在發(fā)送第一數(shù)據(jù)讀寫命令之前發(fā)送獲取所述緩存單元的可用存儲空間的請求,并在所述緩存單元的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送所述第一數(shù)據(jù)讀寫命令。不僅能夠有效、地解決現(xiàn)有技術中的技術問題,還能夠進一步提升所述控制設備發(fā)送數(shù)據(jù)讀寫命令時的效率,節(jié)省所述控制設備因發(fā)送獲取所述緩存單元可用存儲空間的請求所造成的資源占用。同樣的,由于所述數(shù)據(jù)處理單元也不需要每次數(shù)據(jù)讀寫命令之前都要向所述控制設備返回可用存儲空間,也相應節(jié)省了所述數(shù)據(jù)處理單元的資源占用。

可選的,所述控制設備執(zhí)行在發(fā)送第一數(shù)據(jù)讀寫命令之前獲取所述緩存單元的可用存儲空間的步驟達到預設時間時,所述緩存單元的可用存儲空間足夠大時,可以不再執(zhí)行在發(fā)送第一數(shù)據(jù)讀寫命令之前獲取所述緩存單元的可用存儲空間的步驟。即所述控制設備只在預設時間內執(zhí)行獲取緩存單元的可用存儲空間以及判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間的步驟。所述預設時間可以根據(jù)不同的業(yè)務場景進行不用的設置。在所述預設時間內,所述緩存單元的可用存儲空間不能滿足所述控制設備發(fā)送的所有數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。在所述預設時間達到后,所述緩存單元的可用存儲空間能滿足所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。

在一個可能的設計中,所述方法還包括:

所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,重新獲取所述緩存單元的可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以通過設定定時器的方式來實現(xiàn)。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以是系統(tǒng)默認的時間或預先配置的時間。

在一個可能的設計中,所述緩存單元的可用存儲空間是本地記錄的所述緩存單元的實時可用存儲空間。

其中,所述本地指的是所述控制設備,所述本地記錄的所述緩存單元的實時可用存儲空間,是所述控制設備記錄的所述緩存單元的實時可用存儲空間。

可選的,所述控制設備可以在所述存儲設備上電初始化時,獲取并記錄所述緩存單元的可用存儲空間。所述控制設備也可以在所述存儲設備上電初始化后的任一時間,獲取并記錄所述緩存單元的可用存儲空間。

可選的,所述控制設備記錄的所述網卡內存的實時可用存儲空間的形式,可以是所述緩存單元的可存儲數(shù)據(jù)的空間的大小或可被寫入的數(shù)據(jù)塊的個數(shù)。

可選的,所述控制設備在專門的存儲空間中,例如專門的芯片中,存儲所述第一命令隊列對應的緩存單元的存儲空間的實時可用存儲空間。也可以是存儲在所述控制設備中已有的存儲部件中,例如所述控制設備的cpu的緩存中,或所述控制設備的網卡的緩存中,還可以獨立的fpga芯片中的一個存儲空間中。

在一個可能的設計中,所述方法還包括:

所述控制設備在發(fā)送所述第一數(shù)據(jù)讀寫命令后,將本地記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)占用的存儲空間;

所述控制設備在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,將本地記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)占用的存儲空間。

所述控制設備在發(fā)送所述第一數(shù)據(jù)讀寫命令后,所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)會占用所述緩存單元的存儲空間。因此,需要將記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)所占用的存儲空間。所述控制設備在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,所述第一數(shù)據(jù)已經被遷移出所述緩存單元。因此,需要將記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)所占用的存儲空間。這樣,能夠正確記錄所述緩存單元最新的可用存儲空間。

在一個可能的設計中,所述方法還包括:

所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,所述控制設備再次判斷所述第一數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述緩存單元的實時可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于本地記錄的所述緩存單元的實時可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

可選的,所述第一數(shù)據(jù)讀寫命令為寫數(shù)據(jù)命令,所述第一數(shù)據(jù)為需要存儲的數(shù)據(jù)。所述控制設備發(fā)送給所述存儲設備的寫數(shù)據(jù)命令中攜帶sgl(英文:scattergatherlist),所述sgl中包含需要存儲的數(shù)據(jù)在所述控制設備中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址等信息。所述數(shù)據(jù)處理單元可以根據(jù)所述寫數(shù)據(jù)命令中sgl攜帶的所述需要存儲的數(shù)據(jù)在所述控制設備中的源地址,以遠程直接數(shù)據(jù)存取(英文:rdma,remotedirectmemoryaccess)方式接收所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)緩存在所述緩存單元中。在所述需要存儲的數(shù)據(jù)被緩存在所述緩存單元后,所述數(shù)據(jù)處理單元修改所述寫數(shù)據(jù)命令,將所述寫數(shù)據(jù)命令中攜帶的所述需要存儲的數(shù)據(jù)在所述控制設備中的源地址,修改為所述緩存單元中存儲所述需要存儲的數(shù)據(jù)的地址,并將修改后的寫數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。即所述數(shù)據(jù)處理單元發(fā)送給目的硬盤的控制器的寫數(shù)據(jù)命令攜帶的sgl中包括所述緩存單元中存儲所述需要存儲的數(shù)據(jù)的地址,所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址等信息。

其中,目的硬盤是所述數(shù)據(jù)處理單元根據(jù)所述寫數(shù)據(jù)命令中所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址確定的。所述數(shù)據(jù)處理單元能夠根據(jù)所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址,確定所述需要存儲的數(shù)據(jù)在所述存儲設備中的哪個硬盤中,并將所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址所在的硬盤確定為目的硬盤。

所述數(shù)據(jù)處理單元在確定目的硬盤后,將修改后的寫數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。目的硬盤的控制器根據(jù)接收到的寫數(shù)據(jù)命令中攜帶的所述需要存儲的數(shù)據(jù)在所述緩存單元中的地址,從所述緩存單元中讀取所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中??蛇x的,目的硬盤的控制器可以通過rdma或直接內存存取(英文:dma,directmemoryaccess)的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中。

當所述第一數(shù)據(jù)讀寫命令為讀數(shù)據(jù)命令時,所述第一數(shù)據(jù)為需要讀取的數(shù)據(jù)。所述控制設備發(fā)送給所述存儲設備的讀數(shù)據(jù)命令中攜帶sgl,所述sgl中包含需要讀取的數(shù)據(jù)在所述存儲設備中的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述需要讀取的數(shù)據(jù)在所述控制設備中的目的地址等信息。所述數(shù)據(jù)處理單元收到所述讀數(shù)據(jù)命令后,修改所述讀數(shù)據(jù)命令,將所述讀數(shù)據(jù)命令中攜帶的所述需要讀取的數(shù)據(jù)在所述控制設備中的目的地址,修改為所述緩存單元的存儲空間中緩存所述需要讀取的數(shù)據(jù)的地址,并將修改后的讀數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。即所述數(shù)據(jù)處理單元發(fā)送給目的硬盤控制器的讀數(shù)據(jù)命令攜帶的sgl中包括所述需要讀取的數(shù)據(jù)在所述存儲設備中的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述緩存單元的存儲空間中緩存所述需要讀取的數(shù)據(jù)的地址等信息。目的硬盤的控制器根據(jù)接收到的所述修改后的讀數(shù)據(jù)命令,將所述需要讀取的數(shù)據(jù)遷移到所述緩存單元的存儲空間中??蛇x的,目的硬盤的控制器通過rdma或dma的方式,將所述需要讀取的數(shù)據(jù)遷移到所述緩存單元的存儲空間中。

當所述需要讀取的數(shù)據(jù)緩存在所述緩存單元的存儲空間后,所述數(shù)據(jù)處理單元根據(jù)所述讀數(shù)據(jù)命令中所述需要讀取的數(shù)據(jù)要寫入所述控制設備中的目的地址,將緩存的所述需要讀取的數(shù)據(jù)發(fā)送給所述控制設備??蛇x的,所述數(shù)據(jù)處理單元通過rdma的方式,將緩存的所述需要讀取的數(shù)據(jù)發(fā)送給所述控制設備。

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

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

另一方面,本發(fā)明實施例還提供了一種控制設備,所述控制設備是nvmeoverfabric架構中的控制設備,所述控制設備包括處理器、網卡和總線,所述處理器和網卡通過總線連接,所述控制設備與nvmeoverfabric架構中的存儲設備之間進行數(shù)據(jù)傳輸,所述存儲設備包括數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設備需要讀寫的數(shù)據(jù)緩存在所述存儲設備的緩存單元中,并存儲在所述存儲設備的存儲單元;其中,所述處理器用于執(zhí)行下述步驟:

獲取所述緩存單元的可用存儲空間;

判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間;

在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,通過所述網卡發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;

在所述第一數(shù)據(jù)所占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。

上述控制設備在發(fā)送第一數(shù)據(jù)讀寫命令之前,獲取所述緩存單元的可用存儲空間。在所述第一數(shù)據(jù)占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述數(shù)據(jù)處理單元;在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,所述控制設備只在所述緩存單元能夠緩存數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送相應的數(shù)據(jù)讀寫命令,能夠避免所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于或等于緩存單元的可用存儲空間時,因緩存數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

可選的,所述緩存單元的可用存儲空間,是所述數(shù)據(jù)處理單元在接收到所述控制設備發(fā)送的獲取所述緩存單元可用存儲空間的請求時,所述緩存單元中未被占用的存儲空間。

可選的,所述控制設備和所述存儲設備之間可以通過iwarp、roce、infiniband、fc或omni-path等網絡實現(xiàn)連接和通信。

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

在一個可能的設計中,所述處理器獲取所述緩存單元的可用存儲空間包括:

所述處理器在向所述存儲設備發(fā)送第一數(shù)據(jù)讀寫命令之前,向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求,以獲取所述緩存單元的可用存儲空間。

在一個可能的設計中,在所述處理器向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求之前,所述處理器還用于執(zhí)行下述步驟:

向所述存儲設備發(fā)送第二數(shù)據(jù)讀寫命令,所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于所述緩存單元的可用存儲空間;

接收所述數(shù)據(jù)處理單元發(fā)送的反壓消息,所述反壓消息用于指示所述緩存單元的可用存儲空間不足。

其中,所述控制設備在發(fā)送所述第二數(shù)據(jù)讀寫命令前,不需要獲取所述緩存單元的可用存儲空間,直接發(fā)送所述第二數(shù)據(jù)讀寫命令。

這樣,所述控制設備在所述緩存單元的可用存儲空間不足,且不能緩存所述控制設備發(fā)送的所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,才在發(fā)送第一數(shù)據(jù)讀寫命令之前發(fā)送獲取所述緩存單元的可用存儲空間的請求,并在所述緩存單元的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送所述第一數(shù)據(jù)讀寫命令。不僅能夠有效、地解決現(xiàn)有技術中的技術問題,還能夠進一步提升所述控制設備發(fā)送數(shù)據(jù)讀寫命令時的效率,節(jié)省所述控制設備因發(fā)送獲取所述緩存單元可用存儲空間的請求所造成的資源占用。同樣的,由于所述數(shù)據(jù)處理單元也不需要每次數(shù)據(jù)讀寫命令之前都要向所述控制設備返回可用存儲空間,也相應節(jié)省了所述數(shù)據(jù)處理單元的資源占用。

可選的,所述處理器還用于在發(fā)送第一數(shù)據(jù)讀寫命令之前獲取所述緩存單元的可用存儲空間的步驟達到預設時間時,所述緩存單元的可用存儲空間足夠大時,可以不再執(zhí)行在發(fā)送第一數(shù)據(jù)讀寫命令之前獲取所述緩存單元的可用存儲空間的步驟。即所述處理器還用于執(zhí)行下述步驟:暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,重新獲取所述緩存單元的可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。所述預設時間可以根據(jù)不同的業(yè)務場景進行不用的設置。在所述預設時間內,所述緩存單元的可用存儲空間不能滿足所述控制設備發(fā)送的所有數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。在所述預設時間達到后,所述緩存單元的可用存儲空間能滿足所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。

在一個可能的設計中,所述處理器還用于執(zhí)行下述步驟:

在暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,重新獲取所述緩存單元的可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,通過所述網卡發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以通過設定定時器的方式來實現(xiàn)。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以是系統(tǒng)默認的時間或預先配置的時間。

在一個可能的設計中,所述緩存單元的可用存儲空間是本地記錄的所述緩存單元的實時可用存儲空間。

其中,所述本地指的是所述控制設備,所述本地記錄的所述緩存單元的實時可用存儲空間,是所述控制設備記錄的所述緩存單元的實時可用存儲空間。

可選的,所述處理器可以在所述存儲設備上電初始化時,獲取并記錄所述緩存單元的可用存儲空間。所述處理器也可以在所述存儲設備上電初始化后的任一時間,獲取并記錄所述緩存單元的可用存儲空間。

可選的,所述控制設備記錄的所述緩存單元的實時可用存儲空間的形式,可以是所述緩存單元的可存儲數(shù)據(jù)的空間的大小或可被寫入的數(shù)據(jù)塊的個數(shù)。

可選的,所述控制設備在專門的存儲空間中,例如專門的芯片中,存儲所述第一命令隊列對應的緩存單元的存儲空間的實時可用存儲空間。也可以是存儲在所述控制設備中已有的存儲部件中,例如所述控制設備的cpu的緩存中,或所述控制設備的網卡的緩存中,還可以獨立的fpga芯片中的一個存儲空間中,存儲所述第一命令隊列對應的緩存單元的存儲空間的實時可用存儲空間。

在一個可能的設計中,所述處理器還用于執(zhí)行下述步驟:

在發(fā)送所述第一數(shù)據(jù)讀寫命令后,將本地記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)占用的存儲空間;

在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,將本地記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)占用的存儲空間。

所述處理器在發(fā)送所述第一數(shù)據(jù)讀寫命令后,所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)會占用所述緩存單元的存儲空間。因此,需要將記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)所占用的存儲空間。所述處理器在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,所述第一數(shù)據(jù)已經被遷移出所述緩存單元。因此,需要將記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)所占用的存儲空間。這樣,能夠正確記錄所述緩存單元最新的可用存儲空間。

在一個可能的設計中,所述處理器還用于執(zhí)行下述步驟:

暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,再次判斷所述第一數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述緩存單元的實時可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于本地記錄的所述緩存單元的實時可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

在一個可能的設計中,所述處理器執(zhí)行的步驟還包括:

在通過所述網卡發(fā)送所述第一數(shù)據(jù)讀寫命令給所述遠端網卡后,將記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)占用的存儲空間;在接收到所述遠端網卡發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,將記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)占用的存儲空間。

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

所述控制設備,用于在獲取所述緩存單元的可用存儲空間,判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間;

所述控制設備,還用于在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;在所述第一數(shù)據(jù)所占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令;

所述數(shù)據(jù)處理單元,用于接收所述控制設備發(fā)送的所述第一數(shù)據(jù)讀寫命令,并將所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)緩存在所述緩存單元中。

通過上述系統(tǒng),所述控制設備在發(fā)送第一數(shù)據(jù)讀寫命令之前,獲取所述緩存單元的可用存儲空間。在所述第一數(shù)據(jù)占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述數(shù)據(jù)處理單元;在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,所述控制設備只在所述緩存單元能夠緩存數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送相應的數(shù)據(jù)讀寫命令,能夠避免所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于或等于緩存單元的可用存儲空間時,因緩存數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

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

在一個可能的設計中,所述控制設備獲取所述緩存單元的可用存儲空間包括:

所述控制設備在向所述存儲設備發(fā)送第一數(shù)據(jù)讀寫命令之前,向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求,以獲取所述緩存單元的可用存儲空間。

可選的,所述緩存單元的可用存儲空間,是所述數(shù)據(jù)處理單元在接收到所述控制設備發(fā)送的獲取所述緩存單元可用存儲空間的請求時,所述緩存單元中未被占用的存儲空間。

可選的,所述控制設備和所述存儲設備之間可以通過iwarp、roce、infiniband、fc或omni-path等網絡實現(xiàn)連接和通信。

可選的,所述控制設備可以是物理服務器或物理服務器上的虛擬機。所述存儲設備中的存儲單元可以為一個或一個以上的固態(tài)磁盤(英文:ssd,solidstatedisk)或硬盤驅動器(英文:hdd,harddiskdriver)。所述緩存單元可以位于所述數(shù)據(jù)處理單元中,也可以獨立于所述數(shù)據(jù)處理單元的存儲介質,例如可以是獨立于數(shù)據(jù)處理單元的雙倍數(shù)據(jù)速率(英文:ddr,doubledatarate)。所述緩存單元還可以是所述存儲設備中多個數(shù)據(jù)處理單元的內存資源共同構成的一個內存資源池。

在一個可能的設計中,在所述控制設備向所述數(shù)據(jù)處理單元發(fā)送獲取所述緩存單元的可用存儲空間的請求之前,所述控制設備還用于向所述存儲設備發(fā)送第二數(shù)據(jù)讀寫命令,所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)大于所述緩存單元的可用存儲空間;并接收所述數(shù)據(jù)處理單元發(fā)送的反壓消息,所述反壓消息用于指示所述緩存單元的可用存儲空間不足。

其中,所述控制設備在發(fā)送所述第二數(shù)據(jù)讀寫命令前,不需要獲取所述緩存單元的可用存儲空間,直接發(fā)送所述第二數(shù)據(jù)讀寫命令。

這樣,所述控制設備在所述緩存單元的可用存儲空間不足,且不能緩存所述控制設備發(fā)送的所述第二數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,才在發(fā)送第一數(shù)據(jù)讀寫命令之前發(fā)送獲取所述緩存單元的可用存儲空間的請求,并在所述緩存單元的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時才發(fā)送所述第一數(shù)據(jù)讀寫命令。不僅能夠有效、地解決現(xiàn)有技術中的技術問題,還能夠進一步提升所述控制設備發(fā)送數(shù)據(jù)讀寫命令時的效率,節(jié)省所述控制設備因發(fā)送獲取所述緩存單元可用存儲空間的請求所造成的資源占用。同樣的,由于所述數(shù)據(jù)處理單元也不需要每次數(shù)據(jù)讀寫命令之前都要向所述控制設備返回可用存儲空間,也相應節(jié)省了所述數(shù)據(jù)處理單元的資源占用。

可選的,所述控制設備執(zhí)行在發(fā)送第一數(shù)據(jù)讀寫命令之前獲取所述緩存單元的可用存儲空間的步驟達到預設時間時,所述緩存單元的可用存儲空間足夠大時,可以不再在發(fā)送第一數(shù)據(jù)讀寫命令之前,發(fā)送獲取所述緩存單元的可用存儲空間的請求。即所述控制設備只在預設時間內獲取緩存單元的可用存儲空間以及判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間。所述預設時間可以根據(jù)不同的業(yè)務場景進行不用的設置。在所述預設時間內,所述緩存單元的可用存儲空間不能滿足所述控制設備發(fā)送的所有數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。在所述預設時間達到后,所述緩存單元的可用存儲空間能滿足所述控制設備發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)對存儲空間的需求。

在一個可能的設計中,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,重獲取所述緩存單元的可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以通過設定定時器的方式來實現(xiàn)。

可選的,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間,可以是系統(tǒng)默認的時間或預先配置的時間。

在一個可能的設計中,所述緩存單元的可用存儲空間是本地記錄的所述緩存單元的實時可用存儲空間。

其中,所述本地指的是所述控制設備,所述本地記錄的所述緩存單元的實時可用存儲空間,是所述控制設備記錄的所述緩存單元的實時可用存儲空間。

可選的,所述控制設備可以在所述存儲設備上電初始化時,獲取并記錄所述緩存單元的可用存儲空間。所述控制設備也可以在所述存儲設備上電初始化后的任一時間,獲取并記錄所述緩存單元的可用存儲空間。

可選的,所述控制設備記錄的所述網卡內存的實時可用存儲空間的形式,可以是所述緩存單元的可存儲數(shù)據(jù)的空間的大小或可被寫入的數(shù)據(jù)塊的個數(shù)。

可選的,所述控制設備在專門的存儲空間中,例如專門的芯片中,存儲所述第一命令隊列對應的緩存單元的存儲空間的實時可用存儲空間。也可以是存儲在所述控制設備中已有的存儲部件中,例如所述控制設備的cpu的緩存中,或所述控制設備的網卡的緩存中,還可以獨立的fpga芯片中的一個存儲空間中,存儲所述第一命令隊列對應的緩存單元的存儲空間的實時可用存儲空間。

在一個可能的設計中,所述控制設備在發(fā)送所述第一數(shù)據(jù)讀寫命令后,將本地記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)占用的存儲空間;

所述控制設備在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,將本地記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)占用的存儲空間。

所述控制設備在發(fā)送所述第一數(shù)據(jù)讀寫命令后,所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)會占用所述緩存單元的存儲空間。因此,需要將記錄的所述緩存單元的實時可用存儲空間減去所述第一數(shù)據(jù)所占用的存儲空間。所述控制設備在接收到所述數(shù)據(jù)處理單元發(fā)送的完成所述第一數(shù)據(jù)讀寫命令的響應消息后,所述第一數(shù)據(jù)已經被遷移出所述緩存單元。因此,需要將記錄的所述緩存單元的實時可用存儲空間加上所述第一數(shù)據(jù)所占用的存儲空間。這樣,能夠正確記錄所述緩存單元最新的可用存儲空間。

在一個可能的設計中,所述控制設備暫停發(fā)送所述第一數(shù)據(jù)讀寫命令達到預設時間后,所述控制設備再次判斷所述第一數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述緩存單元的實時可用存儲空間,并在所述第一數(shù)據(jù)所占用的存儲空間小于或等于本地記錄的所述緩存單元的實時可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備。

可選的,所述第一數(shù)據(jù)讀寫命令為寫數(shù)據(jù)命令,所述第一數(shù)據(jù)為需要存儲的數(shù)據(jù)。所述控制設備發(fā)送給所述存儲設備的寫數(shù)據(jù)命令中攜帶sgl,所述sgl中包含需要存儲的數(shù)據(jù)在所述控制設備中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址等信息。所述數(shù)據(jù)處理單元可以根據(jù)所述寫數(shù)據(jù)命令中sgl攜帶的所述需要存儲的數(shù)據(jù)在所述控制設備中的源地址,以rdma方式接收所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)緩存在所述緩存單元中。在所述需要存儲的數(shù)據(jù)被緩存在所述緩存單元后,所述數(shù)據(jù)處理單元修改所述寫數(shù)據(jù)命令,將所述寫數(shù)據(jù)命令中攜帶的所述需要存儲的數(shù)據(jù)在所述控制設備中的源地址,修改為所述緩存單元中存儲所述需要存儲的數(shù)據(jù)的地址,并將修改后的寫數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。即所述數(shù)據(jù)處理單元發(fā)送給目的硬盤的控制器的寫數(shù)據(jù)命令攜帶的sgl中包括所述緩存單元中存儲所述需要存儲的數(shù)據(jù)的地址,所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址等信息。

其中,目的硬盤是所述數(shù)據(jù)處理單元根據(jù)所述寫數(shù)據(jù)命令中所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址確定的。所述數(shù)據(jù)處理單元能夠根據(jù)所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址,確定所述需要存儲的數(shù)據(jù)在所述存儲設備中的哪個硬盤中,并將所述需要存儲的數(shù)據(jù)在所述存儲設備中的目的地址所在的硬盤確定為目的硬盤。

所述數(shù)據(jù)處理單元在確定目的硬盤后,將修改后的寫數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。目的硬盤的控制器根據(jù)接收到的寫數(shù)據(jù)命令中攜帶的所述需要存儲的數(shù)據(jù)在所述緩存單元中的地址,從所述數(shù)據(jù)處理單元緩存單元中讀取所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中??蛇x的,目的硬盤的控制器可以通過rdma或dma的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中。

當所述第一數(shù)據(jù)讀寫命令為讀數(shù)據(jù)命令時,所述第一數(shù)據(jù)為需要讀取的數(shù)據(jù)。所述控制設備發(fā)送給所述存儲設備的讀數(shù)據(jù)命令中攜帶sgl,所述sgl中包含需要讀取的數(shù)據(jù)在所述存儲設備中的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述需要讀取的數(shù)據(jù)在所述控制設備中的目的地址等信息。所述數(shù)據(jù)處理單元收到所述讀數(shù)據(jù)命令后,修改所述讀數(shù)據(jù)命令,將所述讀數(shù)據(jù)命令中攜帶的所述需要讀取的數(shù)據(jù)在所述控制設備中的目的地址,修改為所述緩存單元的存儲空間中緩存所述需要讀取的數(shù)據(jù)的地址,并將修改后的讀數(shù)據(jù)命令發(fā)送給目的硬盤的控制器。即所述數(shù)據(jù)處理單元發(fā)送給目的硬盤控制器的讀數(shù)據(jù)命令攜帶的sgl中包括所述需要讀取的數(shù)據(jù)在所述存儲設備中的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述緩存單元的存儲空間中緩存所述需要讀取的數(shù)據(jù)的地址等信息。目的硬盤的控制器根據(jù)接收到的所述修改后的讀數(shù)據(jù)命令,將所述需要讀取的數(shù)據(jù)遷移到所述緩存單元的存儲空間中。可選的,目的硬盤的控制器通過rdma或dma的方式,將所述需要讀取的數(shù)據(jù)遷移到所述緩存單元的存儲空間中。

當所述需要讀取的數(shù)據(jù)緩存在所述緩存單元的存儲空間后,所述數(shù)據(jù)處理單元根據(jù)所述讀數(shù)據(jù)命令中所述需要讀取的數(shù)據(jù)要寫入所述控制設備中的目的地址,將緩存的所述需要讀取的數(shù)據(jù)發(fā)送給所述控制設備??蛇x的,所述數(shù)據(jù)處理單元通過rdma的方式,將緩存的所述需要讀取的數(shù)據(jù)發(fā)送給所述控制設備。

在一個可能的設計中,所述數(shù)據(jù)處理單元與所述存儲單元之間通過nvme,nvmeoverpcie,架構實現(xiàn)連接。

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

附圖說明

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

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

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

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

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

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

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

圖6為本發(fā)明實施例一種控制設備600的結構示意圖;

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

具體實施方式

下面結合附圖,對本發(fā)明的實施例進行描述。

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

參考圖1,圖1為現(xiàn)有技術中nvmeoverfabric一種實現(xiàn)方式架構示意圖。圖1中包括host100、target200和target210。其中,host100是主機,主要負責發(fā)起數(shù)據(jù)的讀寫,例如發(fā)送數(shù)據(jù)讀寫命令等。target200和target210是目標存儲設備,在nvme協(xié)議中也稱為nvmsubsystem,主要負責接收并且執(zhí)行主機host100發(fā)送的數(shù)據(jù)讀寫命令。其中,主機host100的具體形態(tài)包括但不限于物理服務器或物理服務器上的虛擬機,所述物理服務器可以是包括cpu、內存和網卡等組成部件的計算機設備等。target200可以是一個獨立的物理硬盤系統(tǒng),如圖1所示,target200包括網卡201和一個以上的硬盤,網卡201和一個以上的硬盤分別連接。需要說明的是,圖1中以三個硬盤為例進行說明,在具體實現(xiàn)時,target200可以包括一個以上的硬盤。target200中的硬盤可以是固態(tài)磁盤(英文:ssd,solidstatedisk)或硬盤驅動器(英文:hdd,harddiskdriver)等具備存儲功能的存儲介質。其中網卡201具有網絡接口卡的功能,可以是nvmeoverfabric中的遠端網絡接口卡(英文:rnic,remotenetworkinterfacecard),網卡201通過fabric與host100進行與數(shù)據(jù)讀寫命令或數(shù)據(jù)傳輸相關的通信。

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

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

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

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

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

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

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

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

上述步驟s102中,可能會出現(xiàn)網卡201中網卡內存的存儲空間不足的情況。例如:當前網卡201的網卡內存剩余的存儲存儲空間為10kbytes,但是需要緩存的數(shù)據(jù)長度為20kbytes。此時網卡201會因無足夠存儲空間來緩存所述需要存儲的數(shù)據(jù),導致分配存儲空間失敗。網卡201需要等到網卡內存有其它存儲空間被釋放后,在網卡內存的可用存儲空間大于或等于所述需要存儲的數(shù)據(jù)所占用的存儲空間時,才能再次分配緩存所述需要存儲的數(shù)據(jù)的存儲空間。

同樣的,當host100向target200發(fā)送讀取數(shù)據(jù)請求時,host100會發(fā)送readcommand到網卡201。如果需要讀取的數(shù)據(jù)超過readcommand自身能夠攜帶的數(shù)據(jù)量,所述readcommand中包括sgl,該sgl攜帶需要讀取的數(shù)據(jù)在target200中的源地址,所述需要讀取的數(shù)據(jù)的長度以及所述需要讀取的數(shù)據(jù)在host100中的目的地址。

當網卡201緩存所述需要讀取的數(shù)據(jù)時,如果網卡內存的可用存儲空間小于所述需要讀取的數(shù)據(jù)所占用的存儲空間,則網卡201需要等到網卡內存有其它存儲空間被釋放,且網卡內存的可用存儲空間大于或等于所述需要讀取的數(shù)據(jù)所占用的存儲空間之后,才能再次分配緩存所述需要讀取的數(shù)據(jù)的存儲空間并緩存所述需要讀取的數(shù)據(jù)。

上述host100向target200寫入數(shù)據(jù)或讀取數(shù)據(jù)的過程中,網卡201中網卡內存的動態(tài)管理(例如查找空閑存儲空間,等待其它存儲空間被釋放,再次申請可用存儲空間等)操作會給網卡201的設計和實現(xiàn)帶來很多的復雜性,例如,這些復雜性至少包括下述之一:

1)當網卡201的網卡內存的存儲空間小于需要傳輸數(shù)據(jù)所占用的存儲空間時,網卡201需要暫時緩存對應的writecommand或readcommand;

2)當網卡201長時間沒有申請到有效存儲空間(例如網卡201的網卡內存長時間沒有可用存儲空間)的時候,需要設計一種機制老化(例如刪除)長時間被緩存的writecommand或readcommand;

3)老化掉長時間緩存的writecommand或readcommand之后,還需要一種機制通知host100,并通知host100重新發(fā)送相關的命令和數(shù)據(jù)。

需要說明的是以上以writecommand或readcommand中攜帶sgl為例進行說明,實際使用場景中,也可以是由writecommand或readcommand直接攜帶相應數(shù)據(jù),也同樣存在上述問題;或者,在host100與target200基于其他的交互機制下,例如采用其他不同于rdma命令的方式進行交互,如果在target200中也是采用網卡內存的動態(tài)管理機制,也同樣存在上述問題。以上場景僅是為了說明已有技術方案的問題所列舉的場景實例之一而已,該具體實例并不構成本發(fā)明應用場景的限制。

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

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

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

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

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

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

target400是目標存儲設備,在nvmeoverfabric架構中也稱為nvmsubsystem,主要負責接收并且執(zhí)行主機host300發(fā)送的讀寫命令。target400中的硬盤可以是ssd或hdd等具有存儲功能的介質,圖2中以三個硬盤為例進行說明。網卡401包括網卡處理器4011和網卡內存4012。網卡401具有網絡接口卡的功能,可以是nvmeoverfabric中的rnic,網卡401通過nvmeoverfabric架構中的網絡與host300進行與數(shù)據(jù)讀寫命令或數(shù)據(jù)傳輸相關的通信。圖2以網卡內存4012位于網卡401中,即網卡401中包括網卡內存4012為例進行說明。在具體實現(xiàn)時,網卡內存4012也可以位于網卡401的外部,即target400中的網卡內存可以是獨立于網卡401的存儲介質。本發(fā)明實施例中,獨立于網卡401的存儲介質,可以是雙倍數(shù)據(jù)速率(ddr,doubledatarate)等存儲介質。作為另一種可選的實現(xiàn)方式,網卡401的網卡內存4012也可以是target400中多個網卡的內存資源共同構成的一個內存資源池。本發(fā)明實施例不限定網卡內存的具體呈現(xiàn)形式。

為避免已有技術中因網卡401的網卡內存的存儲空間不足,不能緩存host300發(fā)送的數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)所帶來的復雜處理機制問題,下面以host300需要向target400發(fā)送寫命令,以向target400寫入需要存儲的數(shù)據(jù)為例,對本發(fā)明實施例提供的nvmeoverfabric中數(shù)據(jù)讀寫命令的控制方法進行詳細說明。

當host300需要向target400寫入需要存儲的數(shù)據(jù)時,host300先獲取target400中網卡內存4012的可用存儲空間。在網卡內存4012的可用存儲空間大于或等于所述需要存儲的數(shù)據(jù)所占用的存儲空間時,host300才向網卡401發(fā)送攜帶所述需要存儲的數(shù)據(jù)地址信息和長度的writecommand。這樣,能夠避免網卡內存4012因可用存儲空間不足,緩存host300的writecommand所帶來的復雜處理機制的問題。具體的,如圖3所示,上述方法的具體實現(xiàn)過程為:

步驟100:host300在向target400發(fā)送寫數(shù)據(jù)命令之前,向網卡401發(fā)送獲取所網卡內存4012可用存儲空間的請求;

其中,所述網卡內存4012可用存儲空間,是網卡401在接收到host300發(fā)送的獲取所述網卡內存4012可用存儲空間的請求時,網卡內存4012中未被占用的存儲空間??梢岳斫猓W卡內存4012中未被占用的存儲空間,是網卡內存4012中未被用于緩存數(shù)據(jù)的空間。例如,當網卡內存4012中緩存有數(shù)據(jù),這些數(shù)據(jù)還未被寫入硬盤或還未被host300讀取時,緩存的數(shù)據(jù)會占用網卡內存4012的存儲空間,已經被占用的存儲空間不能被用于緩存其它數(shù)據(jù)。

所述需要存儲的數(shù)據(jù),是所述host300要寫入target400的數(shù)據(jù)。host300需要通過writecommand將所述需要存儲的數(shù)據(jù)發(fā)送給網卡401。例如,host300在writecommand攜帶sgl,該sgl包括需要存儲的數(shù)據(jù)在host300中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息,并將攜帶該sgl的writecommand發(fā)送給網卡401。

host300向網卡401發(fā)送獲取所述網卡內存4012可用存儲空間的請求,可以通過發(fā)送請求消息來實現(xiàn)。所述請求消息攜帶請求網卡401返回網卡內存4012可用存儲空間的信息。所述請求消息可以通過任何一種消息形式實現(xiàn)。所述網卡內存4012返回的可用存儲空間的信息,也可以通過任何一種表述網卡內存4012可用存儲空間的信息的形式來實現(xiàn)。例如,所述請求消息可以是一個請求報文,該請求報文中包含獲取網卡內存4012的可用存儲空間的字段。本發(fā)明實施例不限定請求消息的形式,也不限定請求消息中攜帶的指示網卡401返回網卡內存4012可用存儲空間的信息的形式?;蛘撸琱ost300也可以通過讀取記錄有網卡內存4012可用存儲空間信息的寄存器,來獲取網卡內存4012可用存儲空間的信息。

步驟102:host300接收所述網卡401返回的所述網卡內存4012的可用存儲空間;

具體的,可以是網卡401接收到host300發(fā)送的獲取所述網卡內存4012可用存儲空間的請求后,將所述網卡內存4012可用存儲空間的信息攜帶在響應消息中返回給host300,host300獲取所述響應消息中攜帶的所述網卡內存4012可用存儲空間的信息。

其中,所述網卡401返回的所述網卡內存4012的可用存儲空間,是所述網卡401接收到host300發(fā)送的請求時網卡內存4012的可用存儲空間。因此,網卡401返回給host300的所述網卡內存4012的可用存儲空間,也是所述網卡內存4012的實時可用存儲空間。

步驟104:host300根據(jù)獲取到的所述網卡內存4012可用存儲空間的信息,判斷所述需要存儲的數(shù)據(jù)所占用的存儲空間是否小于或等于所述網卡內存4012可用存儲空間;

例如,所述網卡內存4012的可用存儲空間的大小為100mb,所述需要存儲的數(shù)據(jù)所占用的存儲空間為50mb,在判斷所述需要存儲的數(shù)據(jù)所占用的存儲空間是否小于或等于所述網卡內存4012可用存儲空間時,可以通過判斷50mb小于100mb來實現(xiàn)。或者,所述網卡內存4012的可用存儲空間的長度為50個數(shù)據(jù)塊,所述需要存儲的數(shù)據(jù)所占用的存儲空間為60個數(shù)據(jù)塊,在判斷所述需要存儲的數(shù)據(jù)所占用的存儲空間是否小于或等于所述網卡內存4012可用存儲空間時,可以通過判斷60個數(shù)據(jù)塊大于50個數(shù)據(jù)塊來實現(xiàn)。

步驟106:當所述需要存儲的數(shù)據(jù)所占用的存儲空間小于或等于所述網卡內存4012可用存儲空間時,所述host300發(fā)送所述寫數(shù)據(jù)命令給所述target400;

具體的比較可以參考上面的描述。一個具體的實施方式中,所述host300發(fā)送所述寫數(shù)據(jù)命令給所述target400可以是所述host300將所述寫數(shù)據(jù)命令發(fā)送給所述網卡401,并在所述寫數(shù)據(jù)命令中攜帶sgl,在所述sgl中攜帶需要存儲的數(shù)據(jù)的地址信息和所述需要存儲的數(shù)據(jù)的長度。即所述sgl中包含需要存儲的數(shù)據(jù)在host300中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息。

步驟108:所述target400中的網卡401接收所述寫數(shù)據(jù)命令,將所述寫數(shù)據(jù)命令所要存儲的數(shù)據(jù)緩存在網卡內存4012中;

具體的,網卡401可以根據(jù)所述writecommand中sgl攜帶的所述需要存儲的數(shù)據(jù)在host300中的源地址,以rdma方式通過網卡303接收所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)緩存在所述網卡內存4012中。

步驟110:當所述需要存儲的數(shù)據(jù)所占用的存儲空間大于所述網卡內存4012的可用存儲空間時,所述host300暫停發(fā)送所述寫數(shù)據(jù)命令。

這樣,host300會在網卡內存4012的可用存儲空間能夠緩存需要存儲的數(shù)據(jù)時,才通過writecommand發(fā)送需要存儲的數(shù)據(jù),能夠避免網卡內存4012的可用存儲空間不足而緩存writecommand所帶來的處理機制復雜的問題。

可選的,所述host300暫停發(fā)送所述寫數(shù)據(jù)命令達到預設時間后,可以再重新發(fā)送獲取網卡內存4012的可用存儲空間的請求,以判斷網卡內存4012的可用存儲空間是否能夠緩存所述寫數(shù)據(jù)命令所要存儲的數(shù)據(jù)。即重新執(zhí)行步驟100,直到host300將所述需要存儲的數(shù)據(jù)緩存在所述網卡內存4012中。

所述host300暫停發(fā)送所述寫數(shù)據(jù)命令的預設時間,可以是系統(tǒng)默認的時間或預先配置的時間。在所述預設時間設定的時間范圍內,host300不執(zhí)行步驟100。具體的,可以通過在host300中設定定時器的方式,設定所述host300暫停發(fā)送所述需要存儲的數(shù)據(jù)的預設時間,host300在定時器設定的時間到達后再啟動執(zhí)行步驟100-步驟110??梢岳斫?,所述host300暫停發(fā)送所述寫數(shù)據(jù)命令的預設時間,可以根據(jù)具體的業(yè)務情況進行靈活設定。

上述步驟108中,所述需要存儲的數(shù)據(jù)被緩存在網卡內存4012,或者在上述步驟110之后,所述host300暫停發(fā)送所述寫數(shù)據(jù)命令達到預設時間并再次執(zhí)行步驟100-步驟110,并將所述需要存儲的數(shù)據(jù)緩存在網卡內存4012;在這兩種情況下,緩存在網卡內存4012中的所述需要存儲的數(shù)據(jù)會被遷移到target400的硬盤中。具體的,在所述需要存儲的數(shù)據(jù)被緩存在網卡內存4012后,網卡401修改所述writecommand,將所述writecommand攜帶的所述需要存儲的數(shù)據(jù)在host300中的源地址,修改為網卡內存4012中存儲所述需要存儲的數(shù)據(jù)的地址,并將修改后的writecommand發(fā)送給目的硬盤的控制器。即網卡401發(fā)送給目的硬盤的控制器的writecommand攜帶的sgl中包括網卡內存4012中存儲所述需要存儲的數(shù)據(jù)的地址,所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息。

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

網卡401在確定目的硬盤后,將修改后的writecommand發(fā)送給目的硬盤的控制器。目的硬盤的控制器根據(jù)接收到的writecommand中攜帶的所述需要存儲的數(shù)據(jù)在所述網卡內存4012中的地址,從網卡內存4012中讀取所述需要存儲的數(shù)據(jù),并將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中??蛇x的,目的硬盤的控制器可以通過rdma或直接內存存取(英文:dma,directmemoryaccess)的方式,將所述需要存儲的數(shù)據(jù)寫入目的硬盤的目的地址對應的存儲空間中。本發(fā)明實施例中,網卡401與target400中的硬盤之間,基于nvmeoverpcie架構實現(xiàn)連接。因此,target400中目的硬盤的控制器與網卡401之間,可以通過nvmeoverpcie連接和通信方式,即目的硬盤的控制器可以基于nvmeoverpcie協(xié)議規(guī)定的方式,將所述需要存儲的數(shù)據(jù)從網卡內存4012寫入目的硬盤中。

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

在具體實現(xiàn)時,當網卡內存4012的可用存儲空間足夠大且可以緩存較多的數(shù)據(jù)時,網卡內存4012的可用存儲空間能夠緩存host300需要存儲的數(shù)據(jù)時,host300可以不用在每次發(fā)送數(shù)據(jù)讀寫命令之前,都發(fā)送獲取網卡內存4012可用存儲空間信息的請求。本發(fā)明實施例提供的另一種可選的實現(xiàn)方式為:

host300可以直接發(fā)送數(shù)據(jù)讀寫命令給網卡401,在接收到網卡401發(fā)送的不能緩存需要存儲的數(shù)據(jù)的反壓報文時,才啟動上述步驟100-步驟110的流程。

例如,host300在發(fā)送寫數(shù)據(jù)命令,例如發(fā)送第二寫數(shù)據(jù)命令時,直接發(fā)送該第二寫數(shù)據(jù)命令給網卡401,不需要獲取網卡內存4012的可用存儲空間。當host300發(fā)送該第二寫數(shù)據(jù)命令給網卡401后,如果網卡內存4012的可用存儲空間不能緩存該第二寫數(shù)據(jù)命令要所要傳輸?shù)臄?shù)據(jù),即不能緩存該第二寫數(shù)據(jù)命令所要存儲的數(shù)據(jù)時,網卡401會給host300返回一個反壓消息。該返壓消息指示網卡內存4012的存儲空間不足,不能緩存host300發(fā)送的所述第二寫數(shù)據(jù)命令所要存儲的數(shù)據(jù)。

host300在收到網卡401發(fā)送的不能緩存需要存儲的數(shù)據(jù)的反壓報文時,才啟動上述步驟100-步驟110的流程。即host300在收到網卡401返回的反壓報文后,在發(fā)送其它數(shù)據(jù)讀寫命令之前,向網卡401發(fā)送獲取所網卡內存4012可用存儲空間的請求,在判斷網卡內存4012可用存儲空間大于或等于需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間時,才通過數(shù)據(jù)讀寫命令發(fā)送其它數(shù)據(jù)讀寫命令。

需要說明的是,本發(fā)明實施例中第一數(shù)據(jù)讀寫命令和第二數(shù)據(jù)讀寫命令只是用于區(qū)分不同的數(shù)據(jù)讀寫命令,不代表它們之間存在先后優(yōu)劣關系。

進一步的,在執(zhí)行步驟100-步驟110的流程達到預設時間后,所述網卡內存4021的存儲空間恢復到有足夠空間存儲待存儲的數(shù)據(jù)時,可以不用再執(zhí)行步驟100-步驟110的過程。即在執(zhí)行步驟100-步驟110的流程達到預設時間后,當需要向網卡401發(fā)送需要存儲的數(shù)據(jù)時,host300直接將需要存儲的數(shù)據(jù)發(fā)送給網卡401,不再發(fā)送獲取網卡內存4012可用存儲空間的請求。所述執(zhí)行步驟100-步驟110的流程的預設時間,可以根據(jù)需要具體的設定,可以是系統(tǒng)默認的時間,也可以是基于管理員預先下發(fā)的設定時間。并且,執(zhí)行步驟100-步驟110的流程的預設時間,可以根據(jù)實際的業(yè)務情況實時的變更,例如在網卡內存4021的存儲空間占用率較高的情況下,執(zhí)行步驟100-步驟110流程的預設時間長;在網卡內存4021的存儲空間占用率較低的情況下,執(zhí)行步驟100-步驟110流程的預設時間短等。

這樣,可以只在網卡內存4012出現(xiàn)存儲空間不足的情況下,host300在向target400發(fā)送數(shù)據(jù)讀寫命令之前才向網卡401發(fā)送獲取所述網卡內存4012可用存儲空間的請求,并基于網卡401返回的網卡內存4012可用存儲空間決定是否發(fā)送數(shù)據(jù)讀寫命令。不僅能夠有效、地解決現(xiàn)有技術中的技術問題,還能夠進一步提升host300發(fā)送數(shù)據(jù)讀寫命令時的效率,節(jié)省host300因發(fā)送獲取所述網卡內存4012可用存儲空間的請求所造成的資源占用。同樣的,由于網卡401也不需要每次數(shù)據(jù)讀寫命令之前都要向host300返回可用存儲空間,也相應節(jié)省了網卡401的資源占用。

上述實施例中,網卡401向host300發(fā)送的反壓消息,可以是直接產生的消息,也可以是通過響應消息攜帶的消息。例如可以是網卡內存4012的可用存儲空間不足時直接產生的消息;也可以是網卡401向host300返回的對writecommand的響應消息,在響應消息中攜帶網卡內存4012的可用存儲空間不足的信息。其它類型的消息或報文,只要能夠攜帶指示網卡內存4012的可用存儲空間不足,且不能緩存host300需要存儲的數(shù)據(jù)的消息,都可以作為網卡401向host300發(fā)送的反壓消息??蛇x的,所述反壓消息中攜帶的指示網卡內存4012可用存儲空間不足且不能存儲host300需要存儲的數(shù)據(jù)的信息,可以是錯誤碼或預先設定的標識等,只要能夠指示或通知host300,網卡內存4012的可用存儲空間不能存儲host300發(fā)送的需要存儲的數(shù)據(jù)的信息,都可以作為反壓消息中攜帶的用于指示網卡內存4012的可用存儲空間不足的信息。

進一步的,host300接收到內存401發(fā)送的反壓消息后,在執(zhí)行步驟100-步驟110的過程中,還包括重傳因網卡內存4021的可用存儲空間不足而被執(zhí)行的數(shù)據(jù)讀寫命令,例如上述第二寫數(shù)據(jù)命令。即對于網卡401因網卡內存4021可用存儲空間不足產生反壓消息時未被執(zhí)行的數(shù)據(jù)讀寫命令,host300在判斷網卡內存4021的可用存儲空間能夠存儲該數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,host300重新發(fā)送該數(shù)據(jù)讀寫命令。

本發(fā)明實施例中,可以是host300中的cpu301執(zhí)行步驟100-步驟106以及步驟110的過程,也可以是host300中的網卡303執(zhí)行步驟100-步驟106以及步驟110的過程。還可以是host300中的某一芯片或邏輯部件,來執(zhí)行步驟100-步驟106以及步驟110的過程,例如可以是fpga芯片等執(zhí)行步驟100-步驟110的過程。

在實際實現(xiàn)中,上述步驟100-步驟106以及步驟110也可以由cpu301、網卡303、host300中的某一芯片或邏輯部件中的至少其中一個來實現(xiàn)。例如,網卡303執(zhí)行上述步驟100-步驟104,cpu301執(zhí)行上述步驟106和步驟110;或者,cpu301執(zhí)行上述步驟100-步驟104,網卡303執(zhí)行上述步驟106和步驟110。也可以是host300中的芯片或邏輯部件執(zhí)行上述步驟100和步驟102,cpu301執(zhí)行上述步驟104、步驟106和步驟110;或者,網卡303執(zhí)行上述步驟100和步驟102,host300中的芯片或邏輯部件執(zhí)行上述步驟104、步驟106和步驟110等。本發(fā)明實施例不限定具體的執(zhí)行步驟100-步驟106以及步驟110中的執(zhí)行主體的實現(xiàn)方式。

當上述host300是通過虛擬機實現(xiàn)時,上述cpu301、網卡303分別對應虛擬機中的cpu和網卡,虛擬機中的cpu和網卡通過承載其虛擬功能的物理cpu和物理網卡來實現(xiàn)。其實現(xiàn)方式與上述實現(xiàn)方式類似,不再贅述。

對于host300從target400讀取數(shù)據(jù)的實現(xiàn)方式,與上述host300向target400寫入數(shù)據(jù)的實現(xiàn)方式類似,可以參照上述host300向target400發(fā)送寫數(shù)據(jù)命的過程來實現(xiàn)。即當host300向target400發(fā)送的數(shù)據(jù)讀寫命令為讀數(shù)據(jù)命令時,其實現(xiàn)過程與上述數(shù)據(jù)讀寫命令為寫數(shù)據(jù)命令的過程類似。例如host300在向target400發(fā)送讀數(shù)據(jù)命令之前,向網卡401發(fā)送獲取所述網卡內存4012可用存儲空間的請求;host300根據(jù)獲取到的所述網卡內存4012可用存儲空間,判斷需要讀取的數(shù)據(jù)所占用的存儲空間是否小于或等于所述網卡內存4012的可用存儲空間。當需要讀取的數(shù)據(jù)所占用的存儲空間小于或等于所述網卡內存4012可用存儲空間時,host300將readcommand發(fā)送給所述網卡401;當需要讀取的數(shù)據(jù)所占用的存儲空間大于所述網卡內存4012可用存儲空間時,host300暫停發(fā)送所述readcommand。這樣就避免了在讀取數(shù)據(jù)的過程中因網卡內存4012的存儲空間不夠、緩存readcommand所帶來的問題。并且,host300在向target400發(fā)送讀數(shù)據(jù)命令之前,向網卡401發(fā)送獲取所述網卡內存4012可用存儲空間的請求,是在host300接收到網卡401發(fā)送的不能緩存需要存儲的數(shù)據(jù)的反壓報文時,才執(zhí)行的步驟。即host300不是每次發(fā)送readcommand時都發(fā)送獲取所述網卡內存4012可用存儲空間的請求,而是在先發(fā)送readcommand或writecommand,在接收到網卡401發(fā)送的不能緩存需要存儲的數(shù)據(jù)的反壓消息時,才在發(fā)送readcommand時發(fā)送獲取所述網卡內存4012可用存儲空間的請求,并在判斷需要讀取的數(shù)據(jù)所占用的存儲空間大于所述網卡內存4012可用存儲空間時,host300暫停發(fā)送所述readcommand;在需要讀取的數(shù)據(jù)所占用的存儲空間小于或等于所述網卡內存4012可用存儲空間時發(fā)送所述readcommand。

以圖2所示的架構為例,為避免現(xiàn)有技術中因網卡內存的存儲空間不足帶來的復雜處理機制的問題,本發(fā)明實施例提供的另外一種實現(xiàn)方法是host300獲取網卡內存4012的實時可用存儲空間并記錄,每次在向target400發(fā)送數(shù)據(jù)讀寫命令前判斷記錄的網卡內存4012的實時可用存儲空間是否大于或等于需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間。在記錄的網卡內存4012的實時可用存儲空間大于或等于需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間時,host300向網卡401發(fā)送數(shù)據(jù)讀寫命令,并將記錄的網卡內存4012的實時可用存儲空間減去所述需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間。在緩存在網卡內存4012中的所述需要傳輸?shù)臄?shù)據(jù)被遷移后,host300根據(jù)接收到的完成遷移的響應消息,將記錄的網卡內存4012的實時可用存儲空間加上所述需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間。

如果記錄的網卡內存4012的實時可用存儲空間小于所述需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間,則host300暫停發(fā)送所述數(shù)據(jù)讀寫命令,待記錄的網卡內存4012的實時可用存儲空間大于或等于需要傳輸?shù)臄?shù)據(jù)所占用的存儲空間時再重新發(fā)送。

由于host300在向target400發(fā)送數(shù)據(jù)讀寫命令時,是在網卡內存4021有足夠可用存儲空間緩存要傳輸?shù)臄?shù)據(jù)時才發(fā)送,能夠避免網卡401因網卡內存4021的可用存儲空間不足而緩存host300發(fā)送的數(shù)據(jù)讀寫命令所帶來的復雜處理機制的問題。下面分別就所述數(shù)據(jù)讀寫命令為寫命令和讀命令,詳細描述上述方法的實現(xiàn)過程。

當所述數(shù)據(jù)讀寫命令為寫數(shù)據(jù)命令時,如圖4a所示,上述方法的詳細實現(xiàn)過程為:

步驟200a:host300獲取并記錄網卡內存4012的實時可用存儲空間;

其中,host300可以將獲取的網卡內存4012的可用存儲空間記錄在本地,即將獲取的網卡內存4012的可用存儲空間記錄在host300中。

具體的,host300可以在target400上電初始化時,獲取網卡內存4012的可用存儲空間。由于在target400上電初始化時,網卡內存4012還未緩存有數(shù)據(jù),因此獲取到的網卡內存4012的可用存儲空間就是網卡內存4012總的存儲空間。將網卡內存4012總的存儲空間作為記錄的網卡內存4012的實時可用存儲空間,能夠最大化的利用網卡內存4012的存儲空間。

可選的,host300也可以在target400上電初始化后的任一時間,獲取網卡內存4012當前可用的存儲空間,并將獲取的網卡內存4012當前可用的存儲空間,作為網卡內存4012的實時可用存儲空間并記錄。此時獲取的網卡內存4012的可用存儲空間,會因網卡內存4012中緩存有數(shù)據(jù)而小于網卡內存4012的總存儲空間。

host300獲取網卡內存4012當前可用的存儲空間的方式,可以是通過發(fā)送請求報文,該請求報文中包含獲取網卡內存4012的可用存儲空間的字段。網卡401收到host300發(fā)送的請求報文后,將網卡內存4012當前可用存儲空間寫入請求報文的相應字段中返回給host300。host300也可以通過讀取記錄有網卡內存4012當前可用存儲空間信息的寄存器中,來獲取網卡內存4012可用存儲空間的信息。

步驟202a:host300向target400發(fā)送寫數(shù)據(jù)命令之前,先判斷需要存儲的數(shù)據(jù)占用的存儲空間是否小于或等于記錄的所述網卡內存4012的實時可用存儲空間;

具體的,所述host300可以獲取本地記錄的網卡內存4012的實時可用存儲空間,并判斷需要存儲的數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述網卡內存4012的實時可用存儲空間。

其中,所述host300記錄的網卡內存4012的實時可用存儲空間,可以是記錄的可存儲數(shù)據(jù)的空間的大小。相應的,所述需要存儲的數(shù)據(jù)占用的存儲空間可以是所述需要存儲的數(shù)據(jù)所占用的存儲空間的大小。在判斷所述需要存儲的數(shù)據(jù)占用的存儲空間是否小于或等于記錄的所述網卡內存4012的實時可用存儲空間時,可以通過判斷需要存儲的數(shù)據(jù)所占用的存儲空間的大小是否小于或等于記錄的所述網卡內存4012的實時可用存儲空間的大小來實現(xiàn)。

當然,也可以用其它形式記錄所述網卡內存4012的實時可用存儲空間,例如用可被寫入的數(shù)據(jù)塊的個數(shù)記錄所述網卡內存4012的實時可用存儲空間。相應的,所述需要存儲的數(shù)據(jù)占用的存儲空間,可以是所述需要存儲的數(shù)據(jù)的數(shù)據(jù)塊的個數(shù)。在判斷所述需要存儲的數(shù)據(jù)占用的存儲空間是否小于或等于記錄的所述網卡內存4012的實時可用存儲空間時,可以通過判斷需要存儲的數(shù)據(jù)的數(shù)據(jù)塊個數(shù)是否小于或等于記錄的所述網卡內存4012可被寫入的數(shù)據(jù)塊的個數(shù)來實現(xiàn)。

步驟204a:在所述需要存儲的數(shù)據(jù)占用的存儲空間小于或等于記錄的所述網卡內存4012的實時可用存儲空間時,host300通過writecommand發(fā)送所述寫數(shù)據(jù)命令,并將記錄的網卡內存4012的實時可用存儲空間減去所述需要存儲的數(shù)據(jù)所占用的存儲空間,得到更新后的網卡內存4012的實時可用存儲空間;

其中,host300通過writecommand發(fā)送所述寫數(shù)據(jù)命令給target400。并且,可以是host300在writecommand中攜帶sgl,該sgl包括所述寫數(shù)據(jù)命令所需要存儲的數(shù)據(jù)在host300中的源地址、所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息。target400中的網卡401接收到host300發(fā)送的writecommand后,根據(jù)其中攜帶的需要存儲的數(shù)據(jù)在host300中的源地址,獲取所述需要存儲的數(shù)據(jù)并緩存在網卡內存4012的存儲空間中??蛇x的,網卡401可以rdma的方式通過網卡303獲取所述需要存儲的數(shù)據(jù)并緩存在網卡內存4012的存儲空間中。

當網卡401將所述需要存儲的數(shù)據(jù)緩存在網卡內存4012的存儲空間后,所述需要存儲的數(shù)據(jù)會占用網卡內存4012的存儲空間。因此,host300通過writecommand發(fā)送所述需要存儲的數(shù)據(jù)后,需要將記錄的網卡內存4012的實時可用存儲空間減去所述需要存儲的數(shù)據(jù)所占用的存儲空間。

步驟206a:網卡401在將所述需要存儲的數(shù)據(jù)寫入網卡內存4012后,網卡401修改所述writecommand,將所述writecommand攜帶的sgl中的需要存儲的數(shù)據(jù)在host300中的源地址,修改為網卡內存4012中存儲所述需要存儲的數(shù)據(jù)的地址,并將修改后的writecommand發(fā)送給目的硬盤的控制器。

即網卡401發(fā)送給目的硬盤的控制器的writecommand攜帶的sgl中包括網卡內存4012中存儲所述需要存儲的數(shù)據(jù)的地址,所述需要存儲的數(shù)據(jù)的長度、以及所述需要存儲的數(shù)據(jù)在target400中的目的地址等信息。

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

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

步驟208a:目的硬盤的控制器根據(jù)接收到的writecommand中攜帶的所述需要存儲的數(shù)據(jù)在所述網卡內存4012中的地址,將網卡內存4012中所述需要存儲的數(shù)據(jù)遷移到目的硬盤的目的地址對應的存儲空間中;并發(fā)送完成存儲所述需要存儲的數(shù)據(jù)的響應消息,并通過網卡401返回給host300。

其中,網卡401與target400中的硬盤之間,可以基于nvmeoverpcie架構實現(xiàn)連接。相應的,target400中目的硬盤的控制器與網卡401之間,可以通過nvmeoverpcie連接和通信方式,目的硬盤的控制器可以基于nvmeoverpcie協(xié)議規(guī)定的方式,將所述需要存儲的數(shù)據(jù)從網卡內存4012寫入目的硬盤中。

步驟210a:host300根據(jù)接收到的響應消息,將記錄的網卡內存4012的實時可用存儲空間加上所述需要存儲的數(shù)據(jù)所占用的存儲空間。

由于host300在收到對所述需要存儲的數(shù)據(jù)存儲的響應消息后,所述需要存儲的數(shù)據(jù)已經從網卡內存4012遷移到硬盤中。網卡內存4012將會增加相應的可用存儲空間,即釋放所述需要存儲的數(shù)據(jù)所占用的存儲空間。因此,host300將本地記錄的網卡內存4012的實時可用存儲空間加上所述需要存儲的數(shù)據(jù)占用的存儲空間,能夠正確記錄網卡內存4012當前最新的可用存儲空間。

上述步驟202a中,如果host300判斷所述需要存儲的數(shù)據(jù)占用的存儲空間大于本地記錄的所述網卡內存4012的實時可用存儲空間,則host300等待預設時間后再重新執(zhí)行步驟202a。host300等待的預設時間,可以是默認的預設時間,也可以基于具體業(yè)務的需要而設置的預設時間。在達到預設時間后,host300再次執(zhí)行步驟202a,即再次判斷所述需要存儲的數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述網卡內存4012的實時可用存儲空間,如果所述需要存儲的數(shù)據(jù)占用的存儲空間小于或等于本地記錄的所述網卡內存4012的實時可用存儲空間,則執(zhí)行步驟204a和步驟206a的步驟。host300在預設時間后再執(zhí)行步驟202a,能夠避免在網卡內存4012的可用存儲空間小于所述需要存儲的數(shù)據(jù)所占用的存儲空間時,因反復地執(zhí)行判斷的步驟所帶來的host300資源的占用和消耗??梢岳斫?,host300等待的預設時間可以基于實際的情況靈活調整。

當所述數(shù)據(jù)讀寫命令為讀命令時,如圖4b所示,上述方法的詳細實現(xiàn)過程為:

步驟200b:host300獲取并記錄網卡內存4012的實時可用存儲空間;

步驟200b的具體實現(xiàn)過程,可以參照步驟200a來實現(xiàn),不再贅述。

步驟202b:host300向target400發(fā)送讀數(shù)據(jù)命令之前,先判斷需要讀取的數(shù)據(jù)占用的存儲空間是否小于或等于記錄的所述網卡內存4012的實時可用存儲空間;

具體的,所述host300可以獲取本地記錄的網卡內存4012的實時可用存儲空間,并判斷需要讀取的數(shù)據(jù)占用的存儲空間是否小于或等于本地記錄的所述網卡內存4012的實時可用存儲空間。

步驟204b:在所述需要讀取的數(shù)據(jù)占用的存儲空間小于或等于記錄的所述網卡內存4012的實時可用存儲空間時,host300通過readcommand發(fā)送所述讀數(shù)據(jù)命令,并將記錄的網卡內存4012的實時可用存儲空間減去所述需要讀取的數(shù)據(jù)所占用的存儲空間,得到更新后的網卡內存4012的實時可用存儲空間;

其中,host300通過readcommand發(fā)送所述讀數(shù)據(jù)命令,可以是host300在readcommand中攜帶sgl,該sgl包括需要讀取的數(shù)據(jù)在target400的源地址、所述需要讀取的數(shù)據(jù)的長度、以及所述需要讀取的數(shù)據(jù)在host300中的目的地址等信息。

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

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

當網卡401將所述需要讀取的數(shù)據(jù)緩存在網卡內存4012的存儲空間后,所述需要讀取的數(shù)據(jù)會占用網卡內存4012的存儲空間。因此,host300通過readcommand發(fā)送所述需要讀取的數(shù)據(jù)后,需要將記錄的網卡內存4012的實時可用存儲空間減去所述需要讀取的數(shù)據(jù)所占用的存儲空間。

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

步驟208b:目的硬盤的控制器根據(jù)接收到的readcommand將所述需要讀取的數(shù)據(jù)緩存在網卡內存4012,網卡401根據(jù)所述readcommand中所述需要讀取的數(shù)據(jù)要寫入host300中的目的地址,將緩存在網卡內存4012中的所述需要讀取的數(shù)據(jù)發(fā)送給host300。

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

可選的,網卡401在將緩存的所述需要讀取的數(shù)據(jù)發(fā)送給host300后,發(fā)送完成讀取的響應消息給host300。

步驟210b:host300根據(jù)接收到網卡401發(fā)送的完成讀取的響應消息或接收到網卡401發(fā)送的所述需要讀取的數(shù)據(jù)時,將記錄的網卡內存4012的實時可用存儲空間加上所述需要存儲的數(shù)據(jù)所占用的存儲空間。

具體的,host300根據(jù)接收到網卡401發(fā)送的完成讀取的響應消息或接收到網卡401發(fā)送的所述需要讀取的數(shù)據(jù)時,將本地記錄的網卡內存4012的實時可用存儲空間加上所述需要存儲的數(shù)據(jù)所占用的存儲空間。

由于host300在收到完成讀取的響應消息或所述需要讀取的數(shù)據(jù)后,所述需要存儲的數(shù)據(jù)已經從網卡內存4012遷移到host300中。網卡內存4012將會增加相應的可用存儲空間,即釋放所述需要讀取的數(shù)據(jù)所占用的存儲空間。因此,host300將本地記錄的網卡內存4012的實時可用存儲空間加上所述需要讀取的數(shù)據(jù)占用的存儲空間,能夠正確記錄網卡內存4012當前最新的可用存儲空間。

上述步驟202b中,如果host300判斷所述需要讀取的數(shù)據(jù)占用的存儲空間大于本地記錄的所述網卡內存4012的實時可用存儲空間,則host300等待預設時間后再重新執(zhí)行步驟202b。host300等待的預設時間,可以是默認的預設時間,也可以基于具體業(yè)務的需要而設置的預設時間。在達到預設時間后,host300再次執(zhí)行步驟202b,即再次判斷所述需要讀取的數(shù)據(jù)占用的存儲空間是否大于本地記錄的所述網卡內存4012的實時可用存儲空間,如果所述需要讀取的數(shù)據(jù)占用的存儲空間小于或等于本地記錄的所述網卡內存4012的實時可用存儲空間,則執(zhí)行步驟204b和步驟206b的步驟。host300在預設時間后再執(zhí)行步驟202b,能夠避免在網卡內存4012的可用存儲空間小于所述需要存儲的數(shù)據(jù)所占用的存儲空間時,因反復地執(zhí)行判斷的步驟所帶來的host300資源的占用和消耗??梢岳斫猓琱ost300等待的預設時間可以基于實際的情況靈活調整。

上述過程中,可以是host300中的cpu301執(zhí)行步驟200a-步驟204a和步驟210a的過程,或cpu301執(zhí)行步驟200b-步驟204b和步驟210b的過程,也可以是host300中的網卡303執(zhí)行步驟200a-步驟204a和步驟210a的過程,或網卡303執(zhí)行步驟200b-步驟204b和步驟210b的過程,還可以是host300中的某一芯片或邏輯部件,來執(zhí)行步驟步驟200a-步驟204a和步驟210a的過程,或host300中的某一芯片或邏輯部件執(zhí)行步驟200b-步驟204b和步驟210b的過程,例如可以是fpga芯片等執(zhí)行步驟200a-步驟204a和步驟210a的過程,或執(zhí)行步驟200b-步驟204b和步驟210b的過程等。

在實際實現(xiàn)中,上述步驟200a-步驟204a和步驟210a,或步驟200b-步驟204b和步驟210b也可以由cpu301、網卡303、host300中的某一芯片或邏輯部件中的至少其中一個來實現(xiàn)。例如,cpu301執(zhí)行上述步驟200a和步驟202a,網卡303執(zhí)行上述步驟204a和步驟210a;或者cpu301執(zhí)行上述步驟200b和步驟202b,fpga執(zhí)行上述步驟204b和步驟210b。本發(fā)明實施例不限定具體的執(zhí)行步驟200a-步驟204a和步驟210a的過程,或步驟200b-步驟204b和步驟210b的過程中執(zhí)行主體的實現(xiàn)方式。

當上述host300是通過虛擬機實現(xiàn)時,上述cpu301、網卡303分別對應虛擬機中的cpu和網卡,虛擬機中的cpu和網卡通過承載其虛擬功能的物理cpu和物理網卡來實現(xiàn)。其實現(xiàn)方式與上述實現(xiàn)方式類似,不再贅述。

上述步驟200中,host300記錄網卡內存4012的實時可用存儲空間的位置可以有多種實現(xiàn)方式。例如,可以是記錄在host300中專門的存儲空間中,例如專門的芯片用于存儲網卡內存4012的實時可用存儲空間;也可以是存儲在host300中已有的存儲部件中,例如cpu301的緩存中,或網卡303的緩存中,也可以fpga中的一個存儲空間中。

具體的,當cpu301執(zhí)行步驟200a-步驟202a時,cpu301可以將獲取到的網卡內存4012的實時可用存儲空間存儲在cpu301的一個緩存中,也可以存儲在host300的其它存儲空間中,還可以存儲在host300中新增的一個存儲芯片中。當網卡303或fpga執(zhí)行步驟204a-步驟206a時,網卡303或fpga可以從cpu301存儲網卡內存4012的實時可用存儲空間的位置對網卡內存4012的實時可用存儲空間進行控制,例如增加或刪除等操作??梢岳斫猓敳襟E200a-步驟206a或步驟200b-步驟206b的執(zhí)行主體是其它組合方式時,其實現(xiàn)方式與上述舉例的實現(xiàn)方式類似,不再贅述。

本發(fā)明實施例中,host300記錄網卡內存4012的實時可用存儲空間的方式,也可以有多種實現(xiàn)方式,例如,以一個表格的形式記錄網卡內存4012的實時可用存儲空間,或一個變量的形式記錄網卡內存4012的實時可用存儲空間等等。本發(fā)明實施例不限定記錄網卡內存4012的實時可用存儲空間的具體形式。

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

步驟300:所述控制設備獲取所述網卡內存的可用存儲空間;

步驟302:所述控制設備判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間;

步驟304:在所述第一數(shù)據(jù)占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;

步驟306:在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。

通過圖5所示的方法,所述控制設備在所述網卡內存的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,能夠避免所述網卡內存的可用存儲空間不足而緩存所述第一數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

具體的,圖5所示的方法流程以及具體實現(xiàn)方式,可以參考上述圖3所描述的方法流程來實現(xiàn),也可以參照上述圖4(a)和圖4(b)所描述的流程的實現(xiàn)方式來實現(xiàn),不再贅述。

需要說明的是,圖3,圖4(a)和圖4(b)中以網卡作為數(shù)據(jù)處理單元、網卡內存作為緩存單元來描述的。fpga芯片或cpu等作為數(shù)據(jù)處理單元,fpga芯片中的存儲單元或cpu的內存作為緩存單元的實現(xiàn)方式,可以參照網卡和網卡內存的實現(xiàn)方式來實現(xiàn)。并且在具體實現(xiàn)時,網卡內存也可以位于網卡的外部,即存儲設備中的網卡內存可以是獨立于網卡的存儲介質,例如ddr等存儲介質??蛇x的,網卡內存也可以是存儲設備中多個網卡的內存資源共同構成的一個內存資源池。本發(fā)明實施例不限定網卡內存的具體呈現(xiàn)形式。

圖6為本發(fā)明實施例一種控制設備600的結構示意圖。所述控制設備600是nvmeoverfabric架構中的控制設備,如圖6所示,所述控制設備600包括處理器601、網卡602和總線603,處理器601和網卡602通過總線603相互連接??偩€603可以是外設部件互連標準(英文:peripheralcomponentinterconnect,簡稱pci)總線或擴展工業(yè)標準結構(英文:extendedindustrystandardarchitecture,簡稱eisa)總線等。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖6中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。

所述控制設備600與nvmeoverfabric架構中的存儲設備之間進行數(shù)據(jù)傳輸,所述存儲設備包括遠端數(shù)據(jù)處理單元、緩存單元和存儲單元,所述控制設備600需要讀寫的數(shù)據(jù)緩存在所述存儲設備的緩存單元中,并存儲在所述存儲設備的存儲單元;其中,所述處理器601用于執(zhí)行下述步驟:

獲取所述緩存單元的可用存儲空間;

判斷第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元的可用存儲空間;

在所述第一數(shù)據(jù)占用的存儲空間小于或等于所述緩存單元的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;

在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。

上述控制設備600的實現(xiàn)方式中,所述控制設備600在所述緩存單元的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備;在所述第一數(shù)據(jù)占用的存儲空間大于所述緩存單元的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,能夠避免所述緩存單元的可用存儲空間不足而緩存所述第一數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

具體的,所述控制設備600的實現(xiàn)方式,可以參照上述圖2中主機host300的實現(xiàn)方式,以及上述圖3所示的流程中host300的實現(xiàn)方式來實現(xiàn),不再贅述。所述控制設備600的實現(xiàn)方式,也可以參照上述圖2中主機host300的實現(xiàn)方式,以及上述圖4(a)和圖4(b)所示的流程中host300的實現(xiàn)方式來實現(xiàn),不再贅述。

需要說明的是,圖3,圖4(a)和圖4(b)中以網卡作為數(shù)據(jù)處理單元、緩存單元作為緩存單元來描述的。對于以fpga芯片或cpu等作為數(shù)據(jù)處理單元,fpga芯片中的存儲單元或cpu的內存作為緩存單元的實現(xiàn)方式,可以參照上述網卡和網卡內存的實現(xiàn)方式來實現(xiàn)。

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

所述控制設備701,用于獲取所述緩存單元7022的可用存儲空間,判斷所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)牡谝粩?shù)據(jù)占用的存儲空間是否小于或等于所述緩存單元7022的可用存儲空間;

所述控制設備701,還用于在所述第一數(shù)據(jù)所占用的存儲空間小于或等于所述緩存單元7022的可用存儲空間時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備702;在所述第一數(shù)據(jù)所占用的存儲空間大于所述緩存單元7022的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令;

所述數(shù)據(jù)處理單元7021,用于接收所述控制設備701發(fā)送的所述第一數(shù)據(jù)讀寫命令,并將所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)緩存在所述緩存單元7022中。

上述實現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng)700的實現(xiàn)方式中,所述控制設備701在所述緩存單元7022的可用存儲空間能夠緩存所述第一數(shù)據(jù)讀寫命令所要傳輸?shù)臄?shù)據(jù)時,發(fā)送所述第一數(shù)據(jù)讀寫命令給所述存儲設備702;在所述第一數(shù)據(jù)所占用的存儲空間大于所述緩存單元7022的可用存儲空間時,暫停發(fā)送所述第一數(shù)據(jù)讀寫命令。這樣,能夠避免所述緩存單元7022的可用存儲空間不足而緩存所述第一數(shù)據(jù)讀寫命令所帶來的處理機制復雜的問題。

需要說明的是,圖7是以緩存單元7022位于數(shù)據(jù)處理單元7021為例示出系統(tǒng)700的結構。本發(fā)明實施例不限定緩存單元7022與數(shù)據(jù)處理單元7021之間的位置關系。在具體實現(xiàn)時,緩存單元7022位于數(shù)據(jù)處理單元7021外部,或緩存單元7022為多個數(shù)據(jù)處理單元7021的共享存儲空間組成的用于緩存數(shù)據(jù)的存儲空間。

具體的,所述實現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng)700的實現(xiàn)方式,可以參照上述圖2中主機host300與target400組成的系統(tǒng)的實現(xiàn)方式,以及上述圖3所示的流程中host300與target400的實現(xiàn)方式來實現(xiàn),不再贅述。所述實現(xiàn)數(shù)據(jù)讀寫命令控制的系統(tǒng)700的實現(xiàn)方式,也可以參照上述圖2中主機host300與target400組成的系統(tǒng)的實現(xiàn)方式,以及上述圖4(a)和圖4(b)所示的流程中host300與target400的實現(xiàn)方式來實現(xiàn),不再贅述。

需要說明的是,圖3,圖4(a)和圖4(b)中以網卡作為數(shù)據(jù)處理單元、網卡內存作為緩存單元來描述的。對于以fpga芯片或cpu等作為數(shù)據(jù)處理單元,fpga芯片中的存儲單元或cpu的內存作為緩存單元的實現(xiàn)方式,可以參照上述網卡和網卡內存的實現(xiàn)方式來實現(xiàn)。

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

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

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

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

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

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

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

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

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1