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

一種數(shù)據(jù)處理方法以及NVMe存儲器與流程

文檔序號:11288368閱讀:314來源:國知局
一種數(shù)據(jù)處理方法以及NVMe存儲器與流程

本發(fā)明實施例涉及存儲領域,特別涉及nvme領域。



背景技術:

nvme(non-volatilememoryexpress,非易失性存儲快速)協(xié)議是一種使用在存儲系統(tǒng)中的高速接口協(xié)議,nvme協(xié)議比scsi協(xié)議提供更快的讀寫速度和更低的延遲,產業(yè)重視和普及程度越來越高。

隨著信息技術的發(fā)展,經(jīng)常使用對象存儲(objectstorage)技術。一種常見的對象存儲技術是鍵值(keyvalue,kv)存儲?,F(xiàn)有技術中,由于nvme設備僅僅支持塊(block)接口,因此如果主機(host)要把kv數(shù)據(jù)存儲到nvme存儲器中,其步驟是:主機要把kv命令(一般情況下由key、value和metadata構成)轉成塊數(shù)據(jù)(例如把一個kv命名拆分/合并成一個或者至少兩個塊數(shù)據(jù));主機給塊數(shù)據(jù)分配lba地址;主機把塊數(shù)據(jù)發(fā)送給nvme存儲器;nvme存儲器收到塊數(shù)據(jù)后按照分配的lba地址對塊數(shù)據(jù)逐一進行存儲。

然而,在上述步驟中,把kv數(shù)據(jù)轉換成塊數(shù)據(jù),以及給塊數(shù)據(jù)分配lba地址會耗費主機大量的運算資源,導致存儲系統(tǒng)的性能下降,對主機和存儲控制器的運行效率也會造成影響。



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

本發(fā)明提供數(shù)據(jù)處理方法、nvme存儲器以及存儲系統(tǒng)的方案??梢蕴岣甙裬v數(shù)據(jù)寫入nvme存儲器的效率。在部分方案中,相應的,也會提高把kv數(shù)據(jù)從nvme存儲器讀出來效率。

本發(fā)明實施例第一方面,提供一種數(shù)據(jù)處理方法,該方法包括:快速非易失性存儲nvme存儲器接收主機發(fā)送的nvme寫命令,所述nvme寫命令中攜帶key,所述nmve寫命令攜帶value指針,所述value指針指向所述主機中的第一存儲空間,所述第一存儲空間用于存儲value,所述key與所述value屬于同一個kv對;所述nvme存儲器從所述nvme寫命令中獲得所述key,根據(jù)所述value指針獲得value長度,按照所述value長度為所述value分配第二存儲空間,所述第二存儲空間在所述nvme存儲器中;所述nvme存儲器發(fā)送第一傳輸請求給所述主機,從所述主機獲得所述value,把所述value保存在所述第二存儲空間中?;谠摲桨福琸v數(shù)據(jù)從主機傳遞到nvme存儲器的過程中,不需要把kv數(shù)據(jù)轉換成塊的形式,提高了kv數(shù)據(jù)的存儲效率。

在第一方面的第一種可能的實施方式中,所述nvme存儲器發(fā)送第一傳輸請求給主機以及從所述主機獲得所述value,具體包括:所述nvme存儲器發(fā)送dma傳輸請求給所述主機,從所述主機獲得所述value,所述dma指令攜帶所述第一存儲空間作為訪問地址,攜帶所述第二存儲空間作為寫入地址,其中,所述nvme存儲器和所述主機用pcie總線連接。該方案提供了使用dma的方式存儲value傳輸方式。

在第一方面的第二種可能的實施方式中,所述nvme存儲器發(fā)送第一傳輸請求給主機以及從所述主機獲得所述value,具體包括:所述存儲器發(fā)送rdma傳輸請求給所述主機,從所述主機獲得所述value,所述rdma指令攜帶所述第一存儲空間作為訪問地址,攜帶所述第二存儲空間作為寫入地址,其中,所述nvme存儲器和所述主機用fabric總線連接。該方案提供了使用rdma的方式存儲value傳輸方式。

在第一方面的第三種可能的實施方式中,其中:所述nvme寫命令中進一步攜帶kv數(shù)量的字段,所述kv數(shù)量的字段用于描述所述nvme寫命令中kv的數(shù)量,所述nvme存儲器從所述nvme寫命令中獲得與kv數(shù)量相同數(shù)量的key,以及獲得與kv數(shù)量相同數(shù)量的value。該方案可以支持正在同一個nvme寫命令中攜帶復數(shù)個kv。

在第一方面的第四種可能的實施方式中,其中:所述nvme寫命令中進一步攜帶kv格式的字段,其中,所述kv格式的字段描述所述nvme寫命令中字段的結構,所述nvme存儲器按照所述kv格式字段所定義的字段內容,從所述nvme寫命令中獲取各個字段。該方案可以使得同一個nvme設備支持多種格式傳輸kv的nvme寫命令報文,在一次特定的寫操作過程中,使用其中一種格式的寫命令報文。類似的,在讀命令流程中,也可以使得同一個nvme設備支持多種格式傳輸kv的nvme讀命令報文。

在第一方面的第五種可能的實施方式中,其中,所述nvme寫命令還攜帶所述value元數(shù)據(jù)指針,所述方法還包括:所述nvme存儲器根據(jù)所述元數(shù)據(jù)指針獲得元數(shù)據(jù)長度,按照所述元數(shù)據(jù)長度為所述元數(shù)據(jù)分配第四存儲空間,所述第四存儲空間在所述nvme存儲器中;所述nvme存儲器通過所述第一傳輸請求從所述主機中獲得所述元數(shù)據(jù),把所述元數(shù)據(jù)保存在第四存儲空間中。該方案描述了如何對kv中的元數(shù)據(jù)進行存儲的具體方案。

結合第一方面的第五種可能的實施方式,在第六種可能的實施方式中,其中:所述元數(shù)據(jù)傳輸失敗后,所述nvme存儲器釋放為所述value分配的存儲空間,以及釋放為所述元數(shù)據(jù)分配的第四存儲空間。該方案在元數(shù)據(jù)傳輸失敗后,可以及時釋放被value占用的資源。

結合第一方面的第七種可能的實施方式,其中,所述nvme存儲器發(fā)送第一傳輸請求給所述主機以及從所述主機獲得所述value,具體包括下述其中一種:所述存儲器發(fā)送至少兩個dma傳輸請求給所述主機以獲得所述value,每個dma傳輸請求用于請求獲得所述value的一部分,當任意一個dma傳輸請求執(zhí)行失敗,則nvme存儲器釋放為所述value分配的存儲空間,其中,所述nvme存儲器和所述主機用pcie總線連接;或者,所述存儲器發(fā)送至少兩個rdma傳輸請求給所述主機以獲得所述value,每個rdma傳輸請求用于請求獲得所述value的一部分,當任意一個rdma傳輸請求執(zhí)行失敗,則nvme存儲器釋放為所述value分配的存儲空間,其中,所述nvme存儲器和所述主機用frabic連接。該方案可以把同一個value分成多次rdma傳輸請求進行傳輸,減小每次rdma傳輸?shù)臄?shù)據(jù)量。

結合第一方面的第八種可能的實施方式,其中,所述方法還包括:生成所述key與所述第二存儲空間的映射關系。該映射關系可以為后續(xù)的kv(尤其是value)的讀取方案提供基礎。

結合第一方面的第九種可能的實施方式,該方法之后,進一步包括:所述nvme存儲器從所述主機接收nvme讀命令,所述nvme讀命令中攜帶所述key。此外,還可以進一步包括:所述nvme存儲器根據(jù)所述key在所述映射關系中查詢,獲得存儲所述value的所述第二存儲空間的位置信息,把所述第二存儲空間的位置信息發(fā)送給所述主機;所述nvme存儲器接收所述主機發(fā)送的第二傳輸請求,所述第二傳輸請求用于請求獲得存儲在所述第二存儲空間的數(shù)據(jù)。該第一方面的第八種可能的實施方式可以實現(xiàn)對kv(或者value)的讀取。

結合第一方面的第十種可能的實施方式,其中,所述nvme存儲器接收所述主機發(fā)送的第二傳輸請求之前,進一步包括:所述主機根據(jù)所述第二存儲空間的大小預留所述主機中的第三存儲空間。所述nvme存儲器發(fā)送所述value給所述主機之后,進一步包括:所述主機把收到的來自所述第二存儲空間的數(shù)據(jù)寫入所述第四存儲空間空間。該方案描述了主機在讀取kv(或者value)的過程中所執(zhí)行的操作。

結合第一方面的第十一種可能的實施方式,所述nvme存儲器接收的所述主機發(fā)送的nvme讀命令中還攜帶所述主機的空閑空間信息,所述nvme存儲器從所述主機接收所述nvme讀命令之后,進一步包括:所述nvme存儲器判斷所述主機的空閑存儲空間是否大于等于所述第二存儲空間,如果是,執(zhí)行將所述第二存儲空間的位置信息發(fā)送給所述主機的步驟,如果否,結束步驟。該方案在nvme讀命令中攜帶所述主機的空閑空間信息,主機不用在收到nvme存儲器響應后判斷空閑空間是否足夠以及預留存儲空間,可以減少nvme存儲器和主機之間的交互次數(shù),提高了主機讀取value的效率。需要說明的是,這里的空閑空間是一段地址連續(xù)的空間。

