CN107077426B - NVMe over Fabric架构中数据读写命令的控制方法、设备和系统 - Google Patents

NVMe over Fabric架构中数据读写命令的控制方法、设备和系统 Download PDF

Info

Publication number
CN107077426B
CN107077426B CN201680003062.5A CN201680003062A CN107077426B CN 107077426 B CN107077426 B CN 107077426B CN 201680003062 A CN201680003062 A CN 201680003062A CN 107077426 B CN107077426 B CN 107077426B
Authority
CN
China
Prior art keywords
data
memory
reading
network interface
interface card
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201680003062.5A
Other languages
English (en)
Other versions
CN107077426A (zh
Inventor
吉辛·维克多
邱鑫
吴沛
曲会春
张锦彬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910604485.8A priority Critical patent/CN110413542B/zh
Publication of CN107077426A publication Critical patent/CN107077426A/zh
Application granted granted Critical
Publication of CN107077426B publication Critical patent/CN107077426B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • G06F2212/2022Flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Transfer Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Abstract

本发明实施例提供一种NVMe over Fabric网络中数据读写命令的控制方法、设备和系统,以解决因Target中缓存单元的存储空间不足,导致的因缓存数据读写命令时所带来的处理机制复杂的问题。通过本发明实施例提供的方法,控制设备在发送第一数据读写命令之前,存储设备中缓存单元的可用存储空间是否能够缓存所述第一数据读写命令所要传输的第一数据占用的存储空间,在小于或等于的时候才发送所述第一数据读写命令,在大于时暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免存储设备中的网卡因缓存数据读写命令所带来的处理机制复杂的问题。

Description

NVMe over Fabric架构中数据读写命令的控制方法、设备和 系统
技术领域
本发明涉及信息技术领域,特别涉及一种基于Fabric的非易失性高速传输总线NVMe,NVMe over Fabric,架构中数据读写命令的控制方法、设备和系统。
背景技术
非易失性高速传输总线(英文:NVMe,non-volatile memory express)是一种控制器接口标准,统一了通过快速外围部件互连(英文:PCIe,Peripheral ComponentInterconnect Express)总线进行连接的NVMe设备和主机(英文:Host)之间的队列(英文:Queue)传输机制,优化了队列接口等。
已经发布的PCIe架构的NVMe标准在产业界取得了巨大的成功之后,业界很快希望将NVMe标准扩展到数据中心领域。但受限于数据中心领域没有大量现成的PCIe网络以及PCIe协议本身的缺陷(扩展性、远距离连接等),产业界正在推动将NVMe协议运行在iWarp,基于融合以太的远程内存直接访问协议(英文:ROCE,remote direct memory access overConverged Ethernet),Infiniband,光纤通道(英文:FC,Fiber Channel),Omni-Path等网络上,以提供更灵活的更广泛的应用。业界将NVMe协议运行在iWarp、ROCE、Infiniband、FC和Omni-Path等网络上的应用称之为NVMe over Fabric(简称NOF)。
在NVMe over Fabric的架构中,Host表示主机,主机负责发起数据的读写;Target表示目标存储设备,负责接收并且执行Host发送的命令。当Target接收到Host发送的WriteCommand之后,Target中的网卡解析Write Command中的内容得到Write Command需要传输的数据长度,并在网卡内存中分配对应的存储空间,用于缓存Host待传输的数据。Target的网卡缓存需要传输的数据后,再将缓存的数据迁入Target中的目的硬盘中。当Host通过Read Command从Target的硬盘中读取数据时,实现过程类似。即需要先将Target的硬盘中的数据缓存在网卡内存中,再将缓存在网卡内存中的数据,发送给Host。
在具体的业务实现时,可能会出现网卡的网卡内存不足的情况。即网卡内存的存储空间不能缓存Host通过命令(包括Write Command或Read Command)传输的数据。在这种情况下,会导致Host发出的命令执行失败。Host需要等到网卡内存中其它存储空间被释放后才能再次申请可用存储空间。并且,Target中的网卡需要缓存未被执行的命令、等待内存空间的释放以及再次分配可用内存空间等等。这样的实现方式使得Target中网卡在处理网卡内存不足时的实现方式复杂,可维护性也差。
发明内容
本发明实施例提供一种NVMe over Fabric架构中数据读写命令的控制方法、设备和系统,以解决因Target中网卡内存的存储空间不足,导致的缓存数据读写命令时所带来的处理机制复杂的问题。
一方面,本发明实施例提供了一种基于NVMe over Fabric架构中控制设备与存储设备之间数据读写命令的控制方法,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其中:
所述控制设备获取所述缓存单元的可用存储空间;
所述控制设备判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;
在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。
通过上述方法,所述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;在所述第一数据占用的存储空间大于或等于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。
可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。
可选的,所述控制设备和所述存储设备之间可以通过iWarp、ROCE、Infiniband、FC或Omni-Path等网络实现连接和通信。
所述存储设备中的数据处理单元可以是网卡、独立的现场可编程门阵列(英文:FPGA,field programmable gate array)芯片或存储设备中的中央处理器(英文:CPU,central processing unit)来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或所述存储设备中CPU的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的CPU的内存中的至少两个组成的缓存资源池来实现来实现。
在一个可能的设计中,所述控制设备获取所述缓存单元的可用存储空间包括:
所述控制设备在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。
在一个可能的设计中,在所述控制设备向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述方法还包括:
所述控制设备向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;
所述控制设备接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。
这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。
可选的,所述控制设备执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤。即所述控制设备只在预设时间内执行获取缓存单元的可用存储空间以及判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间的步骤。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。
在一个可能的设计中,所述方法还包括:
所述控制设备暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。
在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。
其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。
可选的,所述控制设备可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述控制设备也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。
可选的,所述控制设备记录的所述网卡内存的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。
可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的CPU的缓存中,或所述控制设备的网卡的缓存中,还可以独立的FPGA芯片中的一个存储空间中。
在一个可能的设计中,所述方法还包括:
所述控制设备在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;
所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
所述控制设备在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。
在一个可能的设计中,所述方法还包括:
所述控制设备暂停发送所述第一数据读写命令达到预设时间后,所述控制设备再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
可选的,所述第一数据读写命令为写数据命令,所述第一数据为需要存储的数据。所述控制设备发送给所述存储设备的写数据命令中携带SGL(英文:Scatter GatherList),所述SGL中包含需要存储的数据在所述控制设备中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。所述数据处理单元可以根据所述写数据命令中SGL携带的所述需要存储的数据在所述控制设备中的源地址,以远程直接数据存取(英文:RDMA,remote direct memory access)方式接收所述需要存储的数据,并将所述需要存储的数据缓存在所述缓存单元中。在所述需要存储的数据被缓存在所述缓存单元后,所述数据处理单元修改所述写数据命令,将所述写数据命令中携带的所述需要存储的数据在所述控制设备中的源地址,修改为所述缓存单元中存储所述需要存储的数据的地址,并将修改后的写数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘的控制器的写数据命令携带的SGL中包括所述缓存单元中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。
其中,目的硬盘是所述数据处理单元根据所述写数据命令中所述需要存储的数据在所述存储设备中的目的地址确定的。所述数据处理单元能够根据所述需要存储的数据在所述存储设备中的目的地址,确定所述需要存储的数据在所述存储设备中的哪个硬盘中,并将所述需要存储的数据在所述存储设备中的目的地址所在的硬盘确定为目的硬盘。
所述数据处理单元在确定目的硬盘后,将修改后的写数据命令发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的写数据命令中携带的所述需要存储的数据在所述缓存单元中的地址,从所述缓存单元中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过RDMA或直接内存存取(英文:DMA,direct memory access)的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。
当所述第一数据读写命令为读数据命令时,所述第一数据为需要读取的数据。所述控制设备发送给所述存储设备的读数据命令中携带SGL,所述SGL中包含需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在所述控制设备中的目的地址等信息。所述数据处理单元收到所述读数据命令后,修改所述读数据命令,将所述读数据命令中携带的所述需要读取的数据在所述控制设备中的目的地址,修改为所述缓存单元的存储空间中缓存所述需要读取的数据的地址,并将修改后的读数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘控制器的读数据命令携带的SGL中包括所述需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述缓存单元的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的读数据命令,将所述需要读取的数据迁移到所述缓存单元的存储空间中。可选的,目的硬盘的控制器通过RDMA或DMA的方式,将所述需要读取的数据迁移到所述缓存单元的存储空间中。
当所述需要读取的数据缓存在所述缓存单元的存储空间后,所述数据处理单元根据所述读数据命令中所述需要读取的数据要写入所述控制设备中的目的地址,将缓存的所述需要读取的数据发送给所述控制设备。可选的,所述数据处理单元通过RDMA的方式,将缓存的所述需要读取的数据发送给所述控制设备。
在一个可能的设计中,所述数据处理单元与所述存储单元之间通过基于快捷外围部件互连标准PCIe的NVMe,NVMe over PCIe,架构实现连接。
在一个可能的设计中,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是NVMe over Fabric架构中的物理控制器Physical controller或非易失性存储控制器NVM controller。
另一方面,本发明实施例还提供了一种控制设备,所述控制设备是NVMe overFabric架构中的控制设备,所述控制设备包括处理器、网卡和总线,所述处理器和网卡通过总线连接,所述控制设备与NVMe over Fabric架构中的存储设备之间进行数据传输,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据缓存在所述存储设备的缓存单元中,并存储在所述存储设备的存储单元;其中,所述处理器用于执行下述步骤:
获取所述缓存单元的可用存储空间;
判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,通过所述网卡发送所述第一数据读写命令给所述存储设备;
在所述第一数据所占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。
上述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述数据处理单元;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于或等于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。
可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。
可选的,所述控制设备和所述存储设备之间可以通过iWarp、ROCE、Infiniband、FC或Omni-Path等网络实现连接和通信。
所述存储设备中的数据处理单元可以是网卡、独立的FPGA芯片或存储设备中的CPU来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或所述存储设备中CPU的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的CPU的内存中的至少两个组成的缓存资源池来实现来实现。
在一个可能的设计中,所述处理器获取所述缓存单元的可用存储空间包括:
所述处理器在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。
在一个可能的设计中,在所述处理器向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述处理器还用于执行下述步骤:
向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;
接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。
其中,所述控制设备在发送所述第二数据读写命令前,不需要获取所述缓存单元的可用存储空间,直接发送所述第二数据读写命令。
这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。
可选的,所述处理器还用于在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤。即所述处理器还用于执行下述步骤:暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。
在一个可能的设计中,所述处理器还用于执行下述步骤:
在暂停发送所述第一数据读写命令达到预设时间后,重新获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,通过所述网卡发送所述第一数据读写命令给所述存储设备。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。
在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。
其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。
可选的,所述处理器可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述处理器也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。
可选的,所述控制设备记录的所述缓存单元的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。
可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的CPU的缓存中,或所述控制设备的网卡的缓存中,还可以独立的FPGA芯片中的一个存储空间中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。
在一个可能的设计中,所述处理器还用于执行下述步骤:
在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;
在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
所述处理器在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述处理器在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。
在一个可能的设计中,所述处理器还用于执行下述步骤:
暂停发送所述第一数据读写命令达到预设时间后,再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
在一个可能的设计中,所述处理器执行的步骤还包括:
在通过所述网卡发送所述第一数据读写命令给所述远端网卡后,将记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;在接收到所述远端网卡发送的完成所述第一数据读写命令的响应消息后,将记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
另一方面,本发明实施例还提供了一种实现数据读写命令控制的系统,所述系统包括NVMe over Fabric架构中控制设备和存储设备,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其中:
所述控制设备,用于在获取所述缓存单元的可用存储空间,判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
所述控制设备,还用于在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;在所述第一数据所占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令;
所述数据处理单元,用于接收所述控制设备发送的所述第一数据读写命令,并将所述第一数据读写命令所要传输的数据缓存在所述缓存单元中。
通过上述系统,所述控制设备在发送第一数据读写命令之前,获取所述缓存单元的可用存储空间。在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述数据处理单元;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,所述控制设备只在所述缓存单元能够缓存数据读写命令所要传输的数据时才发送相应的数据读写命令,能够避免所述控制设备发送的数据读写命令所要传输的数据大于或等于缓存单元的可用存储空间时,因缓存数据读写命令所带来的处理机制复杂的问题。
所述存储设备中的数据处理单元可以是网卡、FPGA芯片或Target中的CPU来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或CPU的内存来实现。所述存储设备中的缓存单元也可以由网卡内存、FPGA芯片中的存储单元、存储设备上的缓存单元或所述存储设备中的CPU的内存中的至少两个组成的缓存资源池来实现来实现。
在一个可能的设计中,所述控制设备获取所述缓存单元的可用存储空间包括:
所述控制设备在向所述存储设备发送第一数据读写命令之前,向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求,以获取所述缓存单元的可用存储空间。
可选的,所述缓存单元的可用存储空间,是所述数据处理单元在接收到所述控制设备发送的获取所述缓存单元可用存储空间的请求时,所述缓存单元中未被占用的存储空间。
可选的,所述控制设备和所述存储设备之间可以通过iWarp、ROCE、Infiniband、FC或Omni-Path等网络实现连接和通信。
可选的,所述控制设备可以是物理服务器或物理服务器上的虚拟机。所述存储设备中的存储单元可以为一个或一个以上的固态磁盘(英文:SSD,Solid State Disk)或硬盘驱动器(英文:HDD,Hard Disk Driver)。所述缓存单元可以位于所述数据处理单元中,也可以独立于所述数据处理单元的存储介质,例如可以是独立于数据处理单元的双倍数据速率(英文:DDR,double data rate)。所述缓存单元还可以是所述存储设备中多个数据处理单元的内存资源共同构成的一个内存资源池。
在一个可能的设计中,在所述控制设备向所述数据处理单元发送获取所述缓存单元的可用存储空间的请求之前,所述控制设备还用于向所述存储设备发送第二数据读写命令,所述第二数据读写命令所要传输的数据大于所述缓存单元的可用存储空间;并接收所述数据处理单元发送的反压消息,所述反压消息用于指示所述缓存单元的可用存储空间不足。
其中,所述控制设备在发送所述第二数据读写命令前,不需要获取所述缓存单元的可用存储空间,直接发送所述第二数据读写命令。
这样,所述控制设备在所述缓存单元的可用存储空间不足,且不能缓存所述控制设备发送的所述第二数据读写命令所要传输的数据时,才在发送第一数据读写命令之前发送获取所述缓存单元的可用存储空间的请求,并在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时才发送所述第一数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升所述控制设备发送数据读写命令时的效率,节省所述控制设备因发送获取所述缓存单元可用存储空间的请求所造成的资源占用。同样的,由于所述数据处理单元也不需要每次数据读写命令之前都要向所述控制设备返回可用存储空间,也相应节省了所述数据处理单元的资源占用。
可选的,所述控制设备执行在发送第一数据读写命令之前获取所述缓存单元的可用存储空间的步骤达到预设时间时,所述缓存单元的可用存储空间足够大时,可以不再在发送第一数据读写命令之前,发送获取所述缓存单元的可用存储空间的请求。即所述控制设备只在预设时间内获取缓存单元的可用存储空间以及判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间。所述预设时间可以根据不同的业务场景进行不用的设置。在所述预设时间内,所述缓存单元的可用存储空间不能满足所述控制设备发送的所有数据读写命令所要传输的数据对存储空间的需求。在所述预设时间达到后,所述缓存单元的可用存储空间能满足所述控制设备发送的数据读写命令所要传输的数据对存储空间的需求。
在一个可能的设计中,所述控制设备暂停发送所述第一数据读写命令达到预设时间后,重获取所述缓存单元的可用存储空间,并在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以通过设定定时器的方式来实现。
可选的,所述控制设备暂停发送所述第一数据读写命令达到预设时间,可以是系统默认的时间或预先配置的时间。
在一个可能的设计中,所述缓存单元的可用存储空间是本地记录的所述缓存单元的实时可用存储空间。
其中,所述本地指的是所述控制设备,所述本地记录的所述缓存单元的实时可用存储空间,是所述控制设备记录的所述缓存单元的实时可用存储空间。
可选的,所述控制设备可以在所述存储设备上电初始化时,获取并记录所述缓存单元的可用存储空间。所述控制设备也可以在所述存储设备上电初始化后的任一时间,获取并记录所述缓存单元的可用存储空间。
可选的,所述控制设备记录的所述网卡内存的实时可用存储空间的形式,可以是所述缓存单元的可存储数据的空间的大小或可被写入的数据块的个数。
可选的,所述控制设备在专门的存储空间中,例如专门的芯片中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。也可以是存储在所述控制设备中已有的存储部件中,例如所述控制设备的CPU的缓存中,或所述控制设备的网卡的缓存中,还可以独立的FPGA芯片中的一个存储空间中,存储所述第一命令队列对应的缓存单元的存储空间的实时可用存储空间。
在一个可能的设计中,所述控制设备在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;
所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
所述控制设备在发送所述第一数据读写命令后,所述第一数据读写命令所要传输的数据会占用所述缓存单元的存储空间。因此,需要将记录的所述缓存单元的实时可用存储空间减去所述第一数据所占用的存储空间。所述控制设备在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,所述第一数据已经被迁移出所述缓存单元。因此,需要将记录的所述缓存单元的实时可用存储空间加上所述第一数据所占用的存储空间。这样,能够正确记录所述缓存单元最新的可用存储空间。
在一个可能的设计中,所述控制设备暂停发送所述第一数据读写命令达到预设时间后,所述控制设备再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
可选的,所述第一数据读写命令为写数据命令,所述第一数据为需要存储的数据。所述控制设备发送给所述存储设备的写数据命令中携带SGL,所述SGL中包含需要存储的数据在所述控制设备中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。所述数据处理单元可以根据所述写数据命令中SGL携带的所述需要存储的数据在所述控制设备中的源地址,以RDMA方式接收所述需要存储的数据,并将所述需要存储的数据缓存在所述缓存单元中。在所述需要存储的数据被缓存在所述缓存单元后,所述数据处理单元修改所述写数据命令,将所述写数据命令中携带的所述需要存储的数据在所述控制设备中的源地址,修改为所述缓存单元中存储所述需要存储的数据的地址,并将修改后的写数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘的控制器的写数据命令携带的SGL中包括所述缓存单元中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在所述存储设备中的目的地址等信息。
其中,目的硬盘是所述数据处理单元根据所述写数据命令中所述需要存储的数据在所述存储设备中的目的地址确定的。所述数据处理单元能够根据所述需要存储的数据在所述存储设备中的目的地址,确定所述需要存储的数据在所述存储设备中的哪个硬盘中,并将所述需要存储的数据在所述存储设备中的目的地址所在的硬盘确定为目的硬盘。
所述数据处理单元在确定目的硬盘后,将修改后的写数据命令发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的写数据命令中携带的所述需要存储的数据在所述缓存单元中的地址,从所述数据处理单元缓存单元中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过RDMA或DMA的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。
当所述第一数据读写命令为读数据命令时,所述第一数据为需要读取的数据。所述控制设备发送给所述存储设备的读数据命令中携带SGL,所述SGL中包含需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在所述控制设备中的目的地址等信息。所述数据处理单元收到所述读数据命令后,修改所述读数据命令,将所述读数据命令中携带的所述需要读取的数据在所述控制设备中的目的地址,修改为所述缓存单元的存储空间中缓存所述需要读取的数据的地址,并将修改后的读数据命令发送给目的硬盘的控制器。即所述数据处理单元发送给目的硬盘控制器的读数据命令携带的SGL中包括所述需要读取的数据在所述存储设备中的源地址、所述需要读取的数据的长度、以及所述缓存单元的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的读数据命令,将所述需要读取的数据迁移到所述缓存单元的存储空间中。可选的,目的硬盘的控制器通过RDMA或DMA的方式,将所述需要读取的数据迁移到所述缓存单元的存储空间中。
当所述需要读取的数据缓存在所述缓存单元的存储空间后,所述数据处理单元根据所述读数据命令中所述需要读取的数据要写入所述控制设备中的目的地址,将缓存的所述需要读取的数据发送给所述控制设备。可选的,所述数据处理单元通过RDMA的方式,将缓存的所述需要读取的数据发送给所述控制设备。
在一个可能的设计中,所述数据处理单元与所述存储单元之间通过NVMe,NVMeover PCIe,架构实现连接。
在一个可能的设计中,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是NVMe over Fabric架构中的物理控制器Physical controller或非易失性存储控制器NVM controller。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中NVMe over Fabric一种实现方式架构示意图;
图2为本发明实施例中主机Host与一个Target连接并实现数据传递的实现方式的结构示意图;
图3为本发明实施例提供的NVMe over Fabric中一种数据读写命令的控制方法流程示意图;
图4(A)本发明实施例提供的NVMe over Fabric中另一种数据读写命令的控制方法的一种实现情况的流程示意图;
图4(B)本发明实施例提供的NVMe over Fabric中另一种数据读写命令的控制方法的另一种实现情况的流程示意图;
图5为本发明实施例一种NVMe over Fabric架构中控制设备与存储设备之间数据读写命令的控制方法的流程示意图;
图6为本发明实施例一种控制设备600的结构示意图;
图7为本发明实施例一种实现数据读写命令控制的系统700的结构示意图。
具体实施方式
下面结合附图,对本发明的实施例进行描述。
另外,本发明实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
参考图1,图1为现有技术中NVMe over Fabric一种实现方式架构示意图。图1中包括Host 100、Target 200和Target 210。其中,Host 100是主机,主要负责发起数据的读写,例如发送数据读写命令等。Target 200和Target 210是目标存储设备,在NVMe协议中也称为NVM Subsystem,主要负责接收并且执行主机Host 100发送的数据读写命令。其中,主机Host 100的具体形态包括但不限于物理服务器或物理服务器上的虚拟机,所述物理服务器可以是包括CPU、内存和网卡等组成部件的计算机设备等。Target 200可以是一个独立的物理硬盘系统,如图1所示,Target 200包括网卡201和一个以上的硬盘,网卡201和一个以上的硬盘分别连接。需要说明的是,图1中以三个硬盘为例进行说明,在具体实现时,Target200可以包括一个以上的硬盘。Target 200中的硬盘可以是固态磁盘(英文:SSD,SolidState Disk)或硬盘驱动器(英文:HDD,Hard Disk Driver)等具备存储功能的存储介质。其中网卡201具有网络接口卡的功能,可以是NVMe over Fabric中的远端网络接口卡(英文:RNIC,Remote Network Interface Card),网卡201通过Fabric与Host 100进行与数据读写命令或数据传输相关的通信。
Target210的结构与Target 200类似,包括网卡211和一个以上的硬盘。Target210中组成部件(网卡211和硬盘等)的功能和实现方式,与Target 200中的组成部件(网卡201和硬盘)的功能和实现方式类同。在具体实现时,还可以有多个Target,图1只是示出两个Target(Target 200和Target 210)为例进行说明。
下面以图1中Host 100需要向Target 200存储数据为例,对Host 100发送数据、Target接收数据的过程进行描述,包括:
步骤S100:当Host 100需要存储数据到Target 200时,Host 100通过WriteCommand发送命令,该Write Command通常会携带需要存储的数据。如果需要存储的数据量较大,Host 100无法通过Write Command承载并发送时(例如需要存储的数据超过WriteCommand能够承载的最大数据量),Host 100会在Write Command中携带SGL(英文:ScatterGather List)。所述SGL中包括一个字段,例如可以是一个entry,该字段包括需要存储的数据在Host 100中的源地址、需要存储的数据的长度、以及需要存储的数据在Target 200中的目的地址等信息。需要说明的是,所述SGL也可以包括多个字段,例如多个entry,每个entry都包含需要存储的数据在Host 100中的源地址、需要存储的数据的长度、以及需要存储的数据在Target 200中的目的地址等信息。当所述需要存储的数据包括多个地址段,即所述需要存储的数据在Host 100中是不连续,存在于多个地址段中时,就需要用多个entry来记录多个地址段中的数据。本发明实施例以SGL中包括一个entry为例进行说明。
下面的步骤以Host 100需要存储的数据超过Write Command自身能够携带的数据量,需要在Write Command中通过SGL通知Target200需要存储的数据的地址信息和长度为例进行说明。
步骤S101:Host 100通过网卡103发送Write Command到Target 200;所述WriteCommand中包括SGL;
可选的,所述需要存储的数据可以是一个以上的数据块,由于数据块的长度是固定的,所述待写数据的长度可以通过数据块的个数来记录。
步骤S102:Target 200中的网卡201接收到所述Write Command之后,获取所述Write Command中携带的需要存储的数据的长度,并在网卡201的网卡内存(图1中未示出)中分配相应的存储空间,即在网卡201的网卡内存中分配与所述Write Command中携带的需要存储的数据的长度相同的存储空间,用于缓存Host 100发送的需要存储的数据。
步骤S103:网卡201分配好缓存数据所需的存储空间后,通过远程直接数据存取(英文:RDMA,remote direct memory access)命令通知网卡103通过RDMA方式传输需要存储的数据。即通知网卡103根据所述需要存储的数据在Host 100的源地址读取所述需要存储的数据,并接收网卡103通过网络传输的所述需要存储的数据,将接收到的所述需要存储的数据缓存在网卡内存的存储空间中。
上述步骤S102中,可能会出现网卡201中网卡内存的存储空间不足的情况。例如:当前网卡201的网卡内存剩余的存储存储空间为10K Bytes,但是需要缓存的数据长度为20K Bytes。此时网卡201会因无足够存储空间来缓存所述需要存储的数据,导致分配存储空间失败。网卡201需要等到网卡内存有其它存储空间被释放后,在网卡内存的可用存储空间大于或等于所述需要存储的数据所占用的存储空间时,才能再次分配缓存所述需要存储的数据的存储空间。
同样的,当Host 100向Target 200发送读取数据请求时,Host 100会发送ReadCommand到网卡201。如果需要读取的数据超过Read Command自身能够携带的数据量,所述Read Command中包括SGL,该SGL携带需要读取的数据在Target 200中的源地址,所述需要读取的数据的长度以及所述需要读取的数据在Host 100中的目的地址。
当网卡201缓存所述需要读取的数据时,如果网卡内存的可用存储空间小于所述需要读取的数据所占用的存储空间,则网卡201需要等到网卡内存有其它存储空间被释放,且网卡内存的可用存储空间大于或等于所述需要读取的数据所占用的存储空间之后,才能再次分配缓存所述需要读取的数据的存储空间并缓存所述需要读取的数据。
上述Host 100向Target 200写入数据或读取数据的过程中,网卡201中网卡内存的动态管理(例如查找空闲存储空间,等待其它存储空间被释放,再次申请可用存储空间等)操作会给网卡201的设计和实现带来很多的复杂性,例如,这些复杂性至少包括下述之一:
1)当网卡201的网卡内存的存储空间小于需要传输数据所占用的存储空间时,网卡201需要暂时缓存对应的Write Command或Read Command;
2)当网卡201长时间没有申请到有效存储空间(例如网卡201的网卡内存长时间没有可用存储空间)的时候,需要设计一种机制老化(例如删除)长时间被缓存的WriteCommand或Read Command;
3)老化掉长时间缓存的Write Command或Read Command之后,还需要一种机制通知host 100,并通知host 100重新发送相关的命令和数据。
需要说明的是以上以Write Command或Read Command中携带SGL为例进行说明,实际使用场景中,也可以是由Write Command或Read Command直接携带相应数据,也同样存在上述问题;或者,在Host 100与Target 200基于其他的交互机制下,例如采用其他不同于RDMA命令的方式进行交互,如果在Target 200中也是采用网卡内存的动态管理机制,也同样存在上述问题。以上场景仅是为了说明已有技术方案的问题所列举的场景实例之一而已,该具体实例并不构成本发明应用场景的限制。
为解决上述技术问题,本发明实施例提供一种NVMe over Fabric中数据读写命令的控制方法、设备和系统。下面实施例的描述,以主机Host与一个Target连接并实现数据传递为例进行说明。对于Host与多个Target连接并实现数据传输的情况,可以参照Host与一个Target连接的情况来实现,不再赘述。
需要说明的是,作为存储设备的Target,在具体实现时,可以由网卡、独立的现场可编程门阵列(英文:FPGA,field programmable gate array)芯片或Target中的中央处理器(英文:CPU,central processing unit)来接收作为控制设备的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等网络实现连接和通信。
其中,Host 300包括CPU 301、内存302和网卡303等硬件组成,Target 400包括网卡401和一个以上的硬盘。Host 300是主机,主要负责发起数据的读写,例如发送数据的读写命令等。主机Host 300的具体形态包括但不限于物理服务器或物理服务器上的虚拟机,所述物理服务器可以是包括CPU、内存和网卡等组成部件的计算机设备等。需要说明的是,在主机Host 300为物理服务器上的虚拟机的情况下,以上所述的Host 300包括CPU 301、内存302和网卡303等硬件组成指的是物理服务器分配给该虚拟机使用的CPU、内存和网卡等资源。同样的,在Target 400中的网卡401也可以为虚拟网卡,该虚拟网卡是Target 400中的物理网卡分配给该虚拟网卡使用的网卡资源。
Target 400是目标存储设备,在NVMe over Fabric架构中也称为NVM Subsystem,主要负责接收并且执行主机Host 300发送的读写命令。Target 400中的硬盘可以是SSD或HDD等具有存储功能的介质,图2中以三个硬盘为例进行说明。网卡401包括网卡处理器4011和网卡内存4012。网卡401具有网络接口卡的功能,可以是NVMe over Fabric中的RNIC,网卡401通过NVMe over Fabric架构中的网络与Host 300进行与数据读写命令或数据传输相关的通信。图2以网卡内存4012位于网卡401中,即网卡401中包括网卡内存4012为例进行说明。在具体实现时,网卡内存4012也可以位于网卡401的外部,即Target 400中的网卡内存可以是独立于网卡401的存储介质。本发明实施例中,独立于网卡401的存储介质,可以是双倍数据速率(DDR,double data rate)等存储介质。作为另一种可选的实现方式,网卡401的网卡内存4012也可以是Target 400中多个网卡的内存资源共同构成的一个内存资源池。本发明实施例不限定网卡内存的具体呈现形式。
为避免已有技术中因网卡401的网卡内存的存储空间不足,不能缓存Host 300发送的数据读写命令所要传输的数据所带来的复杂处理机制问题,下面以Host 300需要向Target 400发送写命令,以向Target 400写入需要存储的数据为例,对本发明实施例提供的NVMe over Fabric中数据读写命令的控制方法进行详细说明。
当Host 300需要向Target 400写入需要存储的数据时,Host 300先获取Target400中网卡内存4012的可用存储空间。在网卡内存4012的可用存储空间大于或等于所述需要存储的数据所占用的存储空间时,Host 300才向网卡401发送携带所述需要存储的数据地址信息和长度的Write Command。这样,能够避免网卡内存4012因可用存储空间不足,缓存Host 300的Write Command所带来的复杂处理机制的问题。具体的,如图3所示,上述方法的具体实现过程为:
步骤100:Host 300在向Target 400发送写数据命令之前,向网卡401发送获取所网卡内存4012可用存储空间的请求;
其中,所述网卡内存4012可用存储空间,是网卡401在接收到Host 300发送的获取所述网卡内存4012可用存储空间的请求时,网卡内存4012中未被占用的存储空间。可以理解,网卡内存4012中未被占用的存储空间,是网卡内存4012中未被用于缓存数据的空间。例如,当网卡内存4012中缓存有数据,这些数据还未被写入硬盘或还未被Host 300读取时,缓存的数据会占用网卡内存4012的存储空间,已经被占用的存储空间不能被用于缓存其它数据。
所述需要存储的数据,是所述Host 300要写入Target 400的数据。Host 300需要通过Write Command将所述需要存储的数据发送给网卡401。例如,Host 300在WriteCommand携带SGL,该SGL包括需要存储的数据在Host 300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在Target 400中的目的地址等信息,并将携带该SGL的Write Command发送给网卡401。
Host 300向网卡401发送获取所述网卡内存4012可用存储空间的请求,可以通过发送请求消息来实现。所述请求消息携带请求网卡401返回网卡内存4012可用存储空间的信息。所述请求消息可以通过任何一种消息形式实现。所述网卡内存4012返回的可用存储空间的信息,也可以通过任何一种表述网卡内存4012可用存储空间的信息的形式来实现。例如,所述请求消息可以是一个请求报文,该请求报文中包含获取网卡内存4012的可用存储空间的字段。本发明实施例不限定请求消息的形式,也不限定请求消息中携带的指示网卡401返回网卡内存4012可用存储空间的信息的形式。或者,Host 300也可以通过读取记录有网卡内存4012可用存储空间信息的寄存器,来获取网卡内存4012可用存储空间的信息。
步骤102:Host 300接收所述网卡401返回的所述网卡内存4012的可用存储空间;
具体的,可以是网卡401接收到Host 300发送的获取所述网卡内存4012可用存储空间的请求后,将所述网卡内存4012可用存储空间的信息携带在响应消息中返回给Host300,Host 300获取所述响应消息中携带的所述网卡内存4012可用存储空间的信息。
其中,所述网卡401返回的所述网卡内存4012的可用存储空间,是所述网卡401接收到Host 300发送的请求时网卡内存4012的可用存储空间。因此,网卡401返回给Host 300的所述网卡内存4012的可用存储空间,也是所述网卡内存4012的实时可用存储空间。
步骤104:Host 300根据获取到的所述网卡内存4012可用存储空间的信息,判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间;
例如,所述网卡内存4012的可用存储空间的大小为100MB,所述需要存储的数据所占用的存储空间为50MB,在判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间时,可以通过判断50MB小于100MB来实现。或者,所述网卡内存4012的可用存储空间的长度为50个数据块,所述需要存储的数据所占用的存储空间为60个数据块,在判断所述需要存储的数据所占用的存储空间是否小于或等于所述网卡内存4012可用存储空间时,可以通过判断60个数据块大于50个数据块来实现。
步骤106:当所述需要存储的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时,所述Host 300发送所述写数据命令给所述Target 400;
具体的比较可以参考上面的描述。一个具体的实施方式中,所述Host 300发送所述写数据命令给所述Target 400可以是所述Host 300将所述写数据命令发送给所述网卡401,并在所述写数据命令中携带SGL,在所述SGL中携带需要存储的数据的地址信息和所述需要存储的数据的长度。即所述SGL中包含需要存储的数据在Host 300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在Target 400中的目的地址等信息。
步骤108:所述Target 400中的网卡401接收所述写数据命令,将所述写数据命令所要存储的数据缓存在网卡内存4012中;
具体的,网卡401可以根据所述Write Command中SGL携带的所述需要存储的数据在Host 300中的源地址,以RDMA方式通过网卡303接收所述需要存储的数据,并将所述需要存储的数据缓存在所述网卡内存4012中。
步骤110:当所述需要存储的数据所占用的存储空间大于所述网卡内存4012的可用存储空间时,所述Host 300暂停发送所述写数据命令。
这样,Host 300会在网卡内存4012的可用存储空间能够缓存需要存储的数据时,才通过Write Command发送需要存储的数据,能够避免网卡内存4012的可用存储空间不足而缓存Write Command所带来的处理机制复杂的问题。
可选的,所述Host 300暂停发送所述写数据命令达到预设时间后,可以再重新发送获取网卡内存4012的可用存储空间的请求,以判断网卡内存4012的可用存储空间是否能够缓存所述写数据命令所要存储的数据。即重新执行步骤100,直到Host 300将所述需要存储的数据缓存在所述网卡内存4012中。
所述Host 300暂停发送所述写数据命令的预设时间,可以是系统默认的时间或预先配置的时间。在所述预设时间设定的时间范围内,Host 300不执行步骤100。具体的,可以通过在Host 300中设定定时器的方式,设定所述Host 300暂停发送所述需要存储的数据的预设时间,Host 300在定时器设定的时间到达后再启动执行步骤100-步骤110。可以理解,所述Host 300暂停发送所述写数据命令的预设时间,可以根据具体的业务情况进行灵活设定。
上述步骤108中,所述需要存储的数据被缓存在网卡内存4012,或者在上述步骤110之后,所述Host 300暂停发送所述写数据命令达到预设时间并再次执行步骤100-步骤110,并将所述需要存储的数据缓存在网卡内存4012;在这两种情况下,缓存在网卡内存4012中的所述需要存储的数据会被迁移到Target 400的硬盘中。具体的,在所述需要存储的数据被缓存在网卡内存4012后,网卡401修改所述Write Command,将所述Write Command携带的所述需要存储的数据在Host 300中的源地址,修改为网卡内存4012中存储所述需要存储的数据的地址,并将修改后的Write Command发送给目的硬盘的控制器。即网卡401发送给目的硬盘的控制器的Write Command携带的SGL中包括网卡内存4012中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在Target 400中的目的地址等信息。
其中,目的硬盘是网卡401根据所述Write Command中所述需要存储的数据在Target 400中的目的地址确定的。网卡401能够根据所述需要存储的数据在Target 400中的目的地址,确定所述需要存储的数据在Target 400中的哪个硬盘中,并将所述需要存储的数据在Target 400中的目的地址所在的硬盘确定为目的硬盘。在Target 400中,每个硬盘都会对应一个地址段,网卡401根据所述Write Command的SGL中所述需要存储的数据在Target 400中的目的地址,确定该目的地址所在的地址段,与该地址段对应的硬盘即为目的硬盘。
网卡401在确定目的硬盘后,将修改后的Write Command发送给目的硬盘的控制器。目的硬盘的控制器根据接收到的Write Command中携带的所述需要存储的数据在所述网卡内存4012中的地址,从网卡内存4012中读取所述需要存储的数据,并将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。可选的,目的硬盘的控制器可以通过RDMA或直接内存存取(英文:DMA,direct memory access)的方式,将所述需要存储的数据写入目的硬盘的目的地址对应的存储空间中。本发明实施例中,网卡401与Target 400中的硬盘之间,基于NVMe over PCIe架构实现连接。因此,Target 400中目的硬盘的控制器与网卡401之间,可以通过NVMe over PCIe连接和通信方式,即目的硬盘的控制器可以基于NVMeover PCIe协议规定的方式,将所述需要存储的数据从网卡内存4012写入目的硬盘中。
上述网卡401修改所述Write Command并将修改后的Write Command发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如ARM、X86或Power PC等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是NVMe over Fabric中的Physical controller或NVM Controller。
在具体实现时,当网卡内存4012的可用存储空间足够大且可以缓存较多的数据时,网卡内存4012的可用存储空间能够缓存Host 300需要存储的数据时,Host 300可以不用在每次发送数据读写命令之前,都发送获取网卡内存4012可用存储空间信息的请求。本发明实施例提供的另一种可选的实现方式为:
Host 300可以直接发送数据读写命令给网卡401,在接收到网卡401发送的不能缓存需要存储的数据的反压报文时,才启动上述步骤100-步骤110的流程。
例如,Host 300在发送写数据命令,例如发送第二写数据命令时,直接发送该第二写数据命令给网卡401,不需要获取网卡内存4012的可用存储空间。当Host 300发送该第二写数据命令给网卡401后,如果网卡内存4012的可用存储空间不能缓存该第二写数据命令要所要传输的数据,即不能缓存该第二写数据命令所要存储的数据时,网卡401会给Host300返回一个反压消息。该返压消息指示网卡内存4012的存储空间不足,不能缓存Host 300发送的所述第二写数据命令所要存储的数据。
Host 300在收到网卡401发送的不能缓存需要存储的数据的反压报文时,才启动上述步骤100-步骤110的流程。即Host 300在收到网卡401返回的反压报文后,在发送其它数据读写命令之前,向网卡401发送获取所网卡内存4012可用存储空间的请求,在判断网卡内存4012可用存储空间大于或等于需要传输的数据所占用的存储空间时,才通过数据读写命令发送其它数据读写命令。
需要说明的是,本发明实施例中第一数据读写命令和第二数据读写命令只是用于区分不同的数据读写命令,不代表它们之间存在先后优劣关系。
进一步的,在执行步骤100-步骤110的流程达到预设时间后,所述网卡内存4021的存储空间恢复到有足够空间存储待存储的数据时,可以不用再执行步骤100-步骤110的过程。即在执行步骤100-步骤110的流程达到预设时间后,当需要向网卡401发送需要存储的数据时,Host 300直接将需要存储的数据发送给网卡401,不再发送获取网卡内存4012可用存储空间的请求。所述执行步骤100-步骤110的流程的预设时间,可以根据需要具体的设定,可以是系统默认的时间,也可以是基于管理员预先下发的设定时间。并且,执行步骤100-步骤110的流程的预设时间,可以根据实际的业务情况实时的变更,例如在网卡内存4021的存储空间占用率较高的情况下,执行步骤100-步骤110流程的预设时间长;在网卡内存4021的存储空间占用率较低的情况下,执行步骤100-步骤110流程的预设时间短等。
这样,可以只在网卡内存4012出现存储空间不足的情况下,Host 300在向Target400发送数据读写命令之前才向网卡401发送获取所述网卡内存4012可用存储空间的请求,并基于网卡401返回的网卡内存4012可用存储空间决定是否发送数据读写命令。不仅能够有效、地解决现有技术中的技术问题,还能够进一步提升Host 300发送数据读写命令时的效率,节省Host 300因发送获取所述网卡内存4012可用存储空间的请求所造成的资源占用。同样的,由于网卡401也不需要每次数据读写命令之前都要向Host 300返回可用存储空间,也相应节省了网卡401的资源占用。
上述实施例中,网卡401向Host 300发送的反压消息,可以是直接产生的消息,也可以是通过响应消息携带的消息。例如可以是网卡内存4012的可用存储空间不足时直接产生的消息;也可以是网卡401向Host 300返回的对Write command的响应消息,在响应消息中携带网卡内存4012的可用存储空间不足的信息。其它类型的消息或报文,只要能够携带指示网卡内存4012的可用存储空间不足,且不能缓存Host 300需要存储的数据的消息,都可以作为网卡401向Host 300发送的反压消息。可选的,所述反压消息中携带的指示网卡内存4012可用存储空间不足且不能存储Host 300需要存储的数据的信息,可以是错误码或预先设定的标识等,只要能够指示或通知Host 300,网卡内存4012的可用存储空间不能存储Host 300发送的需要存储的数据的信息,都可以作为反压消息中携带的用于指示网卡内存4012的可用存储空间不足的信息。
进一步的,Host 300接收到内存401发送的反压消息后,在执行步骤100-步骤110的过程中,还包括重传因网卡内存4021的可用存储空间不足而被执行的数据读写命令,例如上述第二写数据命令。即对于网卡401因网卡内存4021可用存储空间不足产生反压消息时未被执行的数据读写命令,Host 300在判断网卡内存4021的可用存储空间能够存储该数据读写命令所要传输的数据时,Host 300重新发送该数据读写命令。
本发明实施例中,可以是Host 300中的CPU301执行步骤100-步骤106以及步骤110的过程,也可以是Host 300中的网卡303执行步骤100-步骤106以及步骤110的过程。还可以是Host 300中的某一芯片或逻辑部件,来执行步骤100-步骤106以及步骤110的过程,例如可以是FPGA芯片等执行步骤100-步骤110的过程。
在实际实现中,上述步骤100-步骤106以及步骤110也可以由CPU301、网卡303、Host 300中的某一芯片或逻辑部件中的至少其中一个来实现。例如,网卡303执行上述步骤100-步骤104,CPU301执行上述步骤106和步骤110;或者,CPU301执行上述步骤100-步骤104,网卡303执行上述步骤106和步骤110。也可以是Host 300中的芯片或逻辑部件执行上述步骤100和步骤102,CPU301执行上述步骤104、步骤106和步骤110;或者,网卡303执行上述步骤100和步骤102,Host 300中的芯片或逻辑部件执行上述步骤104、步骤106和步骤110等。本发明实施例不限定具体的执行步骤100-步骤106以及步骤110中的执行主体的实现方式。
当上述Host 300是通过虚拟机实现时,上述CPU301、网卡303分别对应虚拟机中的CPU和网卡,虚拟机中的CPU和网卡通过承载其虚拟功能的物理CPU和物理网卡来实现。其实现方式与上述实现方式类似,不再赘述。
对于Host 300从Target 400读取数据的实现方式,与上述Host 300向Target 400写入数据的实现方式类似,可以参照上述Host 300向Target 400发送写数据命的过程来实现。即当Host 300向Target 400发送的数据读写命令为读数据命令时,其实现过程与上述数据读写命令为写数据命令的过程类似。例如Host 300在向Target 400发送读数据命令之前,向网卡401发送获取所述网卡内存4012可用存储空间的请求;Host 300根据获取到的所述网卡内存4012可用存储空间,判断需要读取的数据所占用的存储空间是否小于或等于所述网卡内存4012的可用存储空间。当需要读取的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时,Host 300将Read Command发送给所述网卡401;当需要读取的数据所占用的存储空间大于所述网卡内存4012可用存储空间时,Host 300暂停发送所述Read Command。这样就避免了在读取数据的过程中因网卡内存4012的存储空间不够、缓存Read Command所带来的问题。并且,Host 300在向Target 400发送读数据命令之前,向网卡401发送获取所述网卡内存4012可用存储空间的请求,是在Host 300接收到网卡401发送的不能缓存需要存储的数据的反压报文时,才执行的步骤。即Host 300不是每次发送ReadCommand时都发送获取所述网卡内存4012可用存储空间的请求,而是在先发送ReadCommand或Write Command,在接收到网卡401发送的不能缓存需要存储的数据的反压消息时,才在发送Read Command时发送获取所述网卡内存4012可用存储空间的请求,并在判断需要读取的数据所占用的存储空间大于所述网卡内存4012可用存储空间时,Host 300暂停发送所述Read Command;在需要读取的数据所占用的存储空间小于或等于所述网卡内存4012可用存储空间时发送所述Read Command。
以图2所示的架构为例,为避免现有技术中因网卡内存的存储空间不足带来的复杂处理机制的问题,本发明实施例提供的另外一种实现方法是Host 300获取网卡内存4012的实时可用存储空间并记录,每次在向Target 400发送数据读写命令前判断记录的网卡内存4012的实时可用存储空间是否大于或等于需要传输的数据所占用的存储空间。在记录的网卡内存4012的实时可用存储空间大于或等于需要传输的数据所占用的存储空间时,Host300向网卡401发送数据读写命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要传输的数据所占用的存储空间。在缓存在网卡内存4012中的所述需要传输的数据被迁移后,Host 300根据接收到的完成迁移的响应消息,将记录的网卡内存4012的实时可用存储空间加上所述需要传输的数据所占用的存储空间。
如果记录的网卡内存4012的实时可用存储空间小于所述需要传输的数据所占用的存储空间,则Host 300暂停发送所述数据读写命令,待记录的网卡内存4012的实时可用存储空间大于或等于需要传输的数据所占用的存储空间时再重新发送。
由于Host 300在向Target 400发送数据读写命令时,是在网卡内存4021有足够可用存储空间缓存要传输的数据时才发送,能够避免网卡401因网卡内存4021的可用存储空间不足而缓存Host 300发送的数据读写命令所带来的复杂处理机制的问题。下面分别就所述数据读写命令为写命令和读命令,详细描述上述方法的实现过程。
当所述数据读写命令为写数据命令时,如图4A所示,上述方法的详细实现过程为:
步骤200A:Host 300获取并记录网卡内存4012的实时可用存储空间;
其中,Host 300可以将获取的网卡内存4012的可用存储空间记录在本地,即将获取的网卡内存4012的可用存储空间记录在Host 300中。
具体的,Host 300可以在Target 400上电初始化时,获取网卡内存4012的可用存储空间。由于在Target 400上电初始化时,网卡内存4012还未缓存有数据,因此获取到的网卡内存4012的可用存储空间就是网卡内存4012总的存储空间。将网卡内存4012总的存储空间作为记录的网卡内存4012的实时可用存储空间,能够最大化的利用网卡内存4012的存储空间。
可选的,Host 300也可以在Target 400上电初始化后的任一时间,获取网卡内存4012当前可用的存储空间,并将获取的网卡内存4012当前可用的存储空间,作为网卡内存4012的实时可用存储空间并记录。此时获取的网卡内存4012的可用存储空间,会因网卡内存4012中缓存有数据而小于网卡内存4012的总存储空间。
Host 300获取网卡内存4012当前可用的存储空间的方式,可以是通过发送请求报文,该请求报文中包含获取网卡内存4012的可用存储空间的字段。网卡401收到Host 300发送的请求报文后,将网卡内存4012当前可用存储空间写入请求报文的相应字段中返回给Host 300。Host 300也可以通过读取记录有网卡内存4012当前可用存储空间信息的寄存器中,来获取网卡内存4012可用存储空间的信息。
步骤202A:Host 300向Target 400发送写数据命令之前,先判断需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间;
具体的,所述Host 300可以获取本地记录的网卡内存4012的实时可用存储空间,并判断需要存储的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间。
其中,所述Host 300记录的网卡内存4012的实时可用存储空间,可以是记录的可存储数据的空间的大小。相应的,所述需要存储的数据占用的存储空间可以是所述需要存储的数据所占用的存储空间的大小。在判断所述需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间时,可以通过判断需要存储的数据所占用的存储空间的大小是否小于或等于记录的所述网卡内存4012的实时可用存储空间的大小来实现。
当然,也可以用其它形式记录所述网卡内存4012的实时可用存储空间,例如用可被写入的数据块的个数记录所述网卡内存4012的实时可用存储空间。相应的,所述需要存储的数据占用的存储空间,可以是所述需要存储的数据的数据块的个数。在判断所述需要存储的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间时,可以通过判断需要存储的数据的数据块个数是否小于或等于记录的所述网卡内存4012可被写入的数据块的个数来实现。
步骤204A:在所述需要存储的数据占用的存储空间小于或等于记录的所述网卡内存4012的实时可用存储空间时,Host 300通过Write Command发送所述写数据命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要存储的数据所占用的存储空间,得到更新后的网卡内存4012的实时可用存储空间;
其中,Host 300通过Write Command发送所述写数据命令给Target 400。并且,可以是Host 300在Write Command中携带SGL,该SGL包括所述写数据命令所需要存储的数据在Host 300中的源地址、所述需要存储的数据的长度、以及所述需要存储的数据在Target400中的目的地址等信息。Target 400中的网卡401接收到Host 300发送的Write Command后,根据其中携带的需要存储的数据在Host 300中的源地址,获取所述需要存储的数据并缓存在网卡内存4012的存储空间中。可选的,网卡401可以RDMA的方式通过网卡303获取所述需要存储的数据并缓存在网卡内存4012的存储空间中。
当网卡401将所述需要存储的数据缓存在网卡内存4012的存储空间后,所述需要存储的数据会占用网卡内存4012的存储空间。因此,Host 300通过Write Command发送所述需要存储的数据后,需要将记录的网卡内存4012的实时可用存储空间减去所述需要存储的数据所占用的存储空间。
步骤206A:网卡401在将所述需要存储的数据写入网卡内存4012后,网卡401修改所述Write Command,将所述Write Command携带的SGL中的需要存储的数据在Host 300中的源地址,修改为网卡内存4012中存储所述需要存储的数据的地址,并将修改后的WriteCommand发送给目的硬盘的控制器。
即网卡401发送给目的硬盘的控制器的Write Command携带的SGL中包括网卡内存4012中存储所述需要存储的数据的地址,所述需要存储的数据的长度、以及所述需要存储的数据在Target 400中的目的地址等信息。
其中,目的硬盘是网卡401根据所述Write Command中所述需要存储的数据在Target 400中的目的地址确定的。网卡401能够根据所述需要存储的数据在Target 400中的目的地址,确定所述需要存储的数据在Target 400中的哪个硬盘中,并将所述需要存储的数据在Target 400中的目的地址所在的硬盘确定为目的硬盘。在Target 400中,每个硬盘都会对应一个地址段,网卡401根据所述Write Command的SGL中所述需要存储的数据在Target 400中的目的地址,确定该目的地址所在的地址段,与该地址段对应的硬盘即为目的硬盘。
可以理解,网卡401修改所述Write Command并将修改后的Write Command发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如ARM、X86或Power PC等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是NVMe over Fabric架构中的Physical controller或NVM Controller。
步骤208A:目的硬盘的控制器根据接收到的Write Command中携带的所述需要存储的数据在所述网卡内存4012中的地址,将网卡内存4012中所述需要存储的数据迁移到目的硬盘的目的地址对应的存储空间中;并发送完成存储所述需要存储的数据的响应消息,并通过网卡401返回给Host 300。
其中,网卡401与Target 400中的硬盘之间,可以基于NVMe over PCIe架构实现连接。相应的,Target 400中目的硬盘的控制器与网卡401之间,可以通过NVMe over PCIe连接和通信方式,目的硬盘的控制器可以基于NVMe over PCIe协议规定的方式,将所述需要存储的数据从网卡内存4012写入目的硬盘中。
步骤210A:Host 300根据接收到的响应消息,将记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。
由于Host 300在收到对所述需要存储的数据存储的响应消息后,所述需要存储的数据已经从网卡内存4012迁移到硬盘中。网卡内存4012将会增加相应的可用存储空间,即释放所述需要存储的数据所占用的存储空间。因此,Host 300将本地记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据占用的存储空间,能够正确记录网卡内存4012当前最新的可用存储空间。
上述步骤202A中,如果Host 300判断所述需要存储的数据占用的存储空间大于本地记录的所述网卡内存4012的实时可用存储空间,则Host 300等待预设时间后再重新执行步骤202A。Host 300等待的预设时间,可以是默认的预设时间,也可以基于具体业务的需要而设置的预设时间。在达到预设时间后,Host 300再次执行步骤202A,即再次判断所述需要存储的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间,如果所述需要存储的数据占用的存储空间小于或等于本地记录的所述网卡内存4012的实时可用存储空间,则执行步骤204A和步骤206A的步骤。Host 300在预设时间后再执行步骤202A,能够避免在网卡内存4012的可用存储空间小于所述需要存储的数据所占用的存储空间时,因反复地执行判断的步骤所带来的Host 300资源的占用和消耗。可以理解,Host 300等待的预设时间可以基于实际的情况灵活调整。
当所述数据读写命令为读命令时,如图4B所示,上述方法的详细实现过程为:
步骤200B:Host 300获取并记录网卡内存4012的实时可用存储空间;
步骤200B的具体实现过程,可以参照步骤200A来实现,不再赘述。
步骤202B:Host 300向Target 400发送读数据命令之前,先判断需要读取的数据占用的存储空间是否小于或等于记录的所述网卡内存4012的实时可用存储空间;
具体的,所述Host 300可以获取本地记录的网卡内存4012的实时可用存储空间,并判断需要读取的数据占用的存储空间是否小于或等于本地记录的所述网卡内存4012的实时可用存储空间。
步骤204B:在所述需要读取的数据占用的存储空间小于或等于记录的所述网卡内存4012的实时可用存储空间时,Host 300通过Read Command发送所述读数据命令,并将记录的网卡内存4012的实时可用存储空间减去所述需要读取的数据所占用的存储空间,得到更新后的网卡内存4012的实时可用存储空间;
其中,Host 300通过Read Command发送所述读数据命令,可以是Host 300在ReadCommand中携带SGL,该SGL包括需要读取的数据在Target 400的源地址、所述需要读取的数据的长度、以及所述需要读取的数据在Host 300中的目的地址等信息。
步骤206B:网卡401接收到Host 300发送的Read Command后,修改所述ReadCommand,将所述Read Command中携带的所述需要读取的数据在Host 300中的目的地址,修改为网卡内存4012的存储空间中缓存所述需要读取的数据的地址,并将修改后的ReadCommand发送给目的硬盘的控制器。即网卡401发送给目的硬盘控制器的Read Command携带的SGL中包括所述需要读取的数据在Target 400中的源地址、所述需要读取的数据的长度、以及网卡内存4012的存储空间中缓存所述需要读取的数据的地址等信息。目的硬盘的控制器根据接收到的所述修改后的Read Command,将所述需要读取的数据迁移到网卡内存4012的存储空间中。可选的,目的硬盘的控制器通过DMA或RDMA的方式,将所述需要读取的数据迁移到所述第一命令队列对应的网卡内存4012的存储空间中。
其中,目的硬盘是网卡401根据所述Read Command中所述需要读取的数据在Target 400中的源地址确定的。网卡401能够根据所述需要读取的数据在Target 400中的源地址,确定所述需要读取的数据在Target 400中的哪个硬盘中,并将所述需要读取的数据在Target 400中的源地址所在的硬盘确定为目的硬盘。
当网卡401将所述需要读取的数据缓存在网卡内存4012的存储空间后,所述需要读取的数据会占用网卡内存4012的存储空间。因此,Host 300通过Read Command发送所述需要读取的数据后,需要将记录的网卡内存4012的实时可用存储空间减去所述需要读取的数据所占用的存储空间。
可以理解,网卡401修改所述Read Command并将修改后的Read Command发送给目的硬盘的控制器,可以由网卡401中的一个控制模块来实现。该控制模块可以由一个物理芯片(例如ARM、X86或Power PC等处理器)实现,也可以由运行在物理芯片上的软件模块来实现,还可以是在物理芯片上通过虚拟机技术创建一个或多个虚拟的控制器。该控制模块可以是NVMe over Fabric中的Physical controller或NVM Controller。
步骤208B:目的硬盘的控制器根据接收到的Read Command将所述需要读取的数据缓存在网卡内存4012,网卡401根据所述Read Command中所述需要读取的数据要写入Host300中的目的地址,将缓存在网卡内存4012中的所述需要读取的数据发送给Host 300。
可选的,网卡401通过RDMA的方式,将缓存的所述需要读取的数据发送给Host300。
可选的,网卡401在将缓存的所述需要读取的数据发送给Host 300后,发送完成读取的响应消息给Host 300。
步骤210B:Host 300根据接收到网卡401发送的完成读取的响应消息或接收到网卡401发送的所述需要读取的数据时,将记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。
具体的,Host 300根据接收到网卡401发送的完成读取的响应消息或接收到网卡401发送的所述需要读取的数据时,将本地记录的网卡内存4012的实时可用存储空间加上所述需要存储的数据所占用的存储空间。
由于Host 300在收到完成读取的响应消息或所述需要读取的数据后,所述需要存储的数据已经从网卡内存4012迁移到Host 300中。网卡内存4012将会增加相应的可用存储空间,即释放所述需要读取的数据所占用的存储空间。因此,Host 300将本地记录的网卡内存4012的实时可用存储空间加上所述需要读取的数据占用的存储空间,能够正确记录网卡内存4012当前最新的可用存储空间。
上述步骤202B中,如果Host 300判断所述需要读取的数据占用的存储空间大于本地记录的所述网卡内存4012的实时可用存储空间,则Host 300等待预设时间后再重新执行步骤202B。Host 300等待的预设时间,可以是默认的预设时间,也可以基于具体业务的需要而设置的预设时间。在达到预设时间后,Host 300再次执行步骤202B,即再次判断所述需要读取的数据占用的存储空间是否大于本地记录的所述网卡内存4012的实时可用存储空间,如果所述需要读取的数据占用的存储空间小于或等于本地记录的所述网卡内存4012的实时可用存储空间,则执行步骤204B和步骤206B的步骤。Host 300在预设时间后再执行步骤202B,能够避免在网卡内存4012的可用存储空间小于所述需要存储的数据所占用的存储空间时,因反复地执行判断的步骤所带来的Host 300资源的占用和消耗。可以理解,Host 300等待的预设时间可以基于实际的情况灵活调整。
上述过程中,可以是Host 300中的CPU301执行步骤200A-步骤204A和步骤210A的过程,或CPU301执行步骤200B-步骤204B和步骤210B的过程,也可以是Host 300中的网卡303执行步骤200A-步骤204A和步骤210A的过程,或网卡303执行步骤200B-步骤204B和步骤210B的过程,还可以是Host 300中的某一芯片或逻辑部件,来执行步骤步骤200A-步骤204A和步骤210A的过程,或Host 300中的某一芯片或逻辑部件执行步骤200B-步骤204B和步骤210B的过程,例如可以是FPGA芯片等执行步骤200A-步骤204A和步骤210A的过程,或执行步骤200B-步骤204B和步骤210B的过程等。
在实际实现中,上述步骤200A-步骤204A和步骤210A,或步骤200B-步骤204B和步骤210B也可以由CPU301、网卡303、Host 300中的某一芯片或逻辑部件中的至少其中一个来实现。例如,CPU 301执行上述步骤200A和步骤202A,网卡303执行上述步骤204A和步骤210A;或者CPU 301执行上述步骤200B和步骤202B,FPGA执行上述步骤204B和步骤210B。本发明实施例不限定具体的执行步骤200A-步骤204A和步骤210A的过程,或步骤200B-步骤204B和步骤210B的过程中执行主体的实现方式。
当上述Host 300是通过虚拟机实现时,上述CPU301、网卡303分别对应虚拟机中的CPU和网卡,虚拟机中的CPU和网卡通过承载其虚拟功能的物理CPU和物理网卡来实现。其实现方式与上述实现方式类似,不再赘述。
上述步骤200中,Host 300记录网卡内存4012的实时可用存储空间的位置可以有多种实现方式。例如,可以是记录在Host 300中专门的存储空间中,例如专门的芯片用于存储网卡内存4012的实时可用存储空间;也可以是存储在Host 300中已有的存储部件中,例如CPU 301的缓存中,或网卡303的缓存中,也可以FPGA中的一个存储空间中。
具体的,当CPU 301执行步骤200A-步骤202A时,CPU 301可以将获取到的网卡内存4012的实时可用存储空间存储在CPU 301的一个缓存中,也可以存储在Host 300的其它存储空间中,还可以存储在Host 300中新增的一个存储芯片中。当网卡303或FPGA执行步骤204A-步骤206A时,网卡303或FPGA可以从CPU 301存储网卡内存4012的实时可用存储空间的位置对网卡内存4012的实时可用存储空间进行控制,例如增加或删除等操作。可以理解,当步骤200A-步骤206A或步骤200B-步骤206B的执行主体是其它组合方式时,其实现方式与上述举例的实现方式类似,不再赘述。
本发明实施例中,Host 300记录网卡内存4012的实时可用存储空间的方式,也可以有多种实现方式,例如,以一个表格的形式记录网卡内存4012的实时可用存储空间,或一个变量的形式记录网卡内存4012的实时可用存储空间等等。本发明实施例不限定记录网卡内存4012的实时可用存储空间的具体形式。
图5为本发明实施例一种NVMe over Fabric架构中控制设备与存储设备之间数据读写命令的控制方法的流程示意图。所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备将需要读写的数据存储在所述存储单元中,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据。如图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是NVMeover Fabric架构中的控制设备,如图6所示,所述控制设备600包括处理器601、网卡602和总线603,处理器601和网卡602通过总线603相互连接。总线603可以是外设部件互连标准(英文:peripheral component interconnect,简称PCI)总线或扩展工业标准结构(英文:extended industry standard architecture,简称EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
所述控制设备600与NVMe over Fabric架构中的存储设备之间进行数据传输,所述存储设备包括远端数据处理单元、缓存单元和存储单元,所述控制设备600需要读写的数据缓存在所述存储设备的缓存单元中,并存储在所述存储设备的存储单元;其中,所述处理器601用于执行下述步骤:
获取所述缓存单元的可用存储空间;
判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;
在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。
上述控制设备600的实现方式中,所述控制设备600在所述缓存单元的可用存储空间能够缓存所述第一数据读写命令所要传输的数据时,发送所述第一数据读写命令给所述存储设备;在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。这样,能够避免所述缓存单元的可用存储空间不足而缓存所述第一数据读写命令所带来的处理机制复杂的问题。
具体的,所述控制设备600的实现方式,可以参照上述图2中主机Host 300的实现方式,以及上述图3所示的流程中Host 300的实现方式来实现,不再赘述。所述控制设备600的实现方式,也可以参照上述图2中主机Host 300的实现方式,以及上述图4(A)和图4(B)所示的流程中Host 300的实现方式来实现,不再赘述。
需要说明的是,图3,图4(A)和图4(B)中以网卡作为数据处理单元、缓存单元作为缓存单元来描述的。对于以FPGA芯片或CPU等作为数据处理单元,FPGA芯片中的存储单元或CPU的内存作为缓存单元的实现方式,可以参照上述网卡和网卡内存的实现方式来实现。
图7为本发明实施例一种实现数据读写命令控制的系统700的结构示意图。所述系统700包括NVMe over Fabric架构中控制设备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中主机Host 300与Target 400组成的系统的实现方式,以及上述图3所示的流程中Host 300与Target 400的实现方式来实现,不再赘述。所述实现数据读写命令控制的系统700的实现方式,也可以参照上述图2中主机Host 300与Target 400组成的系统的实现方式,以及上述图4(A)和图4(B)所示的流程中Host 300与Target 400的实现方式来实现,不再赘述。
需要说明的是,图3,图4(A)和图4(B)中以网卡作为数据处理单元、网卡内存作为缓存单元来描述的。对于以FPGA芯片或CPU等作为数据处理单元,FPGA芯片中的存储单元或CPU的内存作为缓存单元的实现方式,可以参照上述网卡和网卡内存的实现方式来实现。
结合本发明公开内容所描述的方法或步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(英文:Random Access Memory,RAM)、闪存、只读存储器(英文:ReadOnly Memory,ROM)、可擦除可编程只读存储器(英文:Erasable Programmable ROM,EPROM)、电可擦可编程只读存储器(英文:Electrically EPROM,EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(英文:CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:ROM,Read-OnlyMemory)、随机存取存储器(英文:RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (12)

1.一种基于Fabric的非易失性高速传输总线NVMe(NVMe over Fabric),架构中控制设备与存储设备之间数据读写命令的控制方法,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备将需要写的数据存储在所述存储单元中或从所述存储单元中读取数据,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其特征在于,所述方法包括:
所述控制设备获取所述缓存单元的可用存储空间;其中,所述缓存单元的可用存储空间是所述控制设备记录的所述缓存单元的实时可用存储空间;
所述控制设备判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;
在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述控制设备暂停发送所述第一数据读写命令达到预设时间后,所述控制设备再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
3.根据权利要求1-2所述的任一方法,其特征在于,所述数据处理单元与所述存储单元之间通过基于快捷外围部件互连标准PCIe的NVMe(NVMe over PCIe),架构实现连接。
4.根据权利要求1-2所述的任一方法,其特征在于,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是NVMe over Fabric架构中的物理控制器Physical controller或非易失性存储控制器NVM controller。
5.一种控制设备,所述控制设备是基于Fabric的非易失性高速传输总线NVMe(NVMeover Fabric),架构中的控制设备,所述控制设备包括处理器、网卡和总线,所述处理器和网卡通过总线连接,所述控制设备与NVMe over Fabric架构中的存储设备之间进行数据传输,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备将需要写的数据缓存在所述存储设备的缓存单元中,并存储在所述存储设备的存储单元,或所述控制设备从所述存储设备的存储单元中读取数据并缓存在所述存储设备的缓存单元中;其特征在于,所述处理器用于执行下述步骤:
获取所述缓存单元的可用存储空间;其中,所述缓存单元的可用存储空间是所述控制设备记录的所述缓存单元的实时可用存储空间;
判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;
在所述第一数据占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;
在所述第一数据占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令。
6.根据权利要求5所述的控制设备,其特征在于,所述处理器还用于执行下述步骤:
在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;
在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
7.根据权利要求6所述的控制设备,其特征在于,所述处理器还用于执行下述步骤:
暂停发送所述第一数据读写命令达到预设时间后,再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
8.一种实现数据读写命令控制的系统,所述系统包括基于Fabric的非易失性高速传输总线NVMe(NVMe over Fabric),架构中控制设备和存储设备,所述存储设备包括数据处理单元、缓存单元和存储单元,所述控制设备需要写的数据存储在所述存储单元中或从所述存储单元中读取数据,所述数据处理单元用于接收所述控制设备发送的数据读写命令,所述缓存单元用于缓存所述读写命令所需要传输的数据;其特征在于:
所述控制设备,用于获取所述缓存单元的可用存储空间,判断第一数据读写命令所要传输的第一数据占用的存储空间是否小于或等于所述缓存单元的可用存储空间;其中,所述缓存单元的可用存储空间是所述控制设备记录的所述缓存单元的实时可用存储空间;
所述控制设备,还用于在所述第一数据所占用的存储空间小于或等于所述缓存单元的可用存储空间时,发送所述第一数据读写命令给所述存储设备;在所述第一数据所占用的存储空间大于所述缓存单元的可用存储空间时,暂停发送所述第一数据读写命令;
所述数据处理单元,用于接收所述控制设备发送的所述第一数据读写命令,并将所述第一数据读写命令所要传输的数据缓存在所述缓存单元中。
9.根据权利要求8所述的系统,其特征在于,所述控制设备还用于在发送所述第一数据读写命令后,将本地记录的所述缓存单元的实时可用存储空间减去所述第一数据占用的存储空间;在接收到所述数据处理单元发送的完成所述第一数据读写命令的响应消息后,将本地记录的所述缓存单元的实时可用存储空间加上所述第一数据占用的存储空间。
10.根据权利要求9所述的系统,其特征在于,
所述控制设备还用于在暂停发送所述第一数据读写命令达到预设时间后,再次判断所述第一数据占用的存储空间是否小于或等于本地记录的所述缓存单元的实时可用存储空间,并在所述第一数据所占用的存储空间小于或等于本地记录的所述缓存单元的实时可用存储空间时,发送所述第一数据读写命令给所述存储设备。
11.根据权利要求8-10所述的任一系统,其特征在于,
所述数据处理单元与所述存储单元之间通过基于快捷外围部件互连标准PCIe的NVMe(NVMe over PCIe),架构实现连接。
12.根据权利要求8-11所述的任一系统,其特征在于,所述数据处理单元中包括控制器,所述控制器用于控制所述缓存单元中缓存的数据与所述存储单元之间的传输,所述控制器是NVMe over Fabric架构中的物理控制器Physical controller或非易失性存储控制器NVM controller。
CN201680003062.5A 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统 Active CN107077426B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910604485.8A CN110413542B (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2016/108601 WO2018102969A1 (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201910604485.8A Division CN110413542B (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统

Publications (2)

Publication Number Publication Date
CN107077426A CN107077426A (zh) 2017-08-18
CN107077426B true CN107077426B (zh) 2019-08-02

Family

ID=59623710

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201910604485.8A Active CN110413542B (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统
CN201680003062.5A Active CN107077426B (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910604485.8A Active CN110413542B (zh) 2016-12-05 2016-12-05 NVMe over Fabric架构中数据读写命令的控制方法、设备和系统

Country Status (4)

Country Link
US (1) US10838665B2 (zh)
EP (1) EP3352086B1 (zh)
CN (2) CN110413542B (zh)
WO (1) WO2018102969A1 (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877669B1 (en) * 2011-06-30 2020-12-29 Amazon Technologies, Inc. System and method for providing a committed throughput level in a data store
CN109791522B (zh) * 2017-09-05 2021-01-15 华为技术有限公司 数据迁移的方法、系统及智能网卡
CN109976661B (zh) 2017-12-27 2020-08-14 华为技术有限公司 基于nof的读取控制方法、装置及系统
WO2020000485A1 (zh) 2018-06-30 2020-01-02 华为技术有限公司 一种基于NVMe的数据写入方法、装置及系统
EP3792776B1 (en) 2018-06-30 2022-10-26 Huawei Technologies Co., Ltd. Nvme-based data reading method, apparatus and system
CN109117386B (zh) * 2018-07-12 2021-03-09 中国科学院计算技术研究所 一种网络远程读写二级存储的系统及方法
US11074007B2 (en) 2018-08-08 2021-07-27 Micron Technology, Inc. Optimize information requests to a memory system
US10969994B2 (en) * 2018-08-08 2021-04-06 Micron Technology, Inc. Throttle response signals from a memory system
CN109885432B (zh) * 2018-11-28 2022-06-03 深圳忆联信息系统有限公司 NVMe前端测试方法、装置、计算机设备及存储介质
CN111642137A (zh) * 2018-12-14 2020-09-08 华为技术有限公司 快速发送写数据准备完成消息的方法、设备和系统
CN110058819A (zh) * 2019-04-19 2019-07-26 深圳忆联信息系统有限公司 基于可变缓存管理机制的主机命令处理方法和装置
CN112579311B (zh) * 2019-09-30 2023-11-10 华为技术有限公司 访问固态硬盘的方法及存储设备
CN112732166B (zh) * 2019-10-28 2024-06-18 华为技术有限公司 访问固态硬盘的方法及装置
CN112749111A (zh) * 2019-10-31 2021-05-04 华为技术有限公司 访问数据的方法、计算设备和计算机系统
US11444881B2 (en) 2019-11-19 2022-09-13 Oracle International Corporation System and method for supporting use of forward and backward congestion notifications in a private fabric in a high performance computing environment
CN113778319A (zh) * 2020-06-09 2021-12-10 华为技术有限公司 网卡的数据处理方法以及网卡
CN113778320A (zh) * 2020-06-09 2021-12-10 华为技术有限公司 网卡以及网卡处理数据的方法
EP4152163A4 (en) * 2020-06-11 2023-11-15 Huawei Technologies Co., Ltd. METHOD FOR PROCESSING METADATA IN A STORAGE DEVICE AND ASSOCIATED DEVICE
US11513977B2 (en) 2020-06-17 2022-11-29 Samsung Electronics Co., Ltd. Pipelined data processing in fabric-enabled computational storage
EP4122186A1 (en) * 2020-07-24 2023-01-25 Huawei Technologies Co., Ltd. Devices, methods, and system for reducing latency in remote direct memory access system
US20210014324A1 (en) * 2020-09-24 2021-01-14 Intel Corporation Cache and memory content management
TW202219780A (zh) * 2020-11-09 2022-05-16 美商萊特美特股份有限公司 用於傳輸資料的高效緩衝技術
JP2022076620A (ja) 2020-11-10 2022-05-20 キオクシア株式会社 メモリシステムおよび制御方法
KR20220067872A (ko) * 2020-11-18 2022-05-25 에스케이하이닉스 주식회사 컨트롤러 및 컨트롤러의 동작방법
CN113986790B (zh) * 2021-02-25 2022-11-01 楚赟精工科技(上海)有限公司 数据采集高速处理系统及方法
CN113485643B (zh) * 2021-07-01 2023-10-31 成都忆芯科技有限公司 用于数据存取的方法及数据写入的控制器
CN113722248B (zh) * 2021-07-28 2023-08-22 湖南国科微电子股份有限公司 命令处理方法及命令处理装置
CN115174409A (zh) * 2022-06-30 2022-10-11 无锡芯光互连技术研究院有限公司 一种基于cxl协议的网络连接方法及系统
CN117631958A (zh) * 2022-08-19 2024-03-01 成都华为技术有限公司 一种dpu的存储空间扩展方法、装置及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102075436A (zh) * 2011-02-10 2011-05-25 成都市华为赛门铁克科技有限公司 以太网络及其数据传输方法和装置
CN105718391A (zh) * 2014-12-20 2016-06-29 英特尔公司 事务性缓冲式存储器中的提早识别

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007206799A (ja) * 2006-01-31 2007-08-16 Toshiba Corp データ転送装置、情報記録再生装置およびデータ転送方法
US7594060B2 (en) 2006-08-23 2009-09-22 Sun Microsystems, Inc. Data buffer allocation in a non-blocking data services platform using input/output switching fabric
CN100527100C (zh) 2007-08-10 2009-08-12 杭州华三通信技术有限公司 通过缓存写数据的方法和缓存系统及装置
JP2009181314A (ja) * 2008-01-30 2009-08-13 Toshiba Corp 情報記録装置およびその制御方法
CN101387943B (zh) * 2008-09-08 2011-05-25 创新科存储技术(深圳)有限公司 一种存储设备以及缓存数据的方法
CN102103545B (zh) 2009-12-16 2013-03-27 中兴通讯股份有限公司 一种数据缓存的方法、装置及系统
JP5454224B2 (ja) 2010-02-25 2014-03-26 ソニー株式会社 記憶装置および記憶システム
US9323659B2 (en) * 2011-08-12 2016-04-26 Sandisk Enterprise Ip Llc Cache management including solid state device virtualization
US9026735B1 (en) 2011-11-18 2015-05-05 Marvell Israel (M.I.S.L.) Ltd. Method and apparatus for automated division of a multi-buffer
US8554963B1 (en) * 2012-03-23 2013-10-08 DSSD, Inc. Storage system with multicast DMA and unified address space
US8578106B1 (en) 2012-11-09 2013-11-05 DSSD, Inc. Method and system for queue demultiplexor with size grouping
US9408050B2 (en) * 2013-01-31 2016-08-02 Hewlett Packard Enterprise Development Lp Reducing bandwidth usage of a mobile client
CN103135957B (zh) 2013-02-01 2017-07-25 北京邮电大学 使用、管理多队列数据的共用缓存空间的方法和系统
US9785356B2 (en) * 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
US9785545B2 (en) * 2013-07-15 2017-10-10 Cnex Labs, Inc. Method and apparatus for providing dual memory access to non-volatile memory
WO2015138245A1 (en) * 2014-03-08 2015-09-17 Datawise Systems, Inc. Methods and systems for converged networking and storage
US20170228173A9 (en) * 2014-05-02 2017-08-10 Cavium, Inc. Systems and methods for enabling local caching for remote storage devices over a network via nvme controller
US9501245B2 (en) * 2014-05-02 2016-11-22 Cavium, Inc. Systems and methods for NVMe controller virtualization to support multiple virtual machines running on a host
US9507722B2 (en) * 2014-06-05 2016-11-29 Sandisk Technologies Llc Methods, systems, and computer readable media for solid state drive caching across a host bus
CN104536701B (zh) * 2014-12-23 2018-02-06 记忆科技(深圳)有限公司 一种nvme协议多命令队列的实现方法及系统
CN106095694B (zh) * 2016-06-15 2019-07-09 华为技术有限公司 数据存储方法及装置
JP2018073040A (ja) * 2016-10-27 2018-05-10 東芝メモリ株式会社 メモリシステム
US10521121B2 (en) * 2016-12-29 2019-12-31 Intel Corporation Apparatus, system and method for throttling a rate at which commands are accepted in a storage device

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102075436A (zh) * 2011-02-10 2011-05-25 成都市华为赛门铁克科技有限公司 以太网络及其数据传输方法和装置
CN105718391A (zh) * 2014-12-20 2016-06-29 英特尔公司 事务性缓冲式存储器中的提早识别

Also Published As

Publication number Publication date
CN110413542A (zh) 2019-11-05
EP3352086A4 (en) 2018-08-22
CN107077426A (zh) 2017-08-18
US20180157445A1 (en) 2018-06-07
EP3352086B1 (en) 2020-11-11
EP3352086A1 (en) 2018-07-25
WO2018102969A1 (zh) 2018-06-14
CN110413542B (zh) 2023-08-22
US10838665B2 (en) 2020-11-17

Similar Documents

Publication Publication Date Title
CN107077426B (zh) NVMe over Fabric架构中数据读写命令的控制方法、设备和系统
CN107003943B (zh) NVMe over Fabric架构中数据读写命令的控制方法、存储设备和系统
JP7120943B2 (ja) Fpgaベースの加速のための新たなssd基本構造
CN108369530B (zh) 非易失性高速传输总线架构中数据读写命令的控制方法、设备和系统
CN105068953B (zh) 用于对等高速外围组件互联存储传输的系统和方法
CN104111907B (zh) 一种访问NVMe存储设备的方法和NVMe存储设备
US8639898B2 (en) Storage apparatus and data copy method
JP4477906B2 (ja) ストレージシステム
JP6211579B2 (ja) テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法
CN108701004A (zh) 一种数据处理的系统、方法及对应装置
CN109164981B (zh) 磁盘管理方法、装置、存储介质和设备
KR102403653B1 (ko) Fpga 기반 가속화를 위한 새로운 ssd 구조
CN118210449A (zh) 缓存同步方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant