NVMeoverFabric架构中数据读写命令的控制方法、设备和系统与流程

文档序号:11530699阅读:256来源:国知局
NVMe over Fabric架构中数据读写命令的控制方法、设备和系统与流程

本发明涉及信息技术领域,特别涉及一种基于fabric的非易失性高速传输总线nvme,nvmeoverfabric,架构中数据读写命令的控制方法、设备和系统。



背景技术:

非易失性高速传输总线(英文:nvme,non-volatilememoryexpress)是一种控制器接口标准,统一了通过快速外围部件互连(英文:pcie,peripheralcomponentinterconnectexpress)总线进行连接的nvme设备和主机(英文:host)之间的队列(英文:queue)传输机制,优化了队列接口等。

已经发布的pcie架构的nvme标准在产业界取得了巨大的成功之后,业界很快希望将nvme标准扩展到数据中心领域。但受限于数据中心领域没有大量现成的pcie网络以及pcie协议本身的缺陷(扩展性、远距离连接等),产业界正在推动将nvme协议运行在iwarp,基于融合以太的远程内存直接访问协议(英文:roce,remotedirectmemoryaccessoverconvergedethernet),infiniband,光纤通道(英文:fc,fiberchannel),omni-path等网络上,以提供更灵活的更广泛的应用。业界将nvme协议运行在iwarp、roce、infiniband、fc和omni-path等网络上的应用称之为nvmeoverfabric(简称nof)。

在nvmeoverfabric的架构中,host表示主机,主机负责发起数据的读写;target表示目标存储设备,负责接收并且执行host发送的命令。当target接收到host发送的writecommand之后,target中的网卡解析writecommand中的内容得到writecommand需要传输的数据长度,并在网卡内存中分配对应的存储空间,用于缓存host待传输的数据。target的网卡缓存需要传输的数据后,再将缓存的数据迁入target中的目的硬盘中。当host通过readcommand从target的硬盘中读取数据时,实现过程类似。即需要先将target的硬盘中的数据缓存在网卡内存中,再将缓存在网卡内存中的数据,发送给host。

在具体的业务实现时,可能会出现网卡的网卡内存不足的情况。即网卡内存的存储空间不能缓存host通过命令(包括writecommand或readcommand)传输的数据。在这种情况下,会导致host发出的命令执行失败。host需要等到网卡内存中其它存储空间被释放后才能再次申请可用存储空间。并且,target中的网卡需要缓存未被执行的命令、等待内存空间的释放以及再次分配可用内存空间等等。这样的实现方式使得target中网卡在处理网卡内存不足时的实现方式复杂,可维护性也差。



技术实现要素:

本发明实施例提供一种nvmeoverfabric架构中数据读写命令的控制方法、设备和系统,以解决因target中网卡内存的存储空间不足,导致的缓存数据读写命令时所带来的处理机制复杂的问题。

一方面,本发明实施例提供了一种基于nvmeoverfabric架构中控制设备与存储设备之间数据读写命令的控制方法,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其中:

所述控制设备获取所述缓存单元的可用存储空间;

所述控制设备判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;

在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;

在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。

通过上述方法,所述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;在所述第一数据占用的存储空间大于或等于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。

可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。

可选的,所述控制设备和所述存储设备之间可以通过iwarp、roce、infiniband、fc或omni-path等网络实现连接和通信。

所述存储设备中的数据处理单元可以是网卡、独立的现场可编程门阵列(英文:fpga,fieldprogrammablegatearray)芯片或存储设备中的中央处理器(英文:cpu,centralprocessingunit)来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或所述存储设备中cpu的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的cpu的内存中的至少两个组成的缓存资源池来实现来实现。

在一个可能的设计中,所述控制设备获取所述缓存单元的可用存储空间包括:

所述控制设备在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。

在一个可能的设计中,在所述控制设备向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述方法还包括:

所述控制设备向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;

所述控制设备接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。

这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。

可选的,所述控制设备执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤。即所述控制设备只在预设时间内执行获取缓存单元的可用存储空间以及判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间的步骤。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。

在一个可能的设计中,所述方法还包括:

所述控制设备暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。

在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。

其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。

可选的,所述控制设备可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述控制设备也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。

可选的,所述控制设备记录的所述网卡内存的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。

可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的cpu的缓存中,或所述控制设备的网卡的缓存中,还可以独立的fpga芯片中的一个存储空间中。

在一个可能的设计中,所述方法还包括:

所述控制设备在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;

所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。

所述控制设备在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。

在一个可能的设计中,所述方法还包括:

所述控制设备暂停发送所述第一数据读写命令达到预设时间后,所述控制设备再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。

可选的,所述第一数据读写命令为写数据命令,所述第一数据为需要存储的数据。所述控制设备发送给所述存储设备的写数据命令中携带sgl(英文:scattergatherlist),所述sgl中包含需要存储的数据在所述控制设备中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。所述数据处理单元可以根据所述写数据命令中sgl携带的所述需要存储的数据在所述控制设备中的源地址,以远程直接数据存取(英文:rdma,remotedirectmemoryaccess)方式接收所述需要存储的数据,并将所述需要存储的数据缓存在所述缓存单元中。在所述需要存储的数据被缓存在所述缓存单元后,所述数据处理单元修改所述写数据命令,将所述写数据命令中携带的所述需要存储的数据在所述控制设备中的源地址,修改为所述缓存单元中存储所述需要存储的数据的地址,并将修改后的写数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘的控制器的写数据命令携带的sgl中包括所述缓存单元中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。

其中,目的硬盘是所述数据处理单元根据所述写数据命令中所述需要存储的数据在所述存储设备中的目的地址确定的。所述数据处理单元能够根据所述需要存储的数据在所述存储设备中的目的地址,确定所述需要存储的数据在所述存储设备中的哪个硬盘中,并将所述需要存储的数据在所述存储设备中的目的地址所在的硬盘确定为目的硬盘。

所述数据处理单元在确定目的硬盘后,将修改后的写数据命令发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的写数据命令中携带的所述需要存储的数据在所述缓存单元中的地址,从所述缓存单元中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过rdma或直接内存存取(英文:dma,directmemoryaccess)的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。

当所述第一数据读写命令为读数据命令时,所述第一数据为需要读取的数据。所述控制设备发送给所述存储设备的读数据命令中携带sgl,所述sgl中包含需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在所述控制设备中的目的地址等信息。所述数据处理单元收到所述读数据命令后,修改所述读数据命令,将所述读数据命令中携带的所述需要读取的数据在所述控制设备中的目的地址,修改为所述缓存单元的存储空间中缓存所述需要读取的数据的地址,并将修改后的读数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘控制器的读数据命令携带的sgl中包括所述需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述缓存单元的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的读数据命令,将所述需要读取的数据迁移到所述缓存单元的存储空间中。可选的,目的硬盘的控制器通过rdma或dma的方式,将所述需要读取的数据迁移到所述缓存单元的存储空间中。

当所述需要读取的数据缓存在所述缓存单元的存储空间后,所述数据处理单元根据所述读数据命令中所述需要读取的数据要写入所述控制设备中的目的地址,将缓存的所述需要读取的数据发送给所述控制设备。可选的,所述数据处理单元通过rdma的方式,将缓存的所述需要读取的数据发送给所述控制设备。

在一个可能的设计中,所述数据处理单元与所述存储单元之间通过基于快捷外围部件互连标准pcie的nvme,nvmeoverpcie,架构实现连接。

在一个可能的设计中,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是nvmeoverfabric架构中的物理控制器physicalcontroller或非易矢性存储控制器nvmcontroller。

另一方面,本发明实施例还提供了一种控制设备,所述控制设备是nvmeoverfabric架构中的控制设备,所述控制设备包括处理器、网卡和总线,所述处理器和网卡通过总线连接,所述控制设备与nvmeoverfabric架构中的存储设备之间进行数据传输,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据缓存在所述存储设备的缓存单元中,并存储在所述存储设备的存储单元;其中,所述处理器用于执行下述步骤:

获取所述缓存单元的可用存储空间;

判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;

在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,通过所述网卡发送所述第一数据读写命令给所述存储设备;

在所述第一数据所占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。

上述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述数据处理单元;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于或等于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。

可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。

可选的,所述控制设备和所述存储设备之间可以通过iwarp、roce、infiniband、fc或omni-path等网络实现连接和通信。

所述存储设备中的数据处理单元可以是网卡、独立的fpga芯片或存储设备中的cpu来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或所述存储设备中cpu的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的cpu的内存中的至少两个组成的缓存资源池来实现来实现。

在一个可能的设计中,所述处理器获取所述缓存单元的可用存储空间包括:

所述处理器在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。

在一个可能的设计中,在所述处理器向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述处理器还用于执行下述步骤:

向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;

接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。

其中,所述控制设备在发送所述第二数据读写命令前,不需要获取所述缓存单元的可用存储空间,直接发送所述第二数据读写命令。

这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。

可选的,所述处理器还用于在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤。即所述处理器还用于执行下述步骤:暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。

在一个可能的设计中,所述处理器还用于执行下述步骤:

在暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,通过所述网卡发送所述第一数据读写命令给所述存储设备。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。

在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。

其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。

可选的,所述处理器可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述处理器也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。

可选的,所述控制设备记录的所述缓存单元的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。

可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的cpu的缓存中,或所述控制设备的网卡的缓存中,还可以独立的fpga芯片中的一个存储空间中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。

在一个可能的设计中,所述处理器还用于执行下述步骤:

在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;

在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。

所述处理器在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述处理器在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。

在一个可能的设计中,所述处理器还用于执行下述步骤:

暂停发送所述第一数据读写命令达到预设时间后,再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。

在一个可能的设计中,所述处理器执行的步骤还包括:

在通过所述网卡发送所述第一数据读写命令给所述远端网卡后,将记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;在接收到所述远端网卡发送的完成所述第一数据读写命令的响应消息后,将记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。

另一方面,本发明实施例还提供了一种实现数据读写命令控制的系统,所述系统包括nvmeoverfabric架构中控制设备和存储设备,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其中:

所述控制设备,用于在获取所述缓存单元的可用存储空间,判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;

所述控制设备,还用于在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;在所述第一数据所占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令;

所述数据处理单元,用于接收所述控制设备发送的所述第一数据读写命令,并将所述第一数据读写命令所要传输的数据缓存在所述缓存单元中。

通过上述系统,所述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述数据处理单元;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于或等于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。

所述存储设备中的数据处理单元可以是网卡、fpga芯片或target中的cpu来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或cpu的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、fpga芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的cpu的内存中的至少两个组成的缓存资源池来实现来实现。

在一个可能的设计中,所述控制设备获取所述缓存单元的可用存储空间包括:

所述控制设备在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。

可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。

可选的,所述控制设备和所述存储设备之间可以通过iwarp、roce、infiniband、fc或omni-path等网络实现连接和通信。

可选的,所述控制设备可以是物理服务器或物理服务器上的虚拟机。所述存储设备中的存储单元可以为一个或一个以上的固态磁盘(英文:ssd,solidstatedisk)或硬盘驱动器(英文:hdd,harddiskdriver)。所述缓存单元可以位于所述数据处理单元中,也可以独立于所述数据处理单元的存储介质,例如可以是独立于数据处理单元的双倍数据速率(英文:ddr,doubledatarate)。所述缓存单元还可以是所述存储设备中多个数据处理单元的内存资源共同构成的一个内存资源池。

在一个可能的设计中,在所述控制设备向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述控制设备还用于向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;并接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。

其中,所述控制设备在发送所述第二数据读写命令前,不需要获取所述缓存单元的可用存储空间,直接发送所述第二数据读写命令。

这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。

可选的,所述控制设备执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再在发送第一数据读写命令之前,发送获取所述缓存单元的可用存储空间的请求。即所述控制设备只在预设时间内获取缓存单元的可用存储空间以及判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。

在一个可能的设计中,所述控制设备暂停发送所述第一数据读写命令达到预设时间后,重获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。

可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。

在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。

其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。

可选的,所述控制设备可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述控制设备也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。

可选的,所述控制设备记录的所述网卡内存的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。

可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的cpu的缓存中,或所述控制设备的网卡的缓存中,还可以独立的fpga芯片中的一个存储空间中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。

在一个可能的设计中,所述控制设备在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;

所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。

所述控制设备在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。

在一个可能的设计中,所述控制设备暂停发送所述第一数据读写命令达到预设时间后,所述控制设备再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。

可选的,所述第一数据读写命令为写数据命令,所述第一数据为需要存储的数据。所述控制设备发送给所述存储设备的写数据命令中携带sgl,所述sgl中包含需要存储的数据在所述控制设备中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。所述数据处理单元可以根据所述写数据命令中sgl携带的所述需要存储的数据在所述控制设备中的源地址,以rdma方式接收所述需要存储的数据,并将所述需要存储的数据缓存在所述缓存单元中。在所述需要存储的数据被缓存在所述缓存单元后,所述数据处理单元修改所述写数据命令,将所述写数据命令中携带的所述需要存储的数据在所述控制设备中的源地址,修改为所述缓存单元中存储所述需要存储的数据的地址,并将修改后的写数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘的控制器的写数据命令携带的sgl中包括所述缓存单元中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。

其中,目的硬盘是所述数据处理单元根据所述写数据命令中所述需要存储的数据在所述存储设备中的目的地址确定的。所述数据处理单元能够根据所述需要存储的数据在所述存储设备中的目的地址,确定所述需要存储的数据在所述存储设备中的哪个硬盘中,并将所述需要存储的数据在所述存储设备中的目的地址所在的硬盘确定为目的硬盘。

所述数据处理单元在确定目的硬盘后,将修改后的写数据命令发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的写数据命令中携带的所述需要存储的数据在所述缓存单元中的地址,从所述数据处理单元缓存单元中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过rdma或dma的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。

当所述第一数据读写命令为读数据命令时,所述第一数据为需要读取的数据。所述控制设备发送给所述存储设备的读数据命令中携带sgl,所述sgl中包含需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在所述控制设备中的目的地址等信息。所述数据处理单元收到所述读数据命令后,修改所述读数据命令,将所述读数据命令中携带的所述需要读取的数据在所述控制设备中的目的地址,修改为所述缓存单元的存储空间中缓存所述需要读取的数据的地址,并将修改后的读数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘控制器的读数据命令携带的sgl中包括所述需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述缓存单元的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的读数据命令,将所述需要读取的数据迁移到所述缓存单元的存储空间中。可选的,目的硬盘的控制器通过rdma或dma的方式,将所述需要读取的数据迁移到所述缓存单元的存储空间中。

当所述需要读取的数据缓存在所述缓存单元的存储空间后,所述数据处理单元根据所述读数据命令中所述需要读取的数据要写入所述控制设备中的目的地址,将缓存的所述需要读取的数据发送给所述控制设备。可选的,所述数据处理单元通过rdma的方式,将缓存的所述需要读取的数据发送给所述控制设备。

在一个可能的设计中,所述数据处理单元与所述存储单元之间通过nvme,nvmeoverpcie,架构实现连接。

在一个可能的设计中,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是nvmeoverfabric架构中的物理控制器physicalcontroller或非易矢性存储控制器nvmcontroller。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中nvmeoverfabric一种实现方式架构示意图;

图2为本发明实施例中主机host与一个target连接并实现数据传递的实现方式的结构示意图;

图3为本发明实施例提供的nvmeoverfabric中一种数据读写命令的控制方法流程示意图;

图4(a)本发明实施例提供的nvmeoverfabric中另一种数据读写命令的控制方法的一种实现情况的流程示意图;

图4(b)本发明实施例提供的nvmeoverfabric中另一种数据读写命令的控制方法的另一种实现情况的流程示意图;

图5为本发明实施例一种nvmeoverfabric架构中控制设备与存储设备之间数据读写命令的控制方法的流程示意图;

图6为本发明实施例一种控制设备600的结构示意图;