結合第一方面的第十二種可能的實施方式,其中:所述第一存儲空間用第一存儲空間的首地址和所述value長度描述;所述第二存儲空間用第二存儲空間的首地址描述。該方案描述了存儲空間的描述方式。依靠該描述方式所描述的內容,可以定位讀出value的存儲位置和寫入value的存儲位置。

第二方面,本發(fā)明提供一種nvme存儲器的實施方式,包括控制器以及存儲介質,所述控制器和所述存儲介質連接,所述存儲介質用于提供存儲空間,所述處理器被配置為執(zhí)行:接收主機發(fā)送的快速非易失性存儲nvme寫命令,所述nvme寫命令中攜帶key,所述nmve寫命令攜帶value指針,所述value指針指向所述主機中的第一存儲空間,所述第一存儲空間用于存儲value,所述key與所述value屬于同一個kv對;從所述nvme寫命令中獲得所述key,根據(jù)所述value指針獲得value長度,按照所述value長度為所述value分配第二存儲空間,所述第二存儲空間在所述存儲介質中;發(fā)送第一傳輸請求給所述主機,從所述主機獲得所述value,把所述value保存在所述第二存儲空間中。nvme存儲器被配置為為執(zhí)行地一方面的方法以及第一方面各種實現(xiàn)方式的方法。

本發(fā)明第三方面提供一種數(shù)據(jù)處理方法的實施方法,該方法包括:非易失性存儲快速nvme存儲器接收nvme寫命令,所述nvme寫命令的頭部攜帶鍵key,所述nmve命令還攜帶值value,所述key和所述value對應,所述key和所述value屬于同一個kv對;所述nvme存儲器從所述nvme寫命令中獲得所述key以及所述value;所述nvme存儲器把所述value保存在所述nvme存儲器的存儲介質中。

結合第三方面的第一種可能的實施方式,所述nvme寫命令中進一步攜帶kv數(shù)量的字段,所述kv數(shù)量的字段用于描述所述nvme寫命令中kv的數(shù)量,所述nvme存儲器從所述nvme寫命令中獲得與kv數(shù)量相同數(shù)量的key,以及獲得與kv數(shù)量相同數(shù)量的value。

結合第三方面的第二種可能的實施方式,其中,所述nvme寫命令中進一步攜帶kv格式的字段,其中,所述kv格式的字段描述所述nvme寫命令中字段的結構,所述nvme存儲器按照所述kv格式字段所定義的字段內容,從所述nvme寫命令中獲取各個字段。

結合第三方面的第三種可能的實施方式,其中,所述nvme寫命令中進一步攜帶所述key的長度,所述nvme存儲器從所述寫命令中獲得所述key具體包括:從所述key的預設起始位置,按照所述key的長度從所述寫命令中獲得所述key。

結合第三方面的第四種可能的實施方式,其中,所述nvme寫命令中進一步攜帶value偏移量以及所述value的長度,所述nvme存儲器從所述nvme寫命令中獲得所述value具體包括:所述nvme存儲器從所述偏移量指示的位置,按照所述value的長度獲得所述value。

結合第三方面的第五種可能的實施方式,該方法進一步包括:生成所述key與所述value存儲空間的映射關系。

第三種可能的實現(xiàn)方式,是基于本申請第三方面的第五種可能實現(xiàn)方式,該方法之后,進一步包括:主機發(fā)送nvme讀命令給所述nvme存儲器,所述nvme讀命令中攜帶所述key;所述nvme存儲器從所述主機接收所述讀命令,從所述nvme讀命令中獲得所述key;所述nvme存儲器使用所述key從所述映射關系中查找所述value存儲空間;所述nvme存儲器從使用所述value存儲空間獲得所述value;所述nvme存儲器生成所述nvme讀命令的響應消息發(fā)送給所述主機,所述響應消息攜帶所述value。

第四方面,本發(fā)明提供一種nvme存儲器的實施方式,包括控制器以及存儲介質。所述控制器被配置為為執(zhí)行地三方面的方法以及第三方面各種實現(xiàn)方式的方法。

本發(fā)明實施例第五方面,提供一種存儲裝置,該存儲裝置可以是物理設備,例如nvme存儲器;也可以是邏輯上設備,例如是運行在nvme存儲器的處理器中的程序,或者存儲服務器中的程序。該裝置包括:接口模塊,用于接收主機發(fā)送的nvme寫命令,所述nvme寫命令中攜帶key,所述nmve寫命令攜帶value指針,所述value指針指向所述主機中的第一存儲空間,所述第一存儲空間用于存儲value,所述key與所述value屬于同一個kv對;處理模塊,用于從所述nvme寫命令中獲得所述key,根據(jù)所述value指針獲得value長度,按照所述value長度為所述value分配第二存儲空間;存儲模塊,用于發(fā)送第一傳輸請求給所述主機,從所述主機獲得所述value,把所述value保存在所述第二存儲空間中。所述第二存儲空間可以由在所述nvme存儲器的存儲介質提供,所述存儲介質和所述nvme存儲器的處理器連接?;谠摲桨福琸v數(shù)據(jù)從主機傳遞到nvme存儲器的過程中,不需要把kv數(shù)據(jù)轉換成塊的形式,提高了kv數(shù)據(jù)的存儲效率。

在第五方面的第一種可能的實施方式中,所述存儲模塊發(fā)送第一傳輸請求給主機以及從所述主機獲得所述value,具體包括:所述存儲模塊發(fā)送dma傳輸請求給所述主機,從所述主機獲得所述value,所述dma指令攜帶所述第一存儲空間作為訪問地址,攜帶所述第二存儲空間作為寫入地址其中。其中,所述存儲裝置(存儲裝置是硬件)和所述主機用pcie總線連接,或者所述存儲裝置(存儲裝置是軟件)所在的nvme存儲器和所述主機用pcie總線連接。該方案提供了使用dma的方式存儲value傳輸方式。

在第五方面的第二種可能的實施方式中,所述存儲模塊發(fā)送第一傳輸請求給主機以及從所述主機獲得所述value,具體包括:所述存儲模塊發(fā)送rdma傳輸請求給所述主機,從所述主機獲得所述value,所述rdma指令攜帶所述第一存儲空間作為訪問地址,攜帶所述第二存儲空間作為寫入地址其中,所述存儲裝置(存儲裝置是硬件)和所述主機用fabric總線連接,或者所述存儲裝置(存儲裝置是軟件)所在的nvme存儲器和所述主機用fabric總線連接。該方案提供了使用rdma的方式存儲value傳輸方式。

在第五方面的第三種可能的實施方式中,其中:所述nvme寫命令中進一步攜帶kv數(shù)量的字段,所述kv數(shù)量的字段用于描述所述nvme寫命令中kv的數(shù)量,所述nvme存儲器從所述nvme寫命令中獲得與kv數(shù)量相同數(shù)量的key,以及獲得與kv數(shù)量相同數(shù)量的value。該方案可以支持正在同一個nvme寫命令中攜帶復數(shù)個kv。

在第五方面的第四種可能的實施方式中,其中:所述nvme寫命令中進一步攜帶kv格式的字段,其中,所述kv格式的字段描述所述nvme寫命令中字段的結構,所述nvme存儲器按照所述kv格式字段所定義的字段內容,從所述nvme寫命令中獲取各個字段。該方案可以使得同一個nvme設備支持多種格式傳輸kv的nvme寫命令報文,在一次特定的寫操作過程中,使用其中一種格式的寫命令報文。類似的,在讀命令流程中,也可以使得同一個nvme設備支持多種格式傳輸kv的nvme讀命令報文。

在第五方面的第五種可能的實施方式中,其中,所述nvme寫命令還攜帶所述value元數(shù)據(jù)指針,所述方法還包括:所述nvme存儲器根據(jù)所述元數(shù)據(jù)指針獲得元數(shù)據(jù)長度,按照所述元數(shù)據(jù)長度為所述元數(shù)據(jù)分配第四存儲空間,所述第四存儲空間在所述nvme存儲器中;所述nvme存儲器通過所述第一傳輸請求從所述主機中獲得所述元數(shù)據(jù),把所述元數(shù)據(jù)保存在第四存儲空間中。該方案描述了如何對kv中的元數(shù)據(jù)進行存儲的具體方案。

結合第五方面的第五種可能的實施方式,在第六種可能的實施方式中,其中:所述元數(shù)據(jù)傳輸失敗后,所述處理模塊還用于釋放為所述value分配的存儲空間,以及釋放為所述元數(shù)據(jù)分配的第四存儲空間。該方案在元數(shù)據(jù)傳輸失敗后,可以及時釋放被value占用的資源。

結合第五方面的第七種可能的實施方式,其中,所述存儲模塊發(fā)送第一傳輸請求給所述主機以及從所述主機獲得所述value,具體包括下述其中一種:所述處理模塊發(fā)送至少兩個dma傳輸請求給所述主機以獲得所述value,每個dma傳輸請求用于請求獲得所述value的一部分,當任意一個dma傳輸請求執(zhí)行失敗,則所述存儲模塊釋放為所述value分配的存儲空間,其中,所述nvme存儲器和所述主機用pcie總線連接;或者,所述存儲模塊發(fā)送至少兩個rdma傳輸請求給所述主機以獲得所述value,每個rdma傳輸請求用于請求獲得所述value的一部分,當任意一個rdma傳輸請求執(zhí)行失敗,則所述存儲模塊釋放為所述value分配的存儲空間,其中,所述nvme存儲器和所述主機用frabic連接。該方案可以把同一個value分成多次rdma傳輸請求進行傳輸,減小每次rdma傳輸?shù)臄?shù)據(jù)量。

結合第五方面的第八種可能的實施方式,其中,所述處理模塊還用于:生成所述key與所述第二存儲空間的映射關系。該映射關系可以為后續(xù)的kv(尤其是value)的讀取方案提供基礎。

結合第五方面的第九種可能的實施方式,所述接口模塊還用于從所述主機接收nvme讀命令,所述nvme讀命令中攜帶所述key。所述處理模塊,還用于根據(jù)所述key在所述映射關系中查詢,獲得存儲所述value的所述第二存儲空間的位置信息,把處理模塊還用于,通過所述接口模塊把所述第二存儲空間的位置信息發(fā)送給所述主機;所述接口模塊還用于接收所述主機發(fā)送的第二傳輸請求,所述第二傳輸請求用于請求獲得存儲在所述第二存儲空間的數(shù)據(jù)。該第五方面的第八種可能的實施方式可以實現(xiàn)對kv(或者value)的讀取。

結合第五方面的第十種可能的實施方式,其中,所述接口模塊在接收所述主機發(fā)送的第二傳輸請求之前,所述主機還用于:根據(jù)所述第二存儲空間的大小預留所述主機中的第三存儲空間。所述存儲裝置發(fā)送所述value給所述主機之后,所述主機還用于把收到的來自所述第二存儲空間的數(shù)據(jù)寫入所述第四存儲空間空間。該方案描述了主機在讀取kv(或者value)的具有的功能。

結合第五方面的第十一種可能的實施方式,所述接口模塊接收的所述主機發(fā)送的nvme讀命令中還攜帶所述主機的空閑空間信息,所述nvme存儲器從所述主機接收所述nvme讀命令之后,進一步包括:所述nvme存儲器判斷所述主機的空閑存儲空間是否大于等于所述第二存儲空間,如果是,執(zhí)行將所述第二存儲空間的位置信息發(fā)送給所述主機的步驟,如果否,結束步驟。該方案在nvme讀命令中攜帶所述主機的空閑空間信息,主機不用在收到nvme存儲器響應后判斷空閑空間是否足夠以及預留存儲空間,可以減少nvme存儲器和主機之間的交互次數(shù),提高了主機讀取value的效率。需要說明的是,這里的空閑空間是一段地址連續(xù)的空間。

結合第五方面的第十二種可能的實施方式,其中:所述第一存儲空間用第一存儲空間的首地址和所述value長度描述;所述第二存儲空間用第二存儲空間的首地址描述。該方案描述了存儲空間的描述方式。依靠該描述方式所描述的內容,可以定位讀出value的存儲位置和寫入value的存儲位置。

第六方面:結合第五方面及第五方面的各種可能的實現(xiàn)方式提供的存儲裝置,本發(fā)明還還提供存儲系統(tǒng)的實施方式,存儲系統(tǒng)包括主機和存儲裝置。

本發(fā)明第七方面提供一種存儲裝置,該存儲裝置可以是物理設備,例如nvme存儲器;也可以是邏輯上設備,例如是運行在nvme存儲器的處理器中的程序,或者存儲服務器中的程序。該裝置包括:接口模塊,用于接收nvme寫命令,所述nvme寫命令的頭部攜帶鍵key,所述nmve命令還攜帶值value,所述key和所述value對應,所述key和所述value屬于同一個kv對;處理模塊,用于從所述nvme寫命令中獲得所述key以及所述value;存儲模塊,用于把所述value保存在所述nvme存儲器的存儲介質中。

結合第七方面的第一種可能的實施方式,所述nvme寫命令中進一步攜帶kv數(shù)量的字段,所述kv數(shù)量的字段用于描述所述nvme寫命令中kv的數(shù)量,所述處理模塊從所述nvme寫命令中獲得與kv數(shù)量相同數(shù)量的key,以及獲得與kv數(shù)量相同數(shù)量的value。

結合第七方面的第二種可能的實施方式,其中,所述nvme寫命令中進一步攜帶kv格式的字段,其中,所述kv格式的字段描述所述nvme寫命令中字段的結構,所述處理模塊按照所述kv格式字段所定義的字段內容,從所述nvme寫命令中獲取各個字段。

結合第七方面的第三種可能的實施方式,其中,所述nvme寫命令中進一步攜帶所述key的長度,所述處理模塊從所述寫命令中獲得所述key具體包括:從所述key的預設起始位置,按照所述key的長度從所述寫命令中獲得所述key。

結合第七方面的第四種可能的實施方式,其中,所述nvme寫命令中進一步攜帶value偏移量以及所述value的長度,所述處理模塊從所述nvme寫命令中獲得所述value具體包括:所述處理模塊從所述偏移量指示的位置,按照所述value的長度獲得所述value。

結合第七方面的第五種可能的實施方式,所述存儲模塊進一步用于:生成所述key與所述value存儲空間的映射關系。

第七種可能的實現(xiàn)方式,是基于第七方面的第五種可能實現(xiàn)方式,提供一種主機的說是方式:主機用于發(fā)送nvme讀命令給所述nvme存儲器,所述nvme讀命令中攜帶所述key;所述接口模塊還用于從所述主機接收所述讀命令,從所述nvme讀命令中獲得所述key;所述處理模塊還用于使用所述key從所述映射關系中查找所述value存儲空間;所述處理模塊還用于從使用所述value存儲空間獲得所述value;所述處理模塊還用于,生成所述nvme讀命令的響應消息,通過所述接口模塊把響應消息發(fā)送給所述主機,所述響應消息攜帶所述value。

第八方面:結合第七方面及第七方面的各種可能的實現(xiàn)方式提供的存儲裝置,本發(fā)明還還提供存儲系統(tǒng)的實施方式,存儲系統(tǒng)包括主機和存儲裝置。

第九方面:結合第二方面及第二方面的各種可能的實現(xiàn)方式提供的存儲器,本發(fā)明還還提供存儲系統(tǒng)的實施方式,存儲系統(tǒng)包括主機和nvme存儲器。

第十方面:結合第四方面及第四方面的各種可能的實現(xiàn)方式提供的存儲器,本發(fā)明還還提供存儲系統(tǒng)的實施方式,存儲系統(tǒng)包括主機和存儲裝置。

基于本發(fā)明提供數(shù)據(jù)處理方法、nvme存儲器以及存儲系統(tǒng)的方案??梢蕴岣甙裬v數(shù)據(jù)寫入nvme存儲器的效率。

附圖說明

圖1是一種數(shù)據(jù)處理方法實施例的流程圖;

圖2是一種nvme命令格式示意圖;

圖3是一種nvme命令格式示意圖;

圖4是一種nvme命令格式示意圖;

圖5是一種nvme命令格式示意圖;

圖6是一種key和value存儲位置、metadata存儲位置映射關系示意圖;

圖7是一種數(shù)據(jù)處理系統(tǒng)硬件拓撲實施例拓撲圖;

圖8是一種數(shù)據(jù)處理方法實施例的流程圖;

圖9是一種命令格式示意圖;

圖10是一種命令格式示意圖;

圖11是一種命令格式示意圖;

圖12是一種寫數(shù)據(jù)方法實施例流程圖;

圖13是一種讀數(shù)據(jù)方法實施例流程圖;

圖14是一種寫數(shù)據(jù)方法實施例流程圖;

圖15一種數(shù)據(jù)處理系統(tǒng)實施例邏輯功能圖。

具體實施方式

快速非易失性存儲(non-volatilememoryexpress,nvme)是一種邏輯設備接口,可以支持使用pcie總線訪問非易失性存儲介質。nvme接口可以用于flash介質的存儲器,例如固態(tài)硬盤ssd。nvme接口的設備,稱為nvme設備。nvme存儲器是nvme設備的一種,指具有存儲功能的nvme設備,下面主要以nvme存儲器(本發(fā)明實施例中,把nvme存儲器簡稱存儲器)為例進行介紹。

kv存儲,也稱為k/v存儲,是存儲技術的一種。在kv存儲中,鍵-值(key-value/keyvalue)對是基本數(shù)據(jù)模型。key-value對可以包括鍵(key)和值(value)。對key-value對進行擴展之后,key-value對還可以包括元數(shù)據(jù)(metadata)。key唯一標記一個value。

如果主機以塊的方式把kv數(shù)據(jù)發(fā)送給nvme存儲器進行存儲,主機需要執(zhí)行的操作包括:首先,把kv數(shù)據(jù)轉換為塊的形式;然后,給塊分配存儲器上的邏輯塊地址(logicblockaddress,lba);接著,生成寫命令,寫命令中攜帶塊以及塊的lba;nvme存儲器收到塊后,按照lba對應的物理地址對塊進行存儲。如果要讀取這些kv數(shù)據(jù),需要先讀取塊數(shù)據(jù),然后把塊數(shù)據(jù)轉換成kv數(shù)據(jù)。寫入kv數(shù)據(jù)過程中,分配lba地址以及把kv數(shù)據(jù)轉換成塊數(shù)據(jù)需要耗費主機大量的時間和系統(tǒng)資源,增加系統(tǒng)延遲。讀取kv數(shù)據(jù)的過程中,主機需要發(fā)送待讀塊的位置信息(例如起始地址+長度)給nvme存儲器,獲得到塊數(shù)據(jù)后,把塊數(shù)據(jù)重新轉換成kv數(shù)據(jù)也會耗費主機大量的運算資源,增加系統(tǒng)延遲。