图7为本发明实施例一种实现数据读写命令控制的系统700的结构示意图。

具体实施方式

下面结合附图,对本发明的实施例进行描述。

另外,本发明实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。

参考图1,图1为现有技术中nvmeoverfabric一种实现方式架构示意图。图1中包括host100、target200和target210。其中,host100是主机,主要负责发起数据的读写,例如发送数据读写命令等。target200和target210是目标存储设备,在nvme协议中也称为nvmsubsystem,主要负责接收并且执行主机host100发送的数据读写命令。其中,主机host100的具体形态包括但不限于物理服务器或物理服务器上的虚拟机,所述物理服务器可以是包括cpu、内存和网卡等组成部件的计算机设备等。target200可以是一个独立的物理硬盘系统,如图1所示,target200包括网卡201和一个以上的硬盘,网卡201和一个以上的硬盘分别连接。需要说明的是,图1中以三个硬盘为例进行说明,在具体实现时,target200可以包括一个以上的硬盘。target200中的硬盘可以是固态磁盘(英文:ssd,solidstatedisk)或硬盘驱动器(英文:hdd,harddiskdriver)等具备存储功能的存储介质。其中网卡201具有网络接口卡的功能,可以是nvmeoverfabric中的远端网络接口卡(英文:rnic,remotenetworkinterfacecard),网卡201通过fabric与host100进行与数据读写命令或数据传输相关的通信。

target210的结构与target200类似,包括网卡211和一个以上的硬盘。target210中组成部件(网卡211和硬盘等)的功能和实现方式,与target200中的组成部件(网卡201和硬盘)的功能和实现方式类同。在具体实现时,还可以有多个target,图1只是示出两个target(target200和target210)为例进行说明。

下面以图1中host100需要向target200存储数据为例,对host100发送数据、target接收数据的过程进行描述,包括:

步骤s100:当host100需要存储数据到target200时,host100通过writecommand发送命令,该writecommand通常会携带需要存储的数据。如果需要存储的数据量较大,host100无法通过writecommand承载并发送时(例如需要存储的数据超过writecommand能够承载的最大数据量),host100会在writecommand中携带sgl(英文:scattergatherlist)。所述sgl中包括一个字段,例如可以是一个entry,该字段包括需要存储的数据在host100中的源地址、需要存储的数据的长度、以及需要存储的数据在target200中的目的地址等信息。需要说明的是,所述sgl也可以包括多个字段,例如多个entry,每个entry都包含需要存储的数据在host100中的源地址、需要存储的数据的长度、以及需要存储的数据在target200中的目的地址等信息。当所述需要存储的数据包括多个地址段,即所述需要存储的数据在host100中是不连续,存在于多个地址段中时,就需要用多个entry来记录多个地址段中的数据。本发明实施例以sgl中包括一个entry为例进行说明。

下面的步骤以host100需要存储的数据超过writecommand自身能够携带的数据量,需要在writecommand中通过sgl通知target200需要存储的数据的地址信息和长度为例进行说明。

步骤s101:host100通过网卡103发送writecommand到target200;所述writecommand中包括sgl;

可选的,所述需要存储的数据可以是一个以上的数据块,由于数据块的长度是固定的,所述待写数据的长度可以通过数据块的个数来记录。

步骤s102:target200中的网卡201接收到所述writecommand之后,获取所述writecommand中携带的需要存储的数据的长度,并在网卡201的网卡内存(图1中未示出)中分配相应的存储空间,即在网卡201的网卡内存中分配与所述writecommand中携带的需要存储的数据的长度相同的存储空间,用于缓存host100发送的需要存储的数据。

步骤s103:网卡201分配好缓存数据所需的存储空间后,通过远程直接数据存取(英文:rdma,remotedirectmemoryaccess)命令通知网卡103通过rdma方式传输需要存储的数据。即通知网卡103根据所述需要存储的数据在host100的源地址读取所述需要存储的数据,并接收网卡103通过网络传输的所述需要存储的数据,将接收到的所述需要存储的数据缓存在网卡内存的存储空间中。

上述步骤s102中,可能会出现网卡201中网卡内存的存储空间不足的情况。例如:当前网卡201的网卡内存剩余的存储存储空间为10kbytes,但是需要缓存的数据长度为20kbytes。此时网卡201会因无足够存储空间来缓存所述需要存储的数据,导致分配存储空间失败。网卡201需要等到网卡内存有其它存储空间被释放后,在网卡内存的可用存储空间大于或等于所述需要存储的数据所占用的存储空间时,才能再次分配缓存所述需要存储的数据的存储空间。

同样的,当host100向target200发送读取数据请求时,host100会发送readcommand到网卡201。如果需要读取的数据超过readcommand自身能够携带的数据量,所述readcommand中包括sgl,该sgl携带需要读取的数据在target200中的源地址,所述需要读取的数据的长度以及所述需要读取的数据在host100中的目的地址。

当网卡201缓存所述需要读取的数据时,如果网卡内存的可用存储空间小于所述需要读取的数据所占用的存储空间,则网卡201需要等到网卡内存有其它存储空间被释放,且网卡内存的可用存储空间大于或等于所述需要读取的数据所占用的存储空间之后,才能再次分配缓存所述需要读取的数据的存储空间并缓存所述需要读取的数据。

上述host100向target200写入数据或读取数据的过程中,网卡201中网卡内存的动态管理(例如查找空闲存储空间,等待其它存储空间被释放,再次申请可用存储空间等)操作会给网卡201的设计和实现带来很多的复杂性,例如,这些复杂性至少包括下述之一:

1)当网卡201的网卡内存的存储空间小于需要传输数据所占用的存储空间时,网卡201需要暂时缓存对应的writecommand或readcommand;

2)当网卡201长时间没有申请到有效存储空间(例如网卡201的网卡内存长时间没有可用存储空间)的时候,需要设计一种机制老化(例如删除)长时间被缓存的writecommand或readcommand;

3)老化掉长时间缓存的writecommand或readcommand之后,还需要一种机制通知host100,并通知host100重新发送相关的命令和数据。

需要说明的是以上以writecommand或readcommand中携带sgl为例进行说明,实际使用场景中,也可以是由writecommand或readcommand直接携带相应数据,也同样存在上述问题;或者,在host100与target200基于其他的交互机制下,例如采用其他不同于rdma命令的方式进行交互,如果在target200中也是采用网卡内存的动态管理机制,也同样存在上述问题。以上场景仅是为了说明已有技术方案的问题所列举的场景实例之一而已,该具体实例并不构成本发明应用场景的限制。

为解决上述技术问题,本发明实施例提供一种nvmeoverfabric中数据读写命令的控制方法、设备和系统。下面实施例的描述,以主机host与一个target连接并实现数据传递为例进行说明。对于host与多个target连接并实现数据传输的情况,可以参照host与一个target连接的情况来实现,不再赘述。

需要说明的是,作为存储设备的target,在具体实现时,可以由网卡、独立的现场可编程门阵列(英文:fpga,fieldprogrammablegatearray)芯片或target中的中央处理器(英文:cpu,centralprocessingunit)来接收作为控制设备的host发送的数据读写命令。本发明实施例将存储设备中接收控制设备发送的数据读写命令的网卡、fpga芯片或cpu等,统称为数据处理单元。可以理解,本发明实施例中的数据处理单元,还可以是与网卡、fpga芯片或cpu具有相同功能的单元或实体,只要能够接收作为控制设备的host发送的数据读写命令并处理,都可以作为本发明实施例的存储设备中的数据处理单元。