本申請可以適用nvme場景以及nvmeoverfabric(nof)的場景。nvme場景中,主機和存儲器通過總線(例如pcie總線)連接,在這種場景下,存儲器作為主機的一個組件,例如主機是服務器,存儲器是服務器中的nvme接口固態(tài)硬盤(ssd)。nof場景中,主機和存儲器通過fabric(例如以太網(wǎng)、fc等)連接。主機包括內存和處理器以及接口,主機和存儲器這二者可以是兩個獨立的設備。本發(fā)明實施例中,主機是讀數(shù)據(jù)和寫數(shù)據(jù)的發(fā)起者,因此稱作發(fā)起者(initiator);存儲器是讀請求或者寫請求的響應者,也稱作目標器(target)。

本發(fā)明實施例可以擴展現(xiàn)有的nvme協(xié)議,提出了新的nvme命令。新的nvme命令對現(xiàn)有的nvme命令(例如nvme標準協(xié)議1.2.1中所定義的nvme命令,或者nvmeoverfabric標準協(xié)議1.0所定義的nvme命令)進行了的擴展和優(yōu)化,使得nvme設備可以直接支持kv的接口。

由于nvme設備可以直接支持kv的接口,因此存儲器和主機之間可以直接通過nvme協(xié)議傳輸kv數(shù)據(jù)。主機可以通過nvme協(xié)議直接把kv數(shù)據(jù)寫入存儲器,或者通過nvme協(xié)議直接從存儲器中讀出kv。因此,存儲器和主機之間避免了像現(xiàn)有技術那樣在kv格式和block格式之間的反復轉換,降低了系統(tǒng)復雜度,提高了系統(tǒng)性能。在沒有特別說明情況下,本發(fā)明各實施例中的nvme命令均是指擴展的nvme命令。

在一種可選的實現(xiàn)方式中,key直接攜帶在nvme命令的命令頭中,因此,直接讀取nvme的命令頭(不需要解析nvme命令的凈荷)就可以獲得key。

對于value,可以攜帶在nvme命令中,讀取nvme命令可以獲得所述value。此外,nvme命令也可以不直接攜帶value,而是攜帶value的指針,value指針直接或者間接的指向了value的存儲空間,通過dma/rdma技術可以從value的存儲空間獲得所述value。

下面對本發(fā)明各實施例可能出現(xiàn)的名詞進行示例性介紹。

在現(xiàn)有的nvme寫命令中,增加如下參數(shù),或者定義全新的nvmekv寫命令,其中可以包含如下參數(shù)。

numberofkv:一個nvme命令中傳輸?shù)膋v的數(shù)量。kv包括key和與key對應的value?;蛘遦v包括key和value指針,value指針指向value存儲空間,value和key對應。

value(值):數(shù)據(jù),可以被存儲到存儲器中,或者從存儲器中讀取。例如一個電影。

key(鍵):唯一標識一個value,key也可以稱為關鍵碼。key與對應的value的組合可以稱為kv或者kv對(pair)。

kv(keyvalue):key和value的組合,也稱為kv對(kvpair)??蛇x的,kv中還包括metadata。

metadata(元數(shù)據(jù)):用于描述value的屬性。例如:如果value是一部電影,元數(shù)據(jù)可以包括不限于:電影名稱、時長、主演等信息。

commonheader(公共頭部):是命令頭(header)的一部分,指命令頭中和現(xiàn)有nvme命令頭相同的部分。

kvformatid(kv格式id):指示當前nvme命令的格式?;蛘哒f定義nvme命令中各個字段的內容。傳輸kv的nvme命令可以有多種命令格式,通過kvformatid來區(qū)分。不同的命令格式的nvme報文可以有不同的字段,或者不同的字段排列順序。

keylength:描述key的長度。

valuelength:描述value的長度。

metadatalength:描述metadata的長度。

keyoffset:描述key在nvme命令中的偏移位置。

valueoffset:描述value在nvme命令中的偏移位置。

metadataoffset:描述元數(shù)據(jù)在nvme命令中的偏移位置。

dptr(datapointer):數(shù)據(jù)指針,指向待傳輸?shù)臄?shù)據(jù)。

mptr(metadatapointer):元數(shù)據(jù)指針,指向待傳輸?shù)脑獢?shù)據(jù)。

prp(physicalregionpage)entry:物理區(qū)域頁實例(或者稱為物理區(qū)域頁格式條目),可以記錄指針。prp是nvme協(xié)議中常用的兩種數(shù)據(jù)傳輸協(xié)議,可以用于nvmeoverpcie架構。prpentry可以指向物理內存頁(memorypage)的指針。

sgl(scattergatherlist)entry:分散搜集表實例(或者稱為分散搜集表格式條目),可以記錄指針。sgl是nvme協(xié)議中常用的兩種數(shù)據(jù)傳輸協(xié)議之一,可以用于nvmeoverpcie/fabric架構。

參見圖1,本發(fā)明提供一種數(shù)據(jù)處理方法實施例,可以用于nvme存儲器和主機之間。

11,主機生成nvme寫命令(后文簡稱寫命令)發(fā)送給存儲器,寫命令中攜帶value以及與value對應的key。寫命令通過主機的nvme接口發(fā)送給nvme存儲器。key和value可以攜帶在凈荷中,也可以攜帶在命令頭中。

本步驟中,key可以攜帶在命令的頭(header)中,也可以攜帶在凈荷(payload)中。本發(fā)明各實施例中,在沒特別聲明的情況下,寫命令/讀命令中攜帶的字段既可以在命令頭中,也可以在凈荷中。例如,value可以攜帶在命令頭中,也可以攜帶在凈荷中。

可選的,如果寫命令中攜帶不止一個kv,那么寫命令中還可以攜帶numberofkv,用于描述kv的數(shù)量。存儲器收到寫命令后,可以按照numberofkv指示的kv數(shù)量對kv進行讀取,讀取完所有kv后停止讀取。此外,還可以使用結束符來指示kv的結束,讀到結束符后停止讀取。

可選的,寫命令進一步攜帶kvformatid,傳輸kv的nvme命令可以有多種命令格式,不同的命令格式中,字段可以不同,字段的位置也可以不同。kvformatid用于指示本命令所使用的命令格式。

key在寫命令的命令頭中的位置可以是不固定的,也可以是預先設定的固定位置。如果key在寫命令中的位置是不固定的,寫命令中可以進一步攜帶key位置信息。key位置信息可以是keylength與keyoffset的組合,keyoffset描述key在寫命令中的起始位置。key位置信息也可以是key在寫命令中的起始位置和key在寫命令中結束位置的組合。如果key在寫命令中的起始位置預先設定,那么key位置信息可以是keylength,keylength描述key的長度。

有兩種方案可以預先設定關于key的起始位置。一種是預先設定key在命令中的位置,例如從命令的首個bit開始,從第20bits開始是key;另外一種是預先設定key和其他字段的相對位置,例如key字段在keylength字段之后,并且key字段與keylength字段相鄰。類似的,本實施例和其他實施例中涉及到的“預先設定”的位置均可以使用這兩種方案,例如本實施例后續(xù)將要介紹的value、metadata的起始位置。

key可以是定長或者變長。key是定長,指每個命令中的key長度相同。key是變長是指不同的命令中,key的長度可以不同。在key為定長的情況下,命令的接收方可以忽略位置信息(例如keylength),或者寫命令可以不屑道位置信息。存儲器收到寫命令后,直接按照預設的起始位置,按固定的長度讀取key即可。

value在寫命令中的位置可以是固定的也可以是不固定的。如果value在寫命令中的位置不是固定的,寫命令中可以進一步攜帶value位置信息。value位置信息可以是valuelength,value在寫命令中的起始位置預先設定,因此可以不攜帶在寫命令中。從value的起始位置開始,以valuelength作為讀取長度,就可以可從寫命令中讀取出value。value位置信息可以是valuelength與valueoffset的組合,valueoffset描述value在寫命令中起始位置。value位置信息也可以是value在寫命令中的起始位置和value在寫命令中結束位置這二者的組合。

value可以是定長或者變長。當value為固定長度的時候,命令的接收方可以忽略位置信息(例如valuelength),或者寫命令中不攜帶位置信息。命令的接收方直接按照預設的起始位置,按固定的長度讀取value即可。

可選的,寫命令中進一步攜帶value的metadata。metadata可以攜帶在寫命令的命令頭中或者凈荷中。

metadata在寫命令中的位置可以是固定的。如果metadata在寫命令中的位置不是固定的,寫命令中可以進一步攜帶metadata位置信息。metadata位置信息和value位置信息類似,因此可以參見value位置信息的描述,此處不做贅述。同樣的,metadata可以是定長或者變長。

參見圖2是一種可選的寫命令的命令格式,commonheader是nvme命令頭的一部分。該命令攜帶2個kv,因此有2個key,分別是key1和key2;有2個value,分別是value1和value2;2個keylength,分別是key1length和key2length;2個valuelength,分別是value1length以及value2length。此外,該命令還攜帶2個metadata,分別是metadata1和metadata2;以及對應的metadatalength1和metadatalength2。

參見圖3,是另一nvme命令格式示意圖。和圖2相比,增加了value位置信息(value1offset,value2offset),以及metadata位置信息(metadata1offset,metadata1length,metadata2offset,metadata2length),還增加了numberofkv,在圖3示例的命令中攜帶了2個kv,因此numberofkv的值是2。nvme命令中的位置信息描述的都是字段在nvme中的位置。圖3中以箭頭來表示:通過偏移量可以找到待寫數(shù)據(jù)的位置(例如起始位置)。例如,在讀出value1offset字段后,value1offset字段的值描述了value1在命令中的偏移位置,從而可以讀出value1offset。圖3的命令格式中,字段的分布按字段的類型確定,同類型的字段相鄰。例如value和metadata都屬于數(shù)據(jù)部分,因此相鄰;value位置信息和metadata位置信息都屬于位置信息,因此相鄰。