当网卡作为存储设备中的数据处理单元时,网卡内存用于缓存网卡接收到的数据读写命令所要传输的数据。当fpga作为存储设备中的数据处理单元时,fpga中的存储单元用于缓存fpga接收到的数据读写命令所要传输的数据。当存储设备中的cpu作为存储设备中的数据处理单元时,cpu的内存用于缓存cpu接收到的数据读写命令所要传输的数据,即通过共享cpu的内存实现数据的缓存。另外,在target上的缓存单元,例如以ddr作为缓存的缓存设备,也可以作为网卡、fpga或cpu的缓存。本发明实施例中将上述网卡内存、fpga芯片中的存储单元或target上的缓存单元或cpu的内存,统称为缓存单元。可以理解,本发明实施例中的缓存单元,还可以是与网卡内存、fpga芯片中的存储单元或cpu的内存具有相同功能的其它存储介质,只要能够用于缓存作为控制设备的host发送的数据读写命令所要传输的数据,都可以作为本发明实施例的存储设备中的缓存单元。并且,上述网卡内存、fpga芯片中的存储单元、cpu的内存或target上的缓存单元也可以组成一个缓存资源池,在具体实现时,可以由网卡、fpga芯片或cpu中的一个或多个接收host发送的数据读写命令,并将需要传输的数据缓存在该缓存资源池中。

下面以网卡作为存储设备中的数据处理单元,网卡内存作为存储设备中的缓存单元,target作为存储设备,host作为控制设备,对本发明实施例进行说明。可以理解,对于fpga和cpu作为数据处理单元的实现方式,可以参考网卡作为数据处理单元的实现方式来实现。对于fpga芯片中的存储单元、target上的缓存单元或cpu的内存作为缓存单元的实现方式或其组成的资源池的实现方式,可以参考网卡内存作为缓存单元的实现方式来实现,不再赘述。

图2为本发明实施例中主机host与一个target连接并实现数据传递的实现方式的结构示意图。如图2所示,host300与target400通过fabric连接。具体的,host300与target400之间可以通过iwarp、roce、infiniband、fc或omni-path等网络实现连接和通信。

其中,host300包括cpu301、内存302和网卡303等硬件组成,target400包括网卡401和一个以上的硬盘。host300是主机,主要负责发起数据的读写,例如发送数据的读写命令等。主机host300的具体形态包括但不限于物理服务器或物理服务器上的虚拟机,所述物理服务器可以是包括cpu、内存和网卡等组成部件的计算机设备等。需要说明的是,在主机host300为物理服务器上的虚拟机的情况下,以上所述的host300包括cpu301、内存302和网卡303等硬件组成指的是物理服务器分配给该虚拟机使用的cpu、内存和网卡等资源。同样的,在target400中的网卡401也可以为虚拟网卡,该虚拟网卡是target400中的物理网卡分配给该虚拟网卡使用的网卡资源。

target400是目标存储设备,在nvmeoverfabric架构中也称为nvmsubsystem,主要负责接收并且执行主机host300发送的读写命令。target400中的硬盘可以是ssd或hdd等具有存储功能的介质,图2中以三个硬盘为例进行说明。网卡401包括网卡处理器4011和网卡内存4012。网卡401具有网络接口卡的功能,可以是nvmeoverfabric中的rnic,网卡401通过nvmeoverfabric架构中的网络与host300进行与数据读写命令或数据传输相关的通信。图2以网卡内存4012位于网卡401中,即网卡401中包括网卡内存4012为例进行说明。在具体实现时,网卡内存4012也可以位于网卡401的外部,即target400中的网卡内存可以是独立于网卡401的存储介质。本发明实施例中,独立于网卡401的存储介质,可以是双倍数据速率(ddr,doubledatarate)等存储介质。作为另一种可选的实现方式,网卡401的网卡内存4012也可以是target400中多个网卡的内存资源共同构成的一个内存资源池。本发明实施例不限定网卡内存的具体呈现形式。

为避免已有技术中因网卡401的网卡内存的存储空间不足,不能缓存host300发送的数据读写命令所要传输的数据所带来的复杂处理机制问题,下面以host300需要向target400发送写命令,以向target400写入需要存储的数据为例,对本发明实施例提供的nvmeoverfabric中数据读写命令的控制方法进行详细说明。

当host300需要向target400写入需要存储的数据时,host300先获取target400中网卡内存4012的可用存储空间。在网卡内存4012的可用存储空间大于或等于所述需要存储的数据所占用的存储空间时,host300才向网卡401发送携带所述需要存储的数据地址信息和长度的writecommand。这样,能够避免网卡内存4012因可用存储空间不足,缓存host300的writecommand所带来的复杂处理机制的问题。具体的,如图3所示,上述方法的具体实现过程为:

步骤100:host300在向target400发送写数据命令之前,向网卡401发送获取所网卡内存4012可用存储空间的请求;

其中,所述网卡内存4012可用存储空间,是网卡401在接收到host300发送的获取所述网卡内存4012可用存储空间的请求时,网卡内存4012中未被占用的存储空间。可以理解,网卡内存4012中未被占用的存储空间,是网卡内存4012中未被用于缓存数据的空间。例如,当网卡内存4012中缓存有数据,这些数据还未被写入硬盘或还未被host300读取时,缓存的数据会占用网卡内存4012的存储空间,已经被占用的存储空间不能被用于缓存其它数据。

所述需要存储的数据,是所述host300要写入target400的数据。host300需要通过writecommand将所述需要存储的数据发送给网卡401。例如,host300在writecommand携带sgl,该sgl包括需要存储的数据在host300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在target400中的目的地址等信息,并将携带该sgl的writecommand发送给网卡401。

host300向网卡401发送获取所述网卡内存4012可用存储空间的请求,可以通过发送请求消息来实现。所述请求消息携带请求网卡401返回网卡内存4012可用存储空间的信息。所述请求消息可以通过任何一种消息形式实现。所述网卡内存4012返回的可用存储空间的信息,也可以通过任何一种表述网卡内存4012可用存储空间的信息的形式来实现。例如,所述请求消息可以是一个请求报文,该请求报文中包含获取网卡内存4012的可用存储空间的字段。本发明实施例不限定请求消息的形式,也不限定请求消息中携带的指示网卡401返回网卡内存4012可用存储空间的信息的形式。或者,host300也可以通过读取记录有网卡内存4012可用存储空间信息的寄存器,来获取网卡内存4012可用存储空间的信息。

步骤102:host300接收所述网卡401返回的所述网卡内存4012的可用存储空间;

具体的,可以是网卡401接收到host300发送的获取所述网卡内存4012可用存储空间的请求后,将所述网卡内存4012可用存储空间的信息携带在响应消息中返回给host300,host300获取所述响应消息中携带的所述网卡内存4012可用存储空间的信息。

其中,所述网卡401返回的所述网卡内存4012的可用存储空间,是所述网卡401接收到host300发送的请求时网卡内存4012的可用存储空间。因此,网卡401返回给host300的所述网卡内存4012的可用存储空间,也是所述网卡内存4012的实时可用存储空间。

步骤104:host300根据获取到的所述网卡内存4012可用存储空间的信息,判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间;

例如,所述网卡内存4012的可用存储空间的大小为100mb,所述需要存储的数据所占用的存储空间为50mb,在判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间时,可以通过判断50mb小于100mb来实现。或者,所述网卡内存4012的可用存储空间的长度为50个数据块,所述需要存储的数据所占用的存储空间为60个数据块,在判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间时,可以通过判断60个数据块大于50个数据块来实现。

步骤106:当所述需要存储的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时,所述host300发送所述写数据命令给所述target400;

具体的比较可以参考上面的描述。一个具体的实施方式中,所述host300发送所述写数据命令给所述target400可以是所述host300将所述写数据命令发送给所述网卡401,并在所述写数据命令中携带sgl,在所述sgl中携带需要存储的数据的地址信息和所述需要存储的数据的长度。即所述sgl中包含需要存储的数据在host300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在target400中的目的地址等信息。

步骤108:所述target400中的网卡401接收所述写数据命令,将所述写数据命令所要存储的数据缓存在网卡内存4012中;

具体的,网卡401可以根据所述writecommand中sgl携带的所述需要存储的数据在host300中的源地址,以rdma方式通过网卡303接收所述需要存储的数据,并将所述需要存储的数据缓存在所述网卡内存4012中。

步骤110:当所述需要存储的数据所占用的存储空间大于所述网卡内存4012的可用存储空间时,所述host300暂停发送所述写数据命令。

这样,host300会在网卡内存4012的可用存储空间能够缓存需要存储的数据时,才通过writecommand发送需要存储的数据,能够避免网卡内存4012的可用存储空间不足而缓存writecommand所带来的处理机制复杂的问题。

可选的,所述host300暂停发送所述写数据命令达到预设时间后,可以再重新发送获取网卡内存4012的可用存储空间的请求,以判断网卡内存4012的可用存储空间是否能够缓存所述写数据命令所要存储的数据。即重新执行步骤100,直到host300将所述需要存储的数据缓存在所述网卡内存4012中。

所述host300暂停发送所述写数据命令的预设时间,可以是系统默认的时间或预先配置的时间。在所述预设时间设定的时间范围内,host300不执行步骤100。具体的,可以通过在host300中设定定时器的方式,设定所述host300暂停发送所述需要存储的数据的预设时间,host300在定时器设定的时间到达后再启动执行步骤100-步骤110。可以理解,所述host300暂停发送所述写数据命令的预设时间,可以根据具体的业务情况进行灵活设定。

上述步骤108中,所述需要存储的数据被缓存在网卡内存4012,或者在上述步骤110之后,所述host300暂停发送所述写数据命令达到预设时间并再次执行步骤100-步骤110,并将所述需要存储的数据缓存在网卡内存4012;在这两种情况下,缓存在网卡内存4012中的所述需要存储的数据会被迁移到target400的硬盘中。具体的,在所述需要存储的数据被缓存在网卡内存4012后,网卡401修改所述writecommand,将所述writecommand携带的所述需要存储的数据在host300中的源地址,修改为网卡内存4012中存储所述需要存储的数据的地址,并将修改后的writecommand发送给目的硬盘的控制器。即网卡401发送给目的硬盘的控制器的writecommand携带的sgl中包括网卡内存4012中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在target400中的目的地址等信息。

其中,目的硬盘是网卡401根据所述writecommand中所述需要存储的数据在target400中的目的地址确定的。网卡401能够根据所述需要存储的数据在target400中的目的地址,确定所述需要存储的数据在target400中的哪个硬盘中,并将所述需要存储的数据在target400中的目的地址所在的硬盘确定为目的硬盘。在target400中,每个硬盘都会对应一个地址段,网卡401根据所述writecommand的sgl中所述需要存储的数据在target400中的目的地址,确定该目的地址所在的地址段,与该地址段对应的硬盘即为目的硬盘。

网卡401在确定目的硬盘后,将修改后的writecommand发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的writecommand中携带的所述需要存储的数据在所述网卡内存4012中的地址,从网卡内存4012中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过rdma或直接内存存取(英文:dma,directmemoryaccess)的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。本发明实施例中,网卡401与target400中的硬盘之间,基于nvmeoverpcie架构实现连接。因此,target400中目的硬盘的控制器与网卡401之间,可以通过nvmeoverpcie连接和通信方式,即目的硬盘的控制器可以基于nvmeoverpcie协议规定的方式,将所述需要存储的数据从网卡内存4012写入目的硬盘中。

上述网卡401修改所述writecommand并将修改后的writecommand发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如arm、x86或powerpc等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是nvmeoverfabric中的physicalcontroller或nvmcontroller。

在具体实现时,当网卡内存4012的可用存储空间足够大且可以缓存较多的数据时,网卡内存4012的可用存储空间能够缓存host300需要存储的数据时,host300可以不用在每次发送数据读写命令之前,都发送获取网卡内存4012可用存储空间信息的请求。本发明实施例提供的另一种可选的实现方式为:

host300可以直接发送数据读写命令给网卡401,在接收到网卡401发送的不能缓存需要存储的数据的反压报文时,才启动上述步骤100-步骤110的流程。

例如,host300在发送写数据命令,例如发送第二写数据命令时,直接发送该第二写数据命令给网卡401,不需要获取网卡内存4012的可用存储空间。当host300发送该第二写数据命令给网卡401后,如果网卡内存4012的可用存储空间不能缓存该第二写数据命令要所要传输的数据,即不能缓存该第二写数据命令所要存储的数据时,网卡401会给host300返回一个反压消息。该返压消息指示网卡内存4012的存储空间不足,不能缓存host300发送的所述第二写数据命令所要存储的数据。

host300在收到网卡401发送的不能缓存需要存储的数据的反压报文时,才启动上述步骤100-步骤110的流程。即host300在收到网卡401返回的反压报文后,在发送其它数据读写命令之前,向网卡401发送获取所网卡内存4012可用存储空间的请求,在判断网卡内存4012可用存储空间大于或等于需要传输的数据所占用的存储空间时,才通过数据读写命令发送其它数据读写命令。

需要说明的是,本发明实施例中第一数据读写命令和第二数据读写命令只是用于区分不同的数据读写命令,不代表它们之间存在先后优劣关系。

进一步的,在执行步骤100-步骤110的流程达到预设时间后,所述网卡内存4021的存储空间恢复到有足够空间存储待存储的数据时,可以不用再执行步骤100-步骤110的过程。即在执行步骤100-步骤110的流程达到预设时间后,当需要向网卡401发送需要存储的数据时,host300直接将需要存储的数据发送给网卡401,不再发送获取网卡内存4012可用存储空间的请求。所述执行步骤100-步骤110的流程的预设时间,可以根据需要具体的设定,可以是系统默认的时间,也可以是基于管理员预先下发的设定时间。并且,执行步骤100-步骤110的流程的预设时间,可以根据实际的业务情况实时的变更,例如在网卡内存4021的存储空间占用率较高的情况下,执行步骤100-步骤110流程的预设时间长;在网卡内存4021的存储空间占用率较低的情况下,执行步骤100-步骤110流程的预设时间短等。

这样,可以只在网卡内存4012出现存储空间不足的情况下,host300在向target400发送数据读写命令之前才向网卡401发送获取所述网卡内存4012可用存储空间的请求,并基于网卡401返回的网卡内存4012可用存储空间决定是否发送数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升host300发送数据读写命令时的效率,节省host300因发送获取所述网卡内存4012可用存储空间的请求所造成的资源占用。同样的,由于网卡401也不需要每次数据读写命令之前都要向host300返回可用存储空间,也相应节省了网卡401的资源占用。

上述实施例中,网卡401向host300发送的反压消息,可以是直接产生的消息,也可以是通过响应消息携带的消息。例如可以是网卡内存4012的可用存储空间不足时直接产生的消息;也可以是网卡401向host300返回的对writecommand的响应消息,在响应消息中携带网卡内存4012的可用存储空间不足的信息。其它类型的消息或报文,只要能够携带指示网卡内存4012的可用存储空间不足,且不能缓存host300需要存储的数据的消息,都可以作为网卡401向host300发送的反压消息。可选的,所述反压消息中携带的指示网卡内存4012可用存储空间不足且不能存储host300需要存储的数据的信息,可以是错误码或预先设定的标识等,只要能够指示或通知host300,网卡内存4012的可用存储空间不能存储host300发送的需要存储的数据的信息,都可以作为反压消息中携带的用于指示网卡内存4012的可用存储空间不足的信息。

进一步的,host300接收到内存401发送的反压消息后,在执行步骤100-步骤110的过程中,还包括重传因网卡内存4021的可用存储空间不足而被执行的数据读写命令,例如上述第二写数据命令。即对于网卡401因网卡内存4021可用存储空间不足产生反压消息时未被执行的数据读写命令,host300在判断网卡内存4021的可用存储空间能够存储该数据读写命令所要传输的数据时,host300重新发送该数据读写命令。

本发明实施例中,可以是host300中的cpu301执行步骤100-步骤106以及步骤110的过程,也可以是host300中的网卡303执行步骤100-步骤106以及步骤110的过程。还可以是host300中的某一芯片或逻辑部件,来执行步骤100-步骤106以及步骤110的过程,例如可以是fpga芯片等执行步骤100-步骤110的过程。