參見圖4,是另一nvme命令格式示意圖。和圖3相比,字段按照kv歸屬分布,同一個kv的字段相鄰。圖4的命令格式中,先是kv1的字段,然后是kv2的字段。此外,在圖4的命令格式中,value和valuelength;metadata和metadatalength。

參見圖5,是另一nvme命令格式示意圖。圖5中,同一個kv的字段相鄰。此外,valuelength和metadatalength相鄰,value和metadata相鄰。

12,存儲器的nvme接口接收寫命令,存儲器從寫命令中獲得key和value。如果寫命令中攜帶有metadata,則還從寫命令中獲得metadata。

存儲器由控制器和存儲介質組成,控制器中包括處理器,可選的,還可以包括內存。存儲介質例如是閃存或者磁盤。存儲器也可以是具有管理能力的硬盤,稱為智能硬盤。

如果多種類型的nvme命令格式(例如圖2和圖3分別是不同類型的nvme命令格式)被同一個存儲器支持,則存儲器通過kvformatid可以確定收到的命令是哪一種格式。然后按照這個格式中key、value等字段的位置讀出key和value等內容。不同的nvme命令格式,數(shù)據(jù)的位置關系可以不同。例如,有的格式中,key的位置是固定的;有的格式中,key的位置不是固定的,由key位置信息確定。

如果寫命令中攜帶一個kv,則讀出這一個kv。如果寫命令中攜帶至少兩個kv,則讀出這至少兩個kv。存儲器可以通過numberofkv字段獲知kv的數(shù)量,在讀出相應數(shù)量的kv后完成讀操作。除了使用numberofkv外來標記什么情況下完成讀操作外,也可以在命令中增加結束符來,在讀到結束符后表示整個命令中的kv已經(jīng)讀取完畢。

如果key的位置是固定的,則存儲器通過固定位置讀出key。如果key的位置不固定,則按照key位置信息從寫命令中讀出key。例如,key的位置信息是keylength,key在寫命令中的起始位置預先設定,從key的起始位置開始,以keylength作為讀取長度連續(xù)的讀出數(shù)據(jù),即可獲得寫命令中攜帶的key。例如,key的位置信息是keylength與keyoffset的組合,則以keyoffset作為key的起始位置,以keylength以keylength作為讀取長度連續(xù)的讀出數(shù)據(jù),即可獲得寫命令中攜帶的key。例如,key的位置信息是起始位置和結束位置共同組成,則讀取起始位置和結束位置之間的數(shù)據(jù),即可獲得key。

關于讀取value和metadata的讀取方式,均可以參考key的讀取方式,此處不再贅述。在讀出key/value/metadata時,存儲器可以獲得keylength/valuelength/metadatalength。

以圖2的命令格式為例,commandheader、kvformatid、keylength以及valuelength這幾個字段的長度是固定的,各個字段的相對位置也是固定的,因此可以不需要keyoffset、valueoffset等字段來確定key、value的起始位置。存儲器讀取寫命令各個字段的順序是:讀取commandheader,讀取kvformatid,讀取key1length,按照key1length所記錄的數(shù)值讀取key1,讀取value1length,按照value1length讀取value1,讀取key2length,按照key2length讀取key2,讀取value2length,按照value2length讀取value2。。

13,存儲器對value進行存儲。具體而言,是存儲器的控制器把key和value存儲到非易失性存儲介質中。存儲器的接口收到value后,先發(fā)送到處理器。本步驟中,處理器把value暫存在內存中,然后從內存下發(fā)到非易失性存儲介質。

此外,存儲器還可以記錄key和value存儲空間的映射關系。映射關系的可以由存儲器的存儲介質進行存儲;也可以是發(fā)送給主機,由主機進行存儲。后文以由存儲器進行存儲進行舉例。

如果寫命令中還攜帶metadata,則也對metadata進行存儲,并記錄key和metadata存儲空間的映射關系。

value存儲空間可以用value存儲空間的起始地址和value長度描述。metadata存儲空間可以包括metadata存儲空間的起始地址和metadatadata長度描述。參見圖6是映射關系的示意圖,包括key和value存儲空間的起始地址的映射,key和value長度的映射,key和metadata存儲空間的起始地址的映射,key和metadata長度的映射??梢园裬ey作為索引在映射關系中查找對應的value存儲空間的起始地址、value長度、metadata存儲空間的起始地址以及metadata長度。圖6的示意圖所描述的內容記錄在kv管理單元中。如果value和metadata定長,value長度和metadata長度是可選的。

存儲空間可以是邏輯位置或者物理位置。只要存儲器的控制器使用存儲空間可以從存儲介質中讀取value和metadata即可。

上面步驟11-步驟13是寫kv的過程,接下來的步驟14-步驟16是讀kv的過程。這兩個過程是相互獨立的,讀命令所請求的kv和寫命令所寫入的kv可以不是同一個。

14,主機生成nvme讀命令(后文簡稱讀命令),發(fā)送讀命令給存儲器,讀命令中攜帶所述key。key可以攜帶在讀命令的命令頭中。

生成讀命令的主機和生成寫命令的主機可以是同一個主機,也可以是不同主機。讀命令的命令格式參考步驟11中寫命令的格式以及圖2。讀命令包括commandheader,kvformatid和key??蛇x的,讀命令中攜帶key位置信息。一個讀命令中可以攜帶一個key也可以攜帶至少兩個key。當攜帶至少兩個key時,可以攜帶numberofkv字段,以描述攜帶的key的數(shù)量。

讀命令中可以沒有value字段以及其他和value相關的字段。此外,讀命令中可以沒有metadata字段以及其他和metadata相關的字段。

15,存儲器通過nvme接口,接收讀命令,從讀命令中獲得key。從存儲器存儲的kv管理單元中,查找key對應的value存儲空間。從value存儲空間中獲得value并構造讀命令的響應消息發(fā)送給主機,響應消息中攜帶value。

參考步驟12,按照命令格式的不同,獲得key的方式也略有不同。例如,可以從讀命令的固定位置獲得key,也可以按照讀命令中攜帶的位置信息從寫命令中獲得key。

類似的,如果存儲器中存儲有與key對應的metadata,可以按照類似的方法查詢metadata的存儲空間并獲得metadata。

需說明的是,如果kv管理單元存儲在主機中,則使用key在主機中查詢value存儲空間,把value存儲空間方式發(fā)送給存儲器,存儲器依靠value存儲空間獲得value發(fā)送給主機。

16,主機接收value并存儲。例如可以存儲在主機的內存(例如緩存)中,或者存儲在主機的非易失性存儲介質中。

上述步驟11-16中,value和metadata都攜帶在nvme命令中,不用進行kv和block之間的轉換,具有簡單快捷的優(yōu)點。讀命令不用攜帶value和/或metadata的lba,因此讀value和/或metadata的過程也更為快捷。

參見圖7,是本發(fā)明的數(shù)據(jù)處理系統(tǒng)硬件拓撲實施例,主機71和存儲器72通信。主機71包括處理器711、內存712以及接口713。存儲器72包括接口721、控制器722以及存儲介質723。接口713和接口721通過通信鏈路73連接,通信鏈路73例如是pcie總線、光纖通道fc或者以太網(wǎng)。

主機71所執(zhí)行的操作可以由處理器711執(zhí)行,例如處理器711通過運行內存712中的程序,可以執(zhí)行步驟11、14和16,內存712和處理器711相對獨立,也可以集成在一起。存儲器72包括控制區(qū)721和存儲介質722。存儲器72所執(zhí)行的操作由存儲器的控制器721執(zhí)行。具體而言,可以由處理器7211運行內存7212中的程序來執(zhí)行存儲器的操作,例如存儲器的處理器用于執(zhí)行步驟12、13和15。在一些情況下,例如當處理器是fpga的時候,可以沒有內存,直接由處理器執(zhí)行相應的操作。

類似的,后續(xù)的方法中使用了相同的硬件,不同在于,主機和存儲器用于執(zhí)行的操作不同。例如,步驟21、24和27由主機71執(zhí)行,23和25由存儲器72執(zhí)行。步驟22和26中,一部分操作由主機71執(zhí)行,另外一部分操作由存儲器72執(zhí)行。

參見圖8,本發(fā)明還提供一種實施方式,寫命令中不直接攜帶value或者metadata,而是在nvme命令中攜帶指針,通過指針指向的存儲空間可以獲得待寫value和/或metadata,或者采用多級指針的方式,一個指針指向另外一個指針,從另外一個指針所指向的存儲空間獲得待寫value和/或metadata。這種實施方式對于待寫的value和/或待寫的metadata的大小沒有限制。

主機和存儲器可以通過ip、fc等網(wǎng)絡連接,可以運行在fabric架構,也稱為nof(nvmeoverfabric)架構。在nof架構下,存儲器可以通過遠程直接數(shù)據(jù)存取(remotedirectmemoryaccess,rdma)的方式獲得value和/或metadata。如果存儲器在主機內部,存儲器還可以通過直接數(shù)據(jù)存取(directmemoryaccess,dma)的方式從主機獲得value和/或metadata。類似的,主機也可以通過rdma/dma的方式從存儲器直接獲得value和/或metadata。

步驟21,主機構造寫命令,寫命令中攜帶kv,kv包括value指針以及value的key。寫命令通過主機的nvme接口發(fā)送給nvme存儲器。所述key和所述value屬于同一個kv對。

value指針可以攜帶在凈荷中,也可以攜帶在命令頭中。類似的,寫命令或者讀命令中攜帶的其他數(shù)據(jù)既可以攜帶在命令頭中,也可以攜帶在凈荷中。

在其他實施例中,寫命令也可以攜帶key指針而不攜帶key。根據(jù)key指針獲得key的方案,和通過value指針獲得value的原理相同,因此下面不做贅述。僅以寫命令攜帶key為例進行介紹。

value指針直接或者間接的指向了value的存儲空間(為了方便描述,后文也稱作第一存儲空間),因此通過value指針可以獲得value。value指針指向value存儲空間(這種情況也被視為value指針指向了value)的情況下,可以從value指針指向的存儲空間獲得value。另外一種情況是,value指針指向第一指針,而第一指針指向value的存儲空間,從value指針找到第一指針,從第一指針指向的存儲空間可以獲得value。后一種情況中,可以攜帶尺寸更大的value。在其他實施例中,指針之間的引用還可以有更多的層級,只要最終能找到value的存儲空間即可,例如value指針指向第一指針,第一指針指向第a1指針,第a1指針指向第a2指針,……,第an-1指針指向第an指針,第an指針指向value的存儲空間,n是大于等于2的整數(shù)。value指針可以攜帶在寫命令的命令頭或者凈荷中。

所述第一存儲空間可以用第一存儲空間的首地址和所述value長度描述,也可以用第一存儲空間的首地址和末地址描述。例如:value指針記錄第一存儲空間的首地址和value長度;或者,value指針指向了另一個指針,所述另一個指針記錄第一存儲空間的首地址和value長度。第一存儲空間可以是邏輯位置或者物理位置。只要存儲器使用第一存儲空間可以從存儲介質中讀取存儲的數(shù)據(jù)即可。

可選的,如果寫命令中攜帶不止一個kv,那么寫命令中還可以攜帶numberofkv。用于描述kv的數(shù)量。

可選的,寫命令進一步攜帶kvformatid,傳輸kv的nvme命令可以有多種命令格式,不同的命令格式中,字段可以不同,字段的位置也可以不同。kvformatid指示本命令所使用的命令格式。

key在寫命令的命令頭中的位置可以是固定的,也可以是預先設定的固定位置。key的特征可以參見步驟11對key的描述,此處不做贅述。

可選的,寫命令中進一步攜帶metadata指針。和value指針類似,metadata指針直接或者間接指向metadata存儲空間,因此通過metadata指針可以獲得metadata。metadata指針可以攜帶在寫命令的命令頭或者凈荷中。

metadata指針直接或者間接的指向了metadata的存儲空間,通過metadata指針可以獲得metadata。metadata指針直接指向metadata(具體而言是metadata的存儲空間)的情況下,可以從metadata指針指向的存儲空間獲得metadata;另外一種情況是,metadata指針指向第二指針,而第二指針指向metadata的存儲空間,從metadata指針找到第二指針,從第二指針指向的存儲空間可以獲得metadata。后一種情況中,可以攜帶更長的metadata。在其他實施例中,指針之間的引用還可以有更多的層級,只要最終能找到metadata的存儲空間即可,例如metadata指針指向第二指針,第二指針指向第b1指針,第b1指針指向第b2指針,……,第bn-1指針指向第bn指針,第bn指針指向metadata的存儲空間,n是大于等于2的整數(shù)。

此外,metadata可以不通過指針的方式傳輸,而是直接攜帶在命令中,具體可以參考步驟11以及圖2、圖3中metadata的攜帶方式。

value指針可以是數(shù)據(jù)指針(datapointer,dptr)。metadata指針可以是元數(shù)據(jù)指針(metadatapointer,pmtr)。

參見圖9,是一個命令格式圖。圖9的命令中攜帶2個kv,kv中key直接攜帶在寫命令中,value是以指針的方式攜帶在寫命令中。分別是key1和dptr1(指向value1),以及key2和dptr2(指向value2)。此外,還通過指針的方式攜帶了這2個kv的metadata,其中mptr1指向metadata1,mptr2指向metadata2。本發(fā)明實施例中,每個命令可以攜帶1個kv,也可以攜帶2組以上的kv。

參見圖10,是另外一個命令格式圖。命令中的指針(dptr,mptr)沒有直接指向value或者metadata,而是指向prpentry或者sglentry,prpentry或者sglentry是鏈表中的節(jié)點,每個prp/sglentry指向了另外一個地址,prp/sglentry指向的地址中存儲了value或者metadata。也就說,寫命令通過二級指針的方式指向了value或者metadata。在圖10的方案中,key攜帶在命令中,具體而言是寫的在命令頭中。

參見圖11的命令格式,和圖10不同之處在于,圖10的key沒有直接攜帶在命令中,而是通過指針的方式傳輸,具體如何攜帶可以參考value指針的介紹。key指針可以攜帶在命令的命令頭中。

具體而言,dptr指向prp/sglentry1,而prp/sglentry2和prp/sglentry1屬于同一個鏈表,因此找到prp/sglentry1即可以找到prp/sglentry2。因此,也可以認為dtpr指向了prp/sglentry1以及prp/sglentry2。prp/sglentry1指向了value1,prp/sglentry2指向了value2。類似的,mptr指向了prp/sglentry3以及prp/sglentry4,prp/sglentry3指向了metadata1,prp/sglentry4指向了metadata2。依靠dptr可以找到value1的存儲空間和value2的存儲空間;依靠mptr,可以找到metadta1的存儲空間和metadata2的存儲空間。prpentry和sglentry均是鏈表中的節(jié)點,prp適用于普通nvme(用pcie連接主機和存儲器),sgl適用于nof(用fabic連接主機和存儲器)。rdma可以使用prp,dma可以用prp或者sgl。

prp通過一系列的指向memorypage指針,將數(shù)據(jù)所在的位置傳輸給nvme設備,nvme設備收到這些地址后,通過dma的方式即可將數(shù)據(jù)從主機讀取到nvme設備上。sgl傳輸機制相對于prp更加靈活一些,可以指定傳輸?shù)拈L度,能夠在地址連續(xù)的傳輸過程中跳過一些地址空間進行傳輸。sgl將需要傳輸數(shù)據(jù)的地址傳輸給nvme設備,nvme設備收到這些地址之后,通過dma的方式將數(shù)據(jù)從主機讀取到nvme設備上。

此外,相較于圖9,圖10中還增加了numberofkv字段以及keylength字段,在步驟11、步驟12中已有介紹,不再贅述。

步驟22,存儲器通過nvme接口接收寫命令。存儲器通過value指針獲得value的長度,按照value長度為value分配存儲空間(為了方便描述,后文稱作第二存儲空間),把分配的存儲空間的位置信息發(fā)送給主機。存儲器發(fā)送傳輸請求(第一傳輸請求)給主機,從主機的第一存儲空間獲得value。主機和存儲器是pcie連接,則第一傳輸請求可以是dma傳輸請求,例如單個dma傳輸請求。主機和存儲器是fabric連接,則第一傳輸請求可以是rdma傳輸請求,例如單個rdma傳輸請求。第一傳輸請求把第一存儲空間的地址作為訪問地址,第二存儲空間的地址作為寫入地址。第一傳輸請求中,訪問地址可以是:第一存儲空間的首地址+value長度,寫入地址可以是:第二存儲空間的首地址(或者是第二存儲空間的首地址+value長度)。

存儲器發(fā)送dma/rdma傳輸請求給主機,主機收到傳輸請求后執(zhí)行dma/rdma傳輸,把value發(fā)送給存儲器。

預先分配第二存儲空間是可選的,存儲器也可以不提前分配第二存儲空間,直接從主機獲得value,然后再為value分配第二存儲空間。這種情況下,第一傳輸請求不攜帶寫入地址。

如果寫命令中攜帶有metadata指針,則還為metadata分配存儲空間(第四存儲空間)。由于metadata指針的處理方式和value指針相似,因此后續(xù)僅對value指針進行介紹。

在按照value指針獲得value之前,按照value長度在存儲器中中分配用于存儲value的存儲空間(第二存儲空間),第二存儲空間不小于value長度。第二存儲空間的可以用首地址+末地址描述,也可以用首地址+value長度描述,也可以僅用首地址描述。value長度可以由value存儲空間確定。例如寫命令中,第一存儲空間由存儲value的空間的起始地址+value長度描述,則可以直接從寫命令中獲得value長度。

存儲器由控制器和存儲介質組成,控制器中包括處理器,存儲介質例如是閃存或者磁盤。

commandheader、kvformatid、key以及keylength這幾個字段在步驟12中已有介紹,如何獲得它們,以及如何利用他們獲得相應信息此處不再贅述。

和步驟11-16所介紹的實施例不同的是,本實施例中不是直接從命令中獲得value和/或metadata,而是依靠指針來獲得value和/或metadata。

寫命令中攜帶的value指針直接指向了第一存儲空間,例如圖9的命令格式,寫命令中的指針dptr指向了value存儲空間(第一存儲空間)。具體而言,指針dptr指向了主機的一段內存地址范圍,這一段內存地址范圍存儲了所述value。則按照dptr描述的存儲空間,以dma或者rdma的方式從主機內存地址獲得value和。按照同樣的方式,可以通過mptr獲得metadata。

如果寫命令中的value指針間接指向value,可以參考圖10的寫命令格式:value指針直接指向了另外一個指針,另外一個指針指向value。寫命令中的指針dptr指向了prp/sglentry,prp/sglentry指向了主機內存地址,主機內存地址是value的存儲空間。存儲器先通過dptr找到prp/sglentry,然后通過prp/sglentry找到位于主機內存的value存儲空間,以dma或者rdma的方式從主機內存中獲得所述value。