在实际实现中,上述步骤100-步骤106以及步骤110也可以由cpu301、网卡303、host300中的某一芯片或逻辑部件中的至少其中一个来实现。例如,网卡303执行上述步骤100-步骤104,cpu301执行上述步骤106和步骤110;或者,cpu301执行上述步骤100-步骤104,网卡303执行上述步骤106和步骤110。也可以是host300中的芯片或逻辑部件执行上述步骤100和步骤102,cpu301执行上述步骤104、步骤106和步骤110;或者,网卡303执行上述步骤100和步骤102,host300中的芯片或逻辑部件执行上述步骤104、步骤106和步骤110等。本发明实施例不限定具体的执行步骤100-步骤106以及步骤110中的执行主体的实现方式。

当上述host300是通过虚拟机实现时,上述cpu301、网卡303分别对应虚拟机中的cpu和网卡,虚拟机中的cpu和网卡通过承载其虚拟功能的物理cpu和物理网卡来实现。其实现方式与上述实现方式类似,不再赘述。

对于host300从target400读取数据的实现方式,与上述host300向target400写入数据的实现方式类似,可以参照上述host300向target400发送写数据命的过程来实现。即当host300向target400发送的数据读写命令为读数据命令时,其实现过程与上述数据读写命令为写数据命令的过程类似。例如host300在向target400发送读数据命令之前,向网卡401发送获取所述网卡内存4012可用存储空间的请求;host300根据获取到的所述网卡内存4012可用存储空间,判断需要读取的数据所占用的存储空间是否小于或等于所述网卡内存4012的可用存储空间。当需要读取的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时,host300将readcommand发送给所述网卡401;当需要读取的数据所占用的存储空间大于所述网卡内存4012可用存储空间时,host300暂停发送所述readcommand。这样就避免了在读取数据的过程中因网卡内存4012的存储空间不够、缓存readcommand所带来的问题。并且,host300在向target400发送读数据命令之前,向网卡401发送获取所述网卡内存4012可用存储空间的请求,是在host300接收到网卡401发送的不能缓存需要存储的数据的反压报文时,才执行的步骤。即host300不是每次发送readcommand时都发送获取所述网卡内存4012可用存储空间的请求,而是在先发送readcommand或writecommand,在接收到网卡401发送的不能缓存需要存储的数据的反压消息时,才在发送readcommand时发送获取所述网卡内存4012可用存储空间的请求,并在判断需要读取的数据所占用的存储空间大于所述网卡内存4012可用存储空间时,host300暂停发送所述readcommand;在需要读取的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时发送所述readcommand。

以图2所示的架构为例,为避免现有技术中因网卡内存的存储空间不足带来的复杂处理机制的问题,本发明实施例提供的另外一种实现方法是host300获取网卡内存4012的实时可用存储空间并记录,每次在向target400发送数据读写命令前判断记录的网卡内存4012的实时可用存储空间是否大于或等于需要传输的数据所占用的存储空间。在记录的网卡内存4012的实时可用存储空间大于或等于需要传输的数据所占用的存储空间时,host300向网卡401发送数据读写命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要传输的数据所占用的存储空间。在缓存在网卡内存4012中的所述需要传输的数据被迁移后,host300根据接收到的完成迁移的响应消息,将记录的网卡内存4012的实时可用存储空间加上所述需要传输的数据所占用的存储空间。

如果记录的网卡内存4012的实时可用存储空间小于所述需要传输的数据所占用的存储空间,则host300暂停发送所述数据读写命令,待记录的网卡内存4012的实时可用存储空间大于或等于需要传输的数据所占用的存储空间时再重新发送。

由于host300在向target400发送数据读写命令时,是在网卡内存4021有足够可用存储空间缓存要传输的数据时才发送,能够避免网卡401因网卡内存4021的可用存储空间不足而缓存host300发送的数据读写命令所带来的复杂处理机制的问题。下面分别就所述数据读写命令为写命令和读命令,详细描述上述方法的实现过程。

当所述数据读写命令为写数据命令时,如图4a所示,上述方法的详细实现过程为:

步骤200a:host300获取并记录网卡内存4012的实时可用存储空间;

其中,host300可以将获取的网卡内存4012的可用存储空间记录在本地,即将获取的网卡内存4012的可用存储空间记录在host300中。

具体的,host300可以在target400上电初始化时,获取网卡内存4012的可用存储空间。由于在target400上电初始化时,网卡内存4012还未缓存有数据,因此获取到的网卡内存4012的可用存储空间就是网卡内存4012总的存储空间。将网卡内存4012总的存储空间作为记录的网卡内存4012的实时可用存储空间,能够最大化的利用网卡内存4012的存储空间。

可选的,host300也可以在target400上电初始化后的任一时间,获取网卡内存4012当前可用的存储空间,并将获取的网卡内存4012当前可用的存储空间,作为网卡内存4012的实时可用存储空间并记录。此时获取的网卡内存4012的可用存储空间,会因网卡内存4012中缓存有数据而小于网卡内存4012的总存储空间。

host300获取网卡内存4012当前可用的存储空间的方式,可以是通过发送请求报文,该请求报文中包含获取网卡内存4012的可用存储空间的字段。网卡401收到host300发送的请求报文后,将网卡内存4012当前可用存储空间写入请求报文的相应字段中返回给host300。host300也可以通过读取记录有网卡内存4012当前可用存储空间信息的寄存器中,来获取网卡内存4012可用存储空间的信息。

步骤202a:host300向target400发送写数据命令之前,先判断需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间;

具体的,所述host300可以获取本地记录的网卡内存4012的实时可用存储空间,并判断需要存储的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间。

其中,所述host300记录的网卡内存4012的实时可用存储空间,可以是记录的可存储数据的空间的大小。相应的,所述需要存储的数据占用的存储空间可以是所述需要存储的数据所占用的存储空间的大小。在判断所述需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间时,可以通过判断需要存储的数据所占用的存储空间的大小是否小于或等于记录的所述网卡内存4012的实时可用存储空间的大小来实现。

当然,也可以用其它形式记录所述网卡内存4012的实时可用存储空间,例如用可被写入的数据块的个数记录所述网卡内存4012的实时可用存储空间。相应的,所述需要存储的数据占用的存储空间,可以是所述需要存储的数据的数据块的个数。在判断所述需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间时,可以通过判断需要存储的数据的数据块个数是否小于或等于记录的所述网卡内存4012可被写入的数据块的个数来实现。

步骤204a:在所述需要存储的数据占用的存储空间小于或等于记录的所述网卡内存4012的实时可用存储空间时,host300通过writecommand发送所述写数据命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要存储的数据所占用的存储空间,得到更新后的网卡内存4012的实时可用存储空间;

其中,host300通过writecommand发送所述写数据命令给target400。并且,可以是host300在writecommand中携带sgl,该sgl包括所述写数据命令所需要存储的数据在host300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在target400中的目的地址等信息。target400中的网卡401接收到host300发送的writecommand后,根据其中携带的需要存储的数据在host300中的源地址,获取所述需要存储的数据并缓存在网卡内存4012的存储空间中。可选的,网卡401可以rdma的方式通过网卡303获取所述需要存储的数据并缓存在网卡内存4012的存储空间中。

当网卡401将所述需要存储的数据缓存在网卡内存4012的存储空间后,所述需要存储的数据会占用网卡内存4012的存储空间。因此,host300通过writecommand发送所述需要存储的数据后,需要将记录的网卡内存4012的实时可用存储空间减去所述需要存储的数据所占用的存储空间。

步骤206a:网卡401在将所述需要存储的数据写入网卡内存4012后,网卡401修改所述writecommand,将所述writecommand携带的sgl中的需要存储的数据在host300中的源地址,修改为网卡内存4012中存储所述需要存储的数据的地址,并将修改后的writecommand发送给目的硬盘的控制器。

即网卡401发送给目的硬盘的控制器的writecommand携带的sgl中包括网卡内存4012中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在target400中的目的地址等信息。