如果metadata指針攜帶在寫命令中,則獲得metadata的方式和獲得value的方式相同。如果metadata直接攜帶在寫命令中,則可以參照步驟12從寫命令中直接獲得metadata。

存儲器發(fā)送第一傳輸請求給主機,從主機的第一存儲空間獲得value。如果主機和存儲器是pcie連接,第一傳輸請求可以是dma傳輸請求;如果主機和存儲器是fabric連接,第一傳輸請求可以是rdma傳輸請求。具體而言,可以分為兩個步驟:(1)主機發(fā)送傳輸請求給主機,傳輸請求中攜帶第一存儲空間作為訪問地址,攜帶所述第二存儲空間作為寫入地址。具體而言,傳輸請求中攜帶的第一存儲空間,可以由第一存儲空間的首地址和所述value長度描述;第二存儲空間用第二存儲空間的首地址描述。(2)主機收到傳輸請求后,從第一存儲空間讀出數(shù)據(jù),發(fā)送給存儲器的第二存儲空間進行存儲。

本步驟中,可以傳輸key、value以及metadata通過單個dma/rdma傳輸。也可以把key、value和metadata分別進行傳輸。

步驟23,存儲器對value進行存儲。具體而言,可以是存儲器的控制器把key和value存儲到存儲器的存儲介質中。如果步驟22中還獲得有metadata,也對metadata進行存儲。

例如從第二存儲空間的首地址開始,把value連續(xù)的存入存儲器的存儲介質中。

此外,還可以記錄key和value存儲空間的映射關系,參見圖6,圖6中value存儲空間由首地址+value長度描述。映射關系記錄在kv管理單元中。value長度和metadata長度是可選的,因為這value和metadata都可以是固定長度。

上述步驟21-23中,value以指針的方式進行傳輸。在其他實施例中,key也可以用指針(直接指針或者間接指針)的方式傳輸,具體可以參照value的傳輸方式,此處不贅述。

上述步驟21-23是寫命令的過程,步驟24-26是讀命令的執(zhí)行過程,這兩個過程是相互獨立的。讀命令所請求的kv和寫命令所寫入的kv可以不是同一個。讀命令和寫命令的命令格式相似,區(qū)別在于讀命令不攜帶value指針和metadata指針。

24,主機生成讀命令發(fā)送給存儲器,讀命令中攜帶所述key。key可以攜帶在讀命令的命令頭中。

生成讀命令的主機和生成寫命令的主機可以是同一個主機,也可以是不同主機。讀命令的格式參考步驟11中寫命令的格式以及圖2,讀命令包括commandheader,kvformatid和key??蛇x的,讀命令攜帶key或者key指針。一個讀命令中可以攜帶一個key也可以攜帶至少兩個key。當攜帶至少兩個key時,可以攜帶numberofkv字段,以描述攜帶的key的數(shù)量。

讀命令請求讀出value和/或metadata。

和寫命令相比,讀命令中可以沒有value字段以及value位置信息,讀命令中可以沒有metadata字段以及metadata位置信息。

25,存儲器通過nvme接口接收讀命令,從讀命令中獲得key。使用獲得的key,從存儲器存儲的映射關系中,查找value的存儲空間并發(fā)送給主機。value在存儲器中的存儲空間是第二存儲空間。

如果key直接攜帶在讀命令中,參考步驟12,按照命令格式的不同,從讀命令中獲得key的方式也略有不同。例如,可以從讀命令的固定位置獲得key;如果key在讀命令中的位置不固定,可以按照讀命令中攜帶的位置信息從讀命令中獲得key。

可選的,如果存儲器中存儲有與key對應的metadata,還可以獲得metadata的存儲空間并發(fā)送給主機。

26,主機按照value長度給value分配存儲空間(命名為第三存儲空間)。主機構造傳輸請求(第二傳輸請求),發(fā)送傳輸請求給存儲器,從存儲器第二存儲空間中獲得value。

主機和存儲器是pcie連接,則第二傳輸請求可以是dma傳輸請求,例如單個dma傳輸請求;主機和存儲器是fabric連接,則第二傳輸請求可以是rdma傳輸請求,例如單個rdma傳輸請求。傳輸請求中,訪問地址可以是:第二存儲空間的首地址+value長度,寫入地址可以是第三存儲空間的首地址(或者是第三存儲空間的首地址+value長度)。由前述步驟可知第二存儲空間用于存儲所述value,因此所述value長度和第二存儲空間大小相同。也就是說第二存儲空間的大小等于第三存儲空間的大小。

value長度可以由value存儲空間確定。例如在讀命令中中,第二存儲空間由存儲value的空間的起始地址+value長度描述,則可以直接從寫命令中獲得value長度。

主機發(fā)送dma/rdma傳輸請求給存儲器,存儲器收到傳輸請求后執(zhí)行dma/rdma傳輸,把value發(fā)送給主機。

預先分配第三存儲空間是可選的,主機也可以不提前分配第三存儲空間,直接從存儲器獲得value,然后再為value分配第三存儲空間。這種情況下,傳輸請求不攜帶寫入地址。

類似的,主機可以按照metadata長度給metadata分配存儲空間。并從存儲器獲取metadata。

27,主機把收到的value存入第三存儲空間。例如從第三存儲空間的首地址開始,把value連續(xù)的存入主機。第三存儲空間例如在主機的內存中。

采用把value存入主機的的相類似的方法,把所述metadata存入主機。

需要說明的是,在其他實施例中,可以不使用dma或者rdma,把步驟26、27修改為:主機給所述value分配存儲空間,存儲器從所述第二存儲空間中讀出所述value,把讀出的value寫入所述第三存儲空間。

此外,步驟26的另外一種可選方案是:所述nvme存儲器接收的所述主機發(fā)送的nvme讀命令中還可以進一步攜帶所述主機的空閑空間信息,空閑空間信息用于描述主機中連續(xù)的空閑存儲空間的大小。所述nvme存儲器從所述主機接收所述nvme讀命令之后,進一步包括:所述nvme存儲器判斷所述主機的空閑存儲空間是否大于等于所述第二存儲空間,如果是,執(zhí)行將所述第二存儲空間的位置信息發(fā)送給所述主機的步驟,如果否,結束步驟。這種方案中,可以把主機中連續(xù)的空閑存儲空間稱為所述第三存儲空間。

參見圖12,以同一個命令中攜帶value指針和metadata指針為例,對步驟21-步驟23進行介紹。

步驟31,主機構造寫命令。寫命令中攜帶key。此外,寫命令中攜帶value源地址鏈表和metadata源地址鏈表。源地址鏈表擁有指針的功能,value和metadata的源地址鏈表分別指向value的存儲空間和metadata的存儲空間。

步驟32,主機發(fā)送寫命令給nvme設備。

步驟33,nvme設備收到寫命令后,從寫命令中解析出value源地址鏈表和metadata的源地址鏈表。鏈表例如是prpentry或者sglentry。

步驟34,nvme設備從value源地址鏈表中解析出value長度,從metadata的源地址鏈表中解析出metadata長度。源地址鏈表描述了待讀取數(shù)據(jù)的存儲空間,因此可以從中解析出value長度和metadata長度。

步驟35,nvme設備向主機發(fā)送dma或者rdma請求。請求中攜帶value源地址鏈表、metadata源地址鏈表、value目的地址鏈表以及metadata目的地址鏈表。value目的地址鏈表描述nvme設備預留的、用于存儲value的存儲空間,metadata目的地址鏈表描述nvme設備預留的、用于存儲metadata的存儲空間。

步驟36,主機接收到dma/rdma請求后,按照步驟35的源地址和目的地址,向nvme設備發(fā)送key。

步驟37,nvme設備把value和metadata存儲在介質中。

步驟38,nvme設備記錄value的存儲空間和metadata的存儲空間。存儲空間和key建立映射,以便后續(xù)使用key查找value存儲空間和metadata存儲空間。映射關系可以存儲在kv管理單元中,kv管理單元還可以記錄valuelength和metadatalength。

上述步驟中,key直接攜帶在命令中。在其他實施方式中,命令也可以不攜帶key而是攜帶key指針。存儲器收到命令后,按照key指針獲得key。獲得key的具體步驟可以參考步驟22獲得value的過程,由于原理類似,此處不再贅述。

參見圖13,以同一個命令中攜帶value指針和metadata指針為例,對步驟24-27的具體描述。

步驟41,主機構造讀命令,讀命令中攜帶有key。

步驟42,主機把攜帶有key的讀命令中給nvme設備。

步驟43,nvme設備從kv管理單元查找所述key對應的valuelength和metadatalength。其中,kv管理單元記錄有value存儲空間和metadata存儲空間。

以value存儲空間為例,value存儲在nvme設備中,value存儲空間由value首地址+末地址描述,或者由首地址+valuelength。因此,獲得value存儲空間后,可以獲得valuelength。類似的,可以獲得metadatalength。

步驟44,nvme設備發(fā)送響應消息給主機,響應消息中攜帶valuelength和metadatalength。

步驟45,主機按照valuelength和metadatalength,給value和metadata分配存儲空間,作為將來存儲value和metadta之用。

步驟46,主機向nvme設備發(fā)送dma/rdma請求,請求中攜帶本次傳輸?shù)脑吹刂泛湍康牡刂贰T吹刂肥莕vme中的value存儲空間和metadata存儲空間,目的地址是主機為value預留的存儲空間,以及為metadata預留的存儲空間。

步驟47,收到主機的dma/rdma請求后,nvme設備按照dma/rdma協(xié)議發(fā)送value以及metadata。

步驟48,主機接收value和metadata。

步驟49,主機存儲收到的value和metadata,例如存儲在主機內存中。

dma或者rdma通常用于讀取一段連續(xù)的地址空間的數(shù)據(jù),當存儲value的存儲空間和存儲metadata的存儲空間不連續(xù)的時候,可以分作兩次dma/rdm傳輸進行處理。

參見圖14,本發(fā)明另外提供一個基于步驟21-23的實施例,對基于圖12的實施例進行改進。改進之處在于:同一個命令的key、value和metadata分成三次dma/rdma傳輸獲得。

可選的,如果其中任意一個傳輸失敗,意味著這個kv傳輸不成功,因此已傳輸成功的數(shù)據(jù)可以刪除,上傳錯誤碼。取消后續(xù)數(shù)據(jù)傳輸。并且可以釋放之前為kv(key、value和metadata)分配的存儲空間。

步驟51,構造nvme寫命令。

寫命令中攜帶key。此外,寫命令中攜帶value源地址鏈表和metadata源地址鏈表。源地址鏈表擁有指針的功能,value和metadata的源地址鏈表分別指向value的存儲空間和metadata的存儲空間。

步驟52,主機發(fā)送寫命令給nvme設備。

步驟53,nvme設備收到寫命令后,從寫命令中解析出value源地址鏈表和metadata的源地址鏈表。鏈表例如是prpentry或者sglentry。

步驟54,nvme設備從key源地址鏈表中解析出key長度,從value源地址鏈表中解析出value長度,從metadata的源地址鏈表中解析出metadata長度。為key、value、metadata預留存儲空間。源地址鏈表描述了待讀取數(shù)據(jù)的存儲空間,因此可以從中解析出value長度和metadata長度。

步驟55,nvme設備向主機發(fā)送dma/rdma請求。請求中攜帶key源地址鏈表和key目的地址鏈表。key目的地址鏈表描述nvme設備預留的、用于存儲key的存儲空間。

步驟56,主機接收到dma/rdma請求后,按照步驟55的源地址和目的地址,向nvme設備發(fā)送key。

步驟57,如果key傳輸失敗,則nvme設備取消后續(xù)value、metadata的傳輸??蛇x的,釋放為key、value和metadata預留的存儲空間。上報錯誤碼給主機。如果key傳輸成功,則繼續(xù)后續(xù)步驟58。

步驟58,nvme設備向主機發(fā)送dma/rdma請求。請求中攜帶value源地址鏈表和value目的地址鏈表。value目的地址鏈表描述nvme設備預留的、用于存儲value的存儲空間。

步驟59,主機接收到dma/rdma請求后,按照步驟58的源地址和目的地址,向nvme設備發(fā)送value。

步驟60,如果value傳輸失敗,則nvme設備取消后續(xù)metadata的傳輸??蛇x的,釋放為value和metadata預留的存儲空間。可選的,刪除已經(jīng)傳輸?shù)膋ey。上報錯誤碼給主機。如果value傳輸成功,則繼續(xù)后續(xù)步驟61。

步驟61,nvme設備向主機發(fā)送dma/rdma請求。請求中攜帶metadata源地址鏈表和key目的地址鏈表。metadata目的地址鏈表描述nvme設備預留的、用于存儲key的存儲空間。

步驟62,主機接收到dma/rdma請求后,按照步驟61的源地址和目的地址,向nvme設備發(fā)送metadata。

步驟63,如果metadata傳輸失敗,可選的,釋放為metadata預留的存儲空間。可選的,刪除已經(jīng)傳輸?shù)膋ey和value。上報錯誤碼給主機。如果value傳輸成功,則繼續(xù)后續(xù)步驟64。

步驟64,存儲value和metadata到存儲器。步驟60和63所獲得的value和metadata在內存中,本步驟把value和metadata存儲到非易失性介質中,例如nvme設備的硬盤。

步驟65,記錄value的存儲空間和metadata的存儲空間。

從圖14的步驟55-步驟63可以看出,key、value和metadata分別通過不同的dma傳輸獲得,如果其中任意一項數(shù)據(jù)傳輸失敗,就取消余下數(shù)據(jù)的傳輸,已傳輸成功的數(shù)據(jù)可以刪除。圖14的其余步驟和圖12相似,前文已有介紹,此處不再贅述。

類似的,除了value和metadata可以分開傳輸。value(或者metadata)也可以分開多次傳輸,例如把一個value分成兩次以上dma/rdma傳輸。任意一次傳輸失敗,則判定整個kv傳輸失敗,釋放為key、value和metadata預留的存儲空間。當所述nvme存儲器和所述主機用pcie總線連接,所述存儲器發(fā)送至少兩個dma傳輸請求給所述主機以獲得所述value,每個dma傳輸獲得所述value的一部分。當所述nvme存儲器和所述主機用frabic連接,所述存儲器發(fā)送至少兩個rdma傳輸請求給所述主機以獲得所述value,每次rdma傳輸獲得所述value的一部分。

value(或metadata)分成多次傳輸?shù)姆桨?,可以和步驟55-步驟63中所描述的value和metadata分開傳輸?shù)姆桨负喜⑹褂?。這種情況下,任意一次傳輸失敗(或者說,傳輸請求執(zhí)行失敗),則判定整個kv傳輸失敗,釋放為key、value和metadata預留的存儲空間。

圖14的流程描述的是對寫命令的處理方式,dma/rdma傳輸請求的發(fā)起者是nvme設備。類似的,在讀命令的處理流程中,也可以采用類似的方案,key、value和metadata分別通過不同的dma傳輸獲取。不同之處在于,傳輸請求的發(fā)起者是主機,而通過dma/rdma傳輸key、value和metadata的是nvme設備。

參見圖15,本發(fā)明提供一種數(shù)據(jù)處理系統(tǒng),包括主機裝置80和存儲裝置90,主機裝置80和存儲裝置90通過pcie或者fabric連接。主機裝置80可以把kv數(shù)據(jù)讀出或者寫入存儲裝置90。

該主機裝置80可以是物理上設備或者邏輯裝置,包括收發(fā)模塊801,管理模塊802和緩存模塊803。存儲裝置90可以是物理上設備或者邏輯裝置,包括接口模塊901、處理模塊902和存儲模塊903。收發(fā)模塊801和接口模塊901通信。主機裝置80擁有前述主機的功能,存儲裝置90擁有前述存儲器的功能。

下面對主機裝置80和存儲裝置90的功能進行簡單介紹。需要說明的是,由于這兩個裝置(以及相應模塊)的功能在方法流程中已有詳細說明,因此這里僅做簡單介紹。

該存儲裝置90包括:接口模塊901,用于接收主機發(fā)送的nvme寫命令,所述nvme寫命令中攜帶key,所述nmve寫命令攜帶value指針,所述value指針指向所述主機中的第一存儲空間,所述第一存儲空間用于存儲value,所述key與所述value屬于同一個kv對;處理模塊902,用于從所述nvme寫命令中獲得所述key,根據(jù)所述value指針獲得value長度,按照所述value長度為所述value分配第二存儲空間;存儲模塊903,用于發(fā)送第一傳輸請求給所述主機,從所述主機獲得所述value,把所述value保存在所述第二存儲空間中。所述第二存儲空間可以由在所述nvme存儲器的存儲介質提供,所述存儲介質和所述nvme存儲器的處理器連接?;谠摲桨?,kv數(shù)據(jù)從主機傳遞到nvme存儲器的過程中,不需要把kv數(shù)據(jù)轉換成塊的形式,提高了kv數(shù)據(jù)的存儲效率。

或者該存儲裝置90包括:接口模塊901,用于接收nvme寫命令,所述nvme寫命令的頭部攜帶鍵key,所述nmve命令還攜帶值value,所述key和所述value對應,所述key和所述value屬于同一個kv對;處理模塊902,用于從所述nvme寫命令中獲得所述key以及所述value;存儲模塊903,用于把所述value保存在所述nvme存儲器的存儲介質中。

在一種實施方式中,該主機裝置80的包括:收發(fā)模塊801,用于發(fā)送nvme讀命令給存儲裝置90,所述nmve命令攜帶key;所述收發(fā)模塊801,還用于從所述nvme存儲器接收所述nvme讀命令的響應消息,所述響應消息攜帶第二存儲空間的位置信息;管理模塊802,用于按照所述value位置信息中的value長度給value預留第三存儲空間;所述收發(fā)模塊801,還用于發(fā)送傳輸請求給所述nvme存儲器,所述傳輸請求的訪問地址是所述第二存儲空間,以及從所述nvme存儲器獲得所述value;緩存模塊803,把所述value保存在所述主機裝置80的第三存儲空間中?;诖四K結構,主機裝置可以可以讀取存儲裝置讀取value和或metadata。

結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術方案的特定應用和設計約束條件。專業(yè)技術人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應認為超出本發(fā)明的范圍。

以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,基于本發(fā)明的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應所述以權利要求的保護范圍為準。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
和平区| 黄浦区| 且末县| 侯马市| 东海县| 古交市| 蓬溪县| 荆州市| 兴和县| 苏尼特左旗| 县级市| 安达市| 左权县| 仙居县| 甘谷县| 泗水县| 周口市| 商水县| 永春县| 内江市| 始兴县| 航空| 上虞市| 宁化县| 太原市| 临清市| 怀仁县| 丹江口市| 平度市| 太谷县| 洪江市| 山阳县| 额尔古纳市| 米泉市| 陆良县| 贺州市| 唐海县| 莎车县| 六枝特区| 庆阳市| 偃师市|