其中,目的硬盘是网卡401根据所述writecommand中所述需要存储的数据在target400中的目的地址确定的。网卡401能够根据所述需要存储的数据在target400中的目的地址,确定所述需要存储的数据在target400中的哪个硬盘中,并将所述需要存储的数据在target400中的目的地址所在的硬盘确定为目的硬盘。在target400中,每个硬盘都会对应一个地址段,网卡401根据所述writecommand的sgl中所述需要存储的数据在target400中的目的地址,确定该目的地址所在的地址段,与该地址段对应的硬盘即为目的硬盘。

可以理解,网卡401修改所述writecommand并将修改后的writecommand发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如arm、x86或powerpc等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是nvmeoverfabric架构中的physicalcontroller或nvmcontroller。

步骤208a:目的硬盘的控制器根据接收到的writecommand中携带的所述需要存储的数据在所述网卡内存4012中的地址,将网卡内存4012中所述需要存储的数据迁移到目的硬盘的目的地址对应的存储空间中;并发送完成存储所述需要存储的数据的响应消息,并通过网卡401返回给host300。

其中,网卡401与target400中的硬盘之间,可以基于nvmeoverpcie架构实现连接。相应的,target400中目的硬盘的控制器与网卡401之间,可以通过nvmeoverpcie连接和通信方式,目的硬盘的控制器可以基于nvmeoverpcie协议规定的方式,将所述需要存储的数据从网卡内存4012写入目的硬盘中。

步骤210a:host300根据接收到的响应消息,将记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。

由于host300在收到对所述需要存储的数据存储的响应消息后,所述需要存储的数据已经从网卡内存4012迁移到硬盘中。网卡内存4012将会增加相应的可用存储空间,即释放所述需要存储的数据所占用的存储空间。因此,host300将本地记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据占用的存储空间,能够正确记录网卡内存4012当前最新的可用存储空间。

上述步骤202a中,如果host300判断所述需要存储的数据占用的存储空间大于本地记录的所述网卡内存4012的实时可用存储空间,则host300等待预设时间后再重新执行步骤202a。host300等待的预设时间,可以是默认的预设时间,也可以基于具体业务的需要而设置的预设时间。在达到预设时间后,host300再次执行步骤202a,即再次判断所述需要存储的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间,如果所述需要存储的数据占用的存储空间小于或等于本地记录的所述网卡内存4012的实时可用存储空间,则执行步骤204a和步骤206a的步骤。host300在预设时间后再执行步骤202a,能够避免在网卡内存4012的可用存储空间小于所述需要存储的数据所占用的存储空间时,因反复地执行判断的步骤所带来的host300资源的占用和消耗。可以理解,host300等待的预设时间可以基于实际的情况灵活调整。

当所述数据读写命令为读命令时,如图4b所示,上述方法的详细实现过程为:

步骤200b:host300获取并记录网卡内存4012的实时可用存储空间;

步骤200b的具体实现过程,可以参照步骤200a来实现,不再赘述。

步骤202b:host300向target400发送读数据命令之前,先判断需要读取的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间;

具体的,所述host300可以获取本地记录的网卡内存4012的实时可用存储空间,并判断需要读取的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间。

步骤204b:在所述需要读取的数据占用的存储空间小于或等于记录的所述网卡内存4012的实时可用存储空间时,host300通过readcommand发送所述读数据命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要读取的数据所占用的存储空间,得到更新后的网卡内存4012的实时可用存储空间;

其中,host300通过readcommand发送所述读数据命令,可以是host300在readcommand中携带sgl,该sgl包括需要读取的数据在target400的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在host300中的目的地址等信息。

步骤206b:网卡401接收到host300发送的readcommand后,修改所述readcommand,将所述readcommand中携带的所述需要读取的数据在host300中的目的地址,修改为网卡内存4012的存储空间中缓存所述需要读取的数据的地址,并将修改后的readcommand发送给目的硬盘的控制器。即网卡401发送给目的硬盘控制器的readcommand携带的sgl中包括所述需要读取的数据在target400中的源地址、所述需要读取的数据的长度、以及网卡内存4012的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的readcommand,将所述需要读取的数据迁移到网卡内存4012的存储空间中。可选的,目的硬盘的控制器通过dma或rdma的方式,将所述需要读取的数据迁移到所述第一命令队列对应的网卡内存4012的存储空间中。

其中,目的硬盘是网卡401根据所述readcommand中所述需要读取的数据在target400中的源地址确定的。网卡401能够根据所述需要读取的数据在target400中的源地址,确定所述需要读取的数据在target400中的哪个硬盘中,并将所述需要读取的数据在target400中的源地址所在的硬盘确定为目的硬盘。

当网卡401将所述需要读取的数据缓存在网卡内存4012的存储空间后,所述需要读取的数据会占用网卡内存4012的存储空间。因此,host300通过readcommand发送所述需要读取的数据后,需要将记录的网卡内存4012的实时可用存储空间减去所述需要读取的数据所占用的存储空间。

可以理解,网卡401修改所述readcommand并将修改后的readcommand发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如arm、x86或powerpc等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是nvmeoverfabric中的physicalcontroller或nvmcontroller。

步骤208b:目的硬盘的控制器根据接收到的readcommand将所述需要读取的数据缓存在网卡内存4012,网卡401根据所述readcommand中所述需要读取的数据要写入host300中的目的地址,将缓存在网卡内存4012中的所述需要读取的数据发送给host300。

可选的,网卡401通过rdma的方式,将缓存的所述需要读取的数据发送给host300。

可选的,网卡401在将缓存的所述需要读取的数据发送给host300后,发送完成读取的响应消息给host300。

步骤210b:host300根据接收到网卡401发送的完成读取的响应消息或接收到网卡401发送的所述需要读取的数据时,将记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。

具体的,host300根据接收到网卡401发送的完成读取的响应消息或接收到网卡401发送的所述需要读取的数据时,将本地记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。

由于host300在收到完成读取的响应消息或所述需要读取的数据后,所述需要存储的数据已经从网卡内存4012迁移到host300中。网卡内存4012将会增加相应的可用存储空间,即释放所述需要读取的数据所占用的存储空间。因此,host300将本地记录的网卡内存4012的实时可用存储空间加上所述需要读取的数据占用的存储空间,能够正确记录网卡内存4012当前最新的可用存储空间。

上述步骤202b中,如果host300判断所述需要读取的数据占用的存储空间大于本地记录的所述网卡内存4012的实时可用存储空间,则host300等待预设时间后再重新执行步骤202b。host300等待的预设时间,可以是默认的预设时间,也可以基于具体业务的需要而设置的预设时间。在达到预设时间后,host300再次执行步骤202b,即再次判断所述需要读取的数据占用的存储空间是否大于本地记录的所述网卡内存4012的实时可用存储空间,如果所述需要读取的数据占用的存储空间小于或等于本地记录的所述网卡内存4012的实时可用存储空间,则执行步骤204b和步骤206b的步骤。host300在预设时间后再执行步骤202b,能够避免在网卡内存4012的可用存储空间小于所述需要存储的数据所占用的存储空间时,因反复地执行判断的步骤所带来的host300资源的占用和消耗。可以理解,host300等待的预设时间可以基于实际的情况灵活调整。

上述过程中,可以是host300中的cpu301执行步骤200a-步骤204a和步骤210a的过程,或cpu301执行步骤200b-步骤204b和步骤210b的过程,也可以是host300中的网卡303执行步骤200a-步骤204a和步骤210a的过程,或网卡303执行步骤200b-步骤204b和步骤210b的过程,还可以是host300中的某一芯片或逻辑部件,来执行步骤步骤200a-步骤204a和步骤210a的过程,或host300中的某一芯片或逻辑部件执行步骤200b-步骤204b和步骤210b的过程,例如可以是fpga芯片等执行步骤200a-步骤204a和步骤210a的过程,或执行步骤200b-步骤204b和步骤210b的过程等。

在实际实现中,上述步骤200a-步骤204a和步骤210a,或步骤200b-步骤204b和步骤210b也可以由cpu301、网卡303、host300中的某一芯片或逻辑部件中的至少其中一个来实现。例如,cpu301执行上述步骤200a和步骤202a,网卡303执行上述步骤204a和步骤210a;或者cpu301执行上述步骤200b和步骤202b,fpga执行上述步骤204b和步骤210b。本发明实施例不限定具体的执行步骤200a-步骤204a和步骤210a的过程,或步骤200b-步骤204b和步骤210b的过程中执行主体的实现方式。

当上述host300是通过虚拟机实现时,上述cpu301、网卡303分别对应虚拟机中的cpu和网卡,虚拟机中的cpu和网卡通过承载其虚拟功能的物理cpu和物理网卡来实现。其实现方式与上述实现方式类似,不再赘述。

上述步骤200中,host300记录网卡内存4012的实时可用存储空间的位置可以有多种实现方式。例如,可以是记录在host300中专门的存储空间中,例如专门的芯片用于存储网卡内存4012的实时可用存储空间;也可以是存储在host300中已有的存储部件中,例如cpu301的缓存中,或网卡303的缓存中,也可以fpga中的一个存储空间中。

具体的,当cpu301执行步骤200a-步骤202a时,cpu301可以将获取到的网卡内存4012的实时可用存储空间存储在cpu301的一个缓存中,也可以存储在host300的其它存储空间中,还可以存储在host300中新增的一个存储芯片中。当网卡303或fpga执行步骤204a-步骤206a时,网卡303或fpga可以从cpu301存储网卡内存4012的实时可用存储空间的位置对网卡内存4012的实时可用存储空间进行控制,例如增加或删除等操作。可以理解,当步骤200a-步骤206a或步骤200b-步骤206b的执行主体是其它组合方式时,其实现方式与上述举例的实现方式类似,不再赘述。

本发明实施例中,host300记录网卡内存4012的实时可用存储空间的方式,也可以有多种实现方式,例如,以一个表格的形式记录网卡内存4012的实时可用存储空间,或一个变量的形式记录网卡内存4012的实时可用存储空间等等。本发明实施例不限定记录网卡内存4012的实时可用存储空间的具体形式。

图5为本发明实施例一种nvmeoverfabric架构中控制设备与存储设备之间数据读写命令的控制方法的流程示意图。所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备将需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据。如图5所示,所述方法包括:

步骤300:所述控制设备获取所述网卡内存的可用存储空间;

步骤302:所述控制设备判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;

步骤304:在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;

步骤306:在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。

通过图5所示的方法,所述控制设备在所述网卡内存的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时,发送所述第一数据读写命令给所述存储设备;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,能够避免所述网卡内存的可用存储空间不足而缓存所述第一数据读写命令所带来的处理机制复杂的问题。

具体的,图5所示的方法流程以及具体实现方式,可以参考上述图3所描述的方法流程来实现,也可以参照上述图4(a)和图4(b)所描述的流程的实现方式来实现,不再赘述。

需要说明的是,图3,图4(a)和图4(b)中以网卡作为数据处理单元、网卡内存作为缓存单元来描述的。fpga芯片或cpu等作为数据处理单元,fpga芯片中的存储单元或cpu的内存作为缓存单元的实现方式,可以参照网卡和网卡内存的实现方式来实现。并且在具体实现时,网卡内存也可以位于网卡的外部,即存储设备中的网卡内存可以是独立于网卡的存储介质,例如ddr等存储介质。可选的,网卡内存也可以是存储设备中多个网卡的内存资源共同构成的一个内存资源池。本发明实施例不限定网卡内存的具体呈现形式。

图6为本发明实施例一种控制设备600的结构示意图。所述控制设备600是nvmeoverfabric架构中的控制设备,如图6所示,所述控制设备600包括处理器601、网卡602和总线603,处理器601和网卡602通过总线603相互连接。总线603可以是外设部件互连标准(英文:peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(英文:extendedindustrystandardarchitecture,简称eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

所述控制设备600与nvmeoverfabric架构中的存储设备之间进行数据传输,所述存储设备包括远端数据处理单元、缓存单元和存储单元,所述控制设备600需要读写的数据缓存在所述存储设备的缓存单元中,并存储在所述存储设备的存储单元;其中,所述处理器601用于执行下述步骤:

获取所述缓存单元的可用存储空间;

判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;

在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;

在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。

上述控制设备600的实现方式中,所述控制设备600在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时,发送所述第一数据读写命令给所述存储设备;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,能够避免所述缓存单元的可用存储空间不足而缓存所述第一数据读写命令所带来的处理机制复杂的问题。

具体的,所述控制设备600的实现方式,可以参照上述图2中主机host300的实现方式,以及上述图3所示的流程中host300的实现方式来实现,不再赘述。所述控制设备600的实现方式,也可以参照上述图2中主机host300的实现方式,以及上述图4(a)和图4(b)所示的流程中host300的实现方式来实现,不再赘述。

需要说明的是,图3,图4(a)和图4(b)中以网卡作为数据处理单元、缓存单元作为缓存单元来描述的。对于以fpga芯片或cpu等作为数据处理单元,fpga芯片中的存储单元或cpu的内存作为缓存单元的实现方式,可以参照上述网卡和网卡内存的实现方式来实现。

图7为本发明实施例一种实现数据读写命令控制的系统700的结构示意图。所述系统700包括nvmeoverfabric架构中控制设备701和存储设备702,所述存储设备702包括数据处理单元7021、缓存单元7022和存储单元7023,所述控制设备701需要读写的数据存储在所述存储单元7023中,所述数据处理单元7021用于接收所述控制设备701发送的数据读写命令,所述缓存单元7022用于缓存所述读写命令所需要传输的数据;其中,

所述控制设备701,用于获取所述缓存单元7022的可用存储空间,判断所述第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元7022的可用存储空间;

所述控制设备701,还用于在所述第一数据所占用的存储空间小于或等于所述缓存单元7022的可用存储空间时,发送所述第一数据读写命令给所述存储设备702;在所述第一数据所占用的存储空间大于所述缓存单元7022的可用存储空间时,暂停发送所述第一数据读写命令;

所述数据处理单元7021,用于接收所述控制设备701发送的所述第一数据读写命令,并将所述第一数据读写命令所要传输的数据缓存在所述缓存单元7022中。

上述实现数据读写命令控制的系统700的实现方式中,所述控制设备701在所述缓存单元7022的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时,发送所述第一数据读写命令给所述存储设备702;在所述第一数据所占用的存储空间大于所述缓存单元7022的可用存储空间时,暂停发送所述第一数据读写命令。这样,能够避免所述缓存单元7022的可用存储空间不足而缓存所述第一数据读写命令所带来的处理机制复杂的问题。

需要说明的是,图7是以缓存单元7022位于数据处理单元7021为例示出系统700的结构。本发明实施例不限定缓存单元7022与数据处理单元7021之间的位置关系。在具体实现时,缓存单元7022位于数据处理单元7021外部,或缓存单元7022为多个数据处理单元7021的共享存储空间组成的用于缓存数据的存储空间。

具体的,所述实现数据读写命令控制的系统700的实现方式,可以参照上述图2中主机host300与target400组成的系统的实现方式,以及上述图3所示的流程中host300与target400的实现方式来实现,不再赘述。所述实现数据读写命令控制的系统700的实现方式,也可以参照上述图2中主机host300与target400组成的系统的实现方式,以及上述图4(a)和图4(b)所示的流程中host300与target400的实现方式来实现,不再赘述。

需要说明的是,图3,图4(a)和图4(b)中以网卡作为数据处理单元、网卡内存作为缓存单元来描述的。对于以fpga芯片或cpu等作为数据处理单元,fpga芯片中的存储单元或cpu的内存作为缓存单元的实现方式,可以参照上述网卡和网卡内存的实现方式来实现。

结合本发明公开内容所描述的方法或步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(英文:randomaccessmemory,ram)、闪存、只读存储器(英文:readonlymemory,rom)、可擦除可编程只读存储器(英文:erasableprogrammablerom,eprom)、电可擦可编程只读存储器(英文:electricallyeprom,eeprom)、寄存器、硬盘、移动硬盘、只读光盘(英文:cd-rom)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文:rom,read-onlymemory)、随机存取存储器(英文:ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1