CN109976661B - 基于nof的读取控制方法、装置及*** - Google Patents
基于nof的读取控制方法、装置及*** Download PDFInfo
- Publication number
- CN109976661B CN109976661B CN201711444963.0A CN201711444963A CN109976661B CN 109976661 B CN109976661 B CN 109976661B CN 201711444963 A CN201711444963 A CN 201711444963A CN 109976661 B CN109976661 B CN 109976661B
- Authority
- CN
- China
- Prior art keywords
- communication link
- hard disk
- congestion
- read
- nvme hard
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/11—Identifying congestion
- H04L47/115—Identifying congestion using a dedicated packet
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/26—Flow control; Congestion control using explicit feedback to the source, e.g. choke packets
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/622—Queue service order
- H04L47/623—Weighted service order
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/625—Queue scheduling characterised by scheduling criteria for service slots or service orders
- H04L47/6255—Queue scheduling characterised by scheduling criteria for service slots or service orders queue load conditions, e.g. longest queue first
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种基于NOF的读取控制方法、装置及***,属于网络化存储领域。所述基于NOF的读取控制方法,所述方法包括:NOF引擎通过通信链路接收主机发送的读请求;所述NOF引擎根据所述读请求向NVMe硬盘发送至少一个读命令;所述NOF引擎在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;所述NOF引擎向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。本申请在发生网络拥塞的场景下,NVMe硬盘能够对已经获取且尚未处理的读命令暂停处理,解决了这部分读命令的数据在读取后,因为网络拥塞而被直接丢弃,导致整个读取过程失败的问题,达到了NVMe硬盘暂停对这部分读命令处理后,能够避免对NOF引擎与NVMe硬盘之间的传输带宽的无效占用,减少浪费的效果。
Description
技术领域
本申请涉及网络化存储领域,特别涉及一种基于网络连接的非易失性存储(Non-Volatile Memory express Over Fabric,NOF)的读取控制方法、装置及***。
背景技术
非易失性存储(Non-Volatile Memory express,NVMe)总线协议组织在2016年6月,发布了NOF1.0协议。NOF协议赋予NVMe设备接入网络的通信能力。
典型的基于NOF协议的应用模型包括:主机(Host)和控制器(Controller),控制器包括NOF引擎和与其相连的多个NVMe硬盘。其中,主机和控制器之间通过网络相连,NOF引擎和NVMe硬盘之间通过PCIe总线相连。以主机从控制器读取数据为例,主机通过网络向NOF引擎发送一个或多个读请求。NOF引擎将一个或多个读请求转发给NVMe硬盘,NVMe硬盘将每个读请求对应的数据反馈给NOF引擎,NOF引擎再将数据通过网络发送给主机。
但是由于主机和控制器之间的网络可能会发生拥塞,NOF引擎通过网络向主机发送数据时,主机可能会因为网络拥塞而无法正常接收数据,导致读请求响应失败。目前尚未有技术来解决NOF应用场景下的网络拥塞问题。
发明内容
本申请实施例提供了一种基于NOF的读取控制方法、装置及***,可以用于解决NOF引用场景下的网络拥塞问题。所述技术方案如下:
根据本申请的第一方面,提供了一种基于NOF的读取控制方法,所述方法包括:
NOF引擎通过通信链路接收主机发送的读请求;所述NOF引擎根据所述读请求向NVMe硬盘发送至少一个读命令;所述NOF引擎在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;所述NOF引擎向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。对应地,NVMe硬盘接收NOF引擎发送的至少一个读命令,所述读命令是所述NOF引擎根据主机通过通信链路发送的读请求产生的;所述NVMe硬盘接收NOF引擎发送的拥塞标记,所述拥塞标记是所述NOF引擎在所述通信链路发送拥塞时发送的;所述NVMe硬盘根据所述拥塞标记,暂停处理所述通信链路对应的所述读命令。
由于在发生网络拥塞的场景下,NVMe硬盘能够对已经获取且尚未处理的读命令暂停处理,解决了这部分读命令的数据在读取后,因为网络拥塞而被直接丢弃,导致整个读取过程失败的问题,达到了NVMe硬盘暂停对这部分读命令处理后,能够避免对NOF引擎与NVMe硬盘之间的传输带宽(PCI带宽)的无效占用,减少浪费的效果。
在第一方面的第一种可能的实现方式中,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的提交队列的条目(Submission Queue Entry,SQE)命令,所述SQE命令包括读命令和/或写命令;所述NVMe硬盘向所述NOF引擎发送命令读取请求,所述命令读取请求用于读取与所述通信链路对应的提交队列中的SQE命令;所述NOF引擎在接收到所述NVMe硬盘对所述提交队列的命令读取请求时,向所述NVMe硬盘发送携带有所述拥塞标记的SQE命令。所述NVMe硬盘接收所述NOF引擎发送的携带有所述拥塞标记的SQE命令。
本实现方式通过利用提交队列中的SQE命令来传递拥塞标记,使得在尽量不增加额外信令的前提下,实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。由于提交队列中有很大概率存在NVMe硬盘还未读取的SQE命令,而利用SQE命令中的保留域来传递拥塞标记,几乎没有增加额外信令和数据量,从而减少对NOF引擎与NVMe硬盘之间的传输带宽的占用。
在第一方面的第二种可能的实现方式中,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;所述NOF引擎向所述NVMe硬盘发送指向第一自定义地址的寄存器写命令,所述第一自定义地址是用于存储所述拥塞标记的地址,所述寄存器写命令携带有所述提交队列的标识和所述拥塞标记。所述NVMe硬盘接收所述NOF引擎发送的指向第一自定义地址的寄存器写命令,所述第一自定义地址是用于存储所述拥塞标记的地址,所述寄存器写命令携带有与所述通信链路对应的提交队列的标识和所述拥塞标记;所述NVMe硬盘根据所述寄存器写命令对所述第一自定义地址进行写入操作。
本实现方式通过利用指向第一自定义地址的寄存器写命令来传递拥塞标记,使得在不改变SQE命令的正常读写机制时,也能够实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。
在第一方面的第三种可能的实现方式中,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;所述NOF引擎向所述NVMe硬盘发送具有自定义内容的管理命令,所述自定义内容携带有所述提交队列的标识和所述拥塞标记。所述NVMe硬盘接收所述NOF引擎发送的具有第一自定义内容的管理命令,所述第一自定义内容携带有提交队列的标识和所述拥塞标记,所述提交队列是与所述通信链路对应的队列。
本实现方式通过利用具有第一自定义内容的管理命令来传递拥塞标记,使得利用NVMe协议提供的管理命令,即可实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。
在第一方面的第四种可能的实现方式中,所述NVMe硬盘根据所述拥塞标记,暂停处理所述通信链路对应的读命令,包括:
所述NVMe硬盘根据所述拥塞标记执行如下操作中的至少一种操作:
暂停对所述提交队列的命令读取请求;
将从所述提交队列已经取回且尚未完成的读命令设置为挂起状态;
将所述提交队列对应的调度权重降低至第一权重。
本实现方式将提交队列对应的读请求进行暂停处理,能够节省NVMe硬盘的处理资源,以及NOF引擎和NVMe硬盘之间的传输带宽。
结合第一方面、第一方面的第一种可能的实现方式、第一方面的第二种可能的实现方式、第一方面的第三种可能的实现方式中的任意一种实现方式,在第一方面的第五种可能的实现方式中,所述向所述NVMe硬盘发送添加有所述拥塞标记的SQE命令之后,还包括:
所述NOF引擎通过所述通信链路向所述主机间隔发送空闲帧;所述NOF引擎在接收到所述空闲帧的确认信号时,生成所述通信链路对应的拥塞解除标记;所述NOF引擎向所述NVMe硬盘发送所述拥塞解除标记,所述拥塞解除标记用于指示所述NVMe硬盘恢复对所述通信链路对应的读命令的处理。所述NVMe硬盘接收所述NOF引擎发送的拥塞解除标记,所述拥塞解除标记是所述NOF引擎在与主机之间的通信链路拥塞解除时发送的;所述NVMe硬盘根据所述拥塞解除标记,恢复对所述通信链路对应的读命令的处理。
本实现方式通过NOF引擎在与主机之间的通信链路发生拥塞时,向NVMe硬盘发送拥塞标记,由NVMe硬盘根据拥塞标记暂停处理该通信链路对应的读命令。使得在发生网络拥塞的场景下,NVMe硬盘对已经获取且尚未处理的读命令暂停处理,解决了这部分读命令的数据在读取后,因为网络拥塞而无法顺利发送给主机,导致整个读取过程失败的问题,达到了在网络拥塞场景下减少无效数据的发送,从而避免网络更加拥塞的效果。
结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;所述NOF引擎在接收到所述NVMe硬盘对所述提交队列的命令读取请求时,向所述NVMe硬盘发送携带有所述拥塞解除标记的SQE命令。所述NVMe硬盘向所述NOF引擎发送命令读取请求,所述命令读取请求用于读取与所述通信链路对应的提交队列中的SQE命令;所述NVMe硬盘接收所述NOF引擎发送的携带有所述拥塞解除标记的SQE命令。
本实现方式通过利用提交队列中的SQE命令来传递拥塞解除标记,使得在尽量不增加额外信令的前提下,实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。由于提交队列中有很大概率存在NVMe硬盘还未读取的SQE命令,而利用SQE命令中的保留域来传递拥塞标记,几乎没有增加额外信令和数据量。
结合第一方面的第五种可能的实现方式,在第一方面的第七种可能的实现方式中,
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;所述NOF引擎向所述NVMe硬盘发送指向第二自定义地址的寄存器写命令,所述第二自定义地址是用于存储所述拥塞解除标记的地址,所述寄存器写命令携带有所述提交队列的标识和所述拥塞解除标记。所述NVMe硬盘接收所述NOF引擎发送的指向第二自定义地址的寄存器写命令,所述第二自定义地址是用于存储所述拥塞解除标记的地址,所述寄存器写命令携带有与所述通信链路对应提交队列的标识和所述拥塞解除标记;所述NVMe硬盘根据所述寄存器写命令对所述第二自定义地址进行写入操作。
本实现方式通过利用指向第二自定义地址的寄存器写命令来传递拥塞解除标记,使得在不改变SQE命令的正常读写机制时,实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘恢复对该通信链路对应的读命令进行处理。
结合第一方面的第五种可能的实现方式,在第一方面的第八种可能的实现方式中,
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;所述NOF引擎向所述NVMe硬盘发送具有第二自定义内容的管理命令,所述第二自定义内容携带有所述提交队列的标识和所述拥塞解除标记。所述NVMe硬盘接收所述NOF引擎发送的具有第二自定义内容的管理命令,所述第二自定义内容携带有与所述通信链路对应提交队列的标识和所述拥塞解除标记。
本实现方式通过利用具有第二自定义内容的管理命令来传递拥塞解除标记,使得利用NVMe协议提供的管理命令,即可实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘恢复对该通信链路对应的读命令进行处理。
结合第一方面的第五种可能的实现方式,在第一方面的第九种可能的实现方式中,所述NVMe硬盘根据所述拥塞解除标记执行如下操作中的至少一种操作:
恢复对所述提交队列的命令读取请求;
将从所述提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态;
将所述提交队列对应的调度权重提高至第二权重。
本实现方式通过NOF引擎在通信链路的拥塞接触时,向NVMe硬盘发送拥塞解除标记,由NVMe硬盘根据拥塞解除标记恢复处理该通信链路对应的读命令。使得在网络拥塞已经解除的场景下,NVMe硬盘对已经获取且尚未处理的读命令恢复处理,保证了主机在读取数据时的成功率。
根据本申请的第二方面,提供了一种基于NOF的读取控制方法,应用于NOF引擎中,NOF引擎中设置有与通信链路对应的数据缓存,所述方法包括:
所述NOF引擎通过所述通信链路接收主机发送的读请求,所述读请求用于请求读取第一数据量的数据,所述第一数据量超过所述通信链路对应的数据缓存大小;
所述NOF引擎将所述读请求拆分为K个读命令,所述读命令用于请求读取第二数据量的数据,所述第二数据量小于所述第一数据量;
所述NOF引擎向NVMe硬盘发送m个所述读命令,m≤K,m与所述第二数据量的乘积不大于所述通信链路对应的数据缓存大小;
所述NOF引擎在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令。
本实现方式可以在NOF引擎侧有数据缓存的情况下,由NOF引擎控制向NVMe硬盘发送的读命令的数量,使得NVMe硬盘正在处理的读命令的读取数据量不超过数据缓存的缓存大小。即便通信链路发生了网络拥塞,NOF引擎暂停向NVMe硬盘继续下发读命令即可解决拥塞问题,不需要NVMe硬盘感知拥塞过程,减少NOF引擎和NVMe硬盘之间的信令交互以及传输带宽的占用。
另外,由于本实现方式是为每个通信链路设置各自对应的数据缓存,而不是多个通信链路共用同一个数据缓存,因此即便某一个通信链路发生了网络拥塞,导致该通信链路对应的数据缓存被占用,也不会出现将NOF引擎中所有的数据缓存都被该通信链路对应的读取数据所占用,导致其它通信链路的读取过程也收到影响的问题。达到了每个通信链路都分别独立,即便一条或多条通信链路发生拥塞,也不会影响剩余通信链路的正常收发过程的效果。
在第二方面的第一种可能的实现方式中,所述NOF引擎在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令之后,还包括:
所述NOF引擎接收所述NVMe硬盘根据所述m个读命令读取的数据;
所述NOF引擎将所述数据存储在所述通信链路对应的所述数据缓存中;
所述NOF引擎在所述通信链路解除拥塞时,将所述数据缓存中的所述数据通过所述通信链路发送至所述主机。
在第二方面的第二种可能的实现方式中,所述NOF引擎在所述通信链路解除拥塞时,将所述数据缓存中的所述数据通过所述通信链路发送至所述主机之后,还包括:
所述NOF引擎继续向所述NVMe硬盘发送n个所述读命令,n≤K-m,n与所述第二数据量的乘积不大于所述数据缓存的缓存大小。
根据本申请的第三方面,提供了一种基于NOF的读取控制装置,所述装置包括用于执行上述第一方面及第一方面的各种可选实现方式中任一实现方式中,由NOF引擎实现的读取控制方法的单元或手段。
根据本申请的第四方面,提供了一种基于NOF的读取控制装置,所述装置包括用于执行上述第一方面及第一方面的各种可选实现方式中任一实现方式中,由NVMe硬盘实现的读取控制方法的单元或手段。
根据本申请的第五方面,提供了一种基于NOF的读取控制装置,所述装置设置有为通信链路对应的数据缓存,所述装置包括用于执行上述第二方面及第二方面的各种可选实现方式的任一实现方式中,由NOF引擎实现的读取控制方法的单元或手段。
根据本申请的第六方面,提供了一种NOF引擎,所述NOF引擎包括:处理器和存储器,所述存储器存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如上述第一方面及第一方面的各种可选实现方式的任一实现方式中,由NOF引擎实现的读取控制方法。
根据本申请的第七方面,提供了一种NVMe硬盘,所述NVMe硬盘包括:控制器和存储器,所述存储器存储有至少一个指令,所述至少一个指令被所述控制器执行以实现如上述第一方面及第一方面的各种可选实现方式的任一实现方式中,由NVMe硬盘实现的读取控制方法。
根据本申请的第八方面,提供了一种NOF引擎,所述NOF引擎包括:处理器和存储器,所述存储器存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如上述第二方面及第二方面的各种可选实现方式的任一实现方式中,由NOF引擎实现的读取控制方法。
根据本申请的第九方面,提供了一种计算机可读存储介质,所述存储介质存储有至少一个指令,所述至少一个指令被执行以实现如上述第一方面及第一方面的各种可选实现方式的任一实现方式中,由NOF引擎实现的读取控制方法。
根据本申请的第十方面,提供了一种计算机可读存储介质,所述存储介质存储有至少一个指令,所述至少一个指令被执行以实现如上述第一方面及第一方面的各种可选实现方式的任一实现方式中,由NVMe硬盘实现的读取控制方法。
根据本申请的第十一方面,提供了一种计算机可读存储介质,所述存储介质存储有至少一个指令,所述至少一个指令被执行以实现如上述第二方面及第二方面的各种可选实现方式的任一实现方式中,由NOF引擎实现的读取控制方法。
附图说明
图1是本申请一个示例性实施例提供的NOF存储***100的结构示意图;
图2是本申请另一个示例性实施例提供的NOF存储***100的结构示意图;
图3是一种典型的NOF存储***发生拥塞时的原理示意图;
图4是本申请一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图5是本申请另一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图6是本申请另一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图7是本申请另一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图8是本申请另一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图9是本申请另一个示例性实施例提供的基于NOF的读取控制方法的方法流程图;
图10是本申请另一个示例性实施例提供的基于NOF的读取控制装置的框图;
图11是本申请另一个示例性实施例提供的基于NOF的读取控制装置的框图;
图12是本申请另一个示例性实施例提供的NOF引擎的框图;
图13是本申请另一个示例性实施例提供的NVMe硬盘的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1示出了本申请一个示例性实施例提供的NOF存储***100的结构示意图。该NOF存储***100包括:主机120和NOF控制器140。
主机120可以是一个或多个。主机120用于采用远程直接数据存取(Remote DirectMemory Access,RDMA)从NOF控制器140读数据,或者向NOF控制器140写数据。图1中以主机120为多个主机示例说明,比如,主机120包括主机0至主机n,n为正整数。多个主机120可以同属于同一使用者,也可以属于不同的使用者。
在不同的实施例中,主机120可以是业务服务器、网络主机、计算节点等。多个主机120中可以存在类型不相同的主机,本实施例对主机120的具体类型不加以限定,只需要主机120支持NOF协议即可。
主机120通过网络160与多个NOF控制器140相连。可选地,该网络160为光纤通道架构(Fabric)网络,Fabric网路是由多台基于光纤通道(Fibre Channel,FC)协议的交换机互联组成的网络。该Fabric网络包括多个交换网关和通信线路。该通信线路可以是光缆或电缆,当通信线路是光缆时,交换网关可以是光交换网关;当通信线路是电缆时,交换网关可以是路由器和/或交换机。示意性的,每个主机120在网络160上的接入带宽是100GB,每个NOF控制器140在网络160上的接入带宽是100GB。
NOF控制器140可以是一个或多个。每个NOF控制器140具有各自的设备标识(Identify,ID),不同的NOF控制器140通过不同的设备ID进行区分。同一个物理载体上可以运行一个或多个NOF控制器140。图1中以NOF控制器140为多个NOF控制器示例说明,比如,NOF控制器140包括NOF控制器0至NOF控制器m,m为正整数。
每个NOF控制器140中包括:NOF引擎142和至少一个NVMe硬盘144,NVMe硬盘144是支持NVMe协议的固态硬盘(Solid State Drives,SSD)。一方面,NOF引擎142通过网络160与主机120相连;另一方面,NOF引擎142通过PCIe总线与至少一个NVMe硬盘144相连。每个NVMe硬盘144都以NOF引擎142作为访问对象。NOF引擎142负责在网络协议与PCIe协议之间的协议转换,以及数据转发处理。
结合参考图2,一个主机120和一个NOF控制器140之间可以建立一个或多个通信链路。该通信链路可以是队列对(Queue Pair,QP)连接。该QP连接是承载在以太网物理线路上的传输链路。同一个以太网物理线路上可以承载一条或多条QP连接,每个QP连接具有唯一的通信链路标识,该通信链路标识可以标识为QPID,不同的QP连接采用不同的QPID进行区分。示意性,主机120中存在n个队列QP0~QPn,NOF引擎142中存在对应的n个队列QP0~QPn。主机120中的QP0与NOF引擎142中的QP0构成一个QP连接0,主机120中的QP1与NOF引擎142中的QP1构成一个QP连接1,依次类推,主机120中的QPn与NOF引擎142中的QPn构成一个QP连接n。
可选地,队列对还可以称为RDMA队列对。队列对中的队列也称为完成队列(Completion Queue,CQ)。在NOF引擎142中的CQ队列用于缓存来自主机120的RDMA读请求或写请求。
在NOF引擎142中,还存在与每个CQ队列(或者说通信链路)对应的提交队列(Submission Queue,SQ)。SQ队列用于存储NOF引擎142需要发送给NVMe硬盘144的输入/输出(input/output,I/O)命令,也称SQE命令。SQE命令包括读命令和/或写命令。可选地,CQ队列和SQ队列存在一一对应关系。示意性的,完成队列QP0与提交队列SQ0对应,完成队列QP1与提交队列SQ1对应,依次类推,完成队列QPn与提交队列SQn对应。
可选地,在NOF引擎142中,还存在与每个通信链路对应的数据缓存(DataBuffer)。该数据缓存用于在某一个通信链路发生网络拥塞时,对来自NVMe硬盘144的与该通信链路对应的读数据进行缓存。也即,本申请实施例中不会让全部的通信链路共用同一个数据缓存,而是存在至少两个通信链路采用各自对应的数据缓存。可选地,每个通信链路采用与自身对应的数据缓存,任意两个通信链路对应的数据缓存是不同的;或者,与同一个主机对应的通信链路采用与自身对应的数据缓存,任意两个主机对应的数据缓存是不同的。
由于主机120和NOF控制器140通过网络160相连,而网络160可能会发生拥塞,所以在主机120从NOF控制器140读取数据的过程中,可能会由于网络拥塞而无法正常读取数据。比如在图1中,主机1的接入带宽是100GB,当主机0向主机1发送近似100GB的数据,NOF引擎0向主机1发送近似100GB的数据,NOF引擎1向主机1发送近似100GB的数据时,主机1的接入带宽无法同时承受300GB数据的传输,会产生拥塞现象。
图3示出了一种典型的NOF存储***发生拥塞时的原理示意图。NOF引擎142接收到主机的读命令后,读命令会沿传输路径:完成队列QP0→提交队列SQ0→NVMe硬盘144进行传输,由NVMe硬盘144对该读命令进行处理后,将数据反馈给NOF引擎142。假设NOF引擎142共接收到32个读命令,尚在完成队列QP0中缓存的有16个读命令,尚在提交队列SQ0中缓存的有8个读命令,NVMe硬盘144正在处理的有4个读命令,NVMe硬盘144已经处理完4个读命令。对于NVMe硬盘144已经处理完的4个读命令,这4个读命令会由NOF引擎142发送至主机。
若此时网络发生了拥塞,则尚未处理的28个读请求的数据,很可能无法顺利反馈给主机,导致主机发送的32个读命令无法被正确响应。
图4示出了本申请一个示例性实施例提供的基于NOF的读取控制方法的方法流程图。本实施例以该方法应用于图1或图2所示的NOF存储***中来举例说明。该方法包括:
步骤401,主机通过通信链路向NOF引擎发送读请求;
通信链路是主机和NOF引擎之间的通信链路。可选地,通信链路是主机和NOF引擎之间的QP连接。一个主机和一个NOF引擎之间可以有一个或多个QP连接。
可选地,每个QP连接具有唯一的通信链路标识,该通信链路标识可以标识为QPID。一个QPID指向一个主机,多个QPID可以分别指向不同的主机,也可以指向同一个主机。
主机通过QP连接向NOF引擎发送读请求,该读请求的封装形式可以是RDMA发送命令消息包(RDMA_SEND command capsule),该读请求中携带有待读取数据的地址信息、待读取数据的数据量大小,和序列号(Processing Sequence Number,PSN)。该序列号是按照读请求的先后顺序连续递增的。
可选地,主机发送的读请求是一个或多个。
步骤402,NOF引擎通过通信链路接收主机发送的读请求;
NOF引擎将接收到的读请求缓存至与该通信链路对应的完成队列中。
步骤403,NOF引擎根据读请求向NVMe硬盘发送至少一个读命令;
可选地,当读请求所请求的数据量较小时,NOF引擎可以将完成队列中的一个读请求转换为一个读命令后,缓存至提交队列中;当读请求所请求的数据量较大时,NOF引擎可以将完成队列中的一个读请求转换为多个读命令后,缓存至提交队列中。比如,读请求所请求的数据量是1MB,被拆分为8个读命令,每个读命令所请求的数据量是128KB。
可选地,该读命令具有与读请求相同的PSN号。
步骤404,NVMe硬盘接收NOF引擎发送的至少一个读命令;
NVMe硬盘定期对提交队列进行读取,当提交队列中存在未处理的读命令时,将该读命令进行读取并处理。
当NVMe硬盘根据读命令读取到数据后,会将携带有数据和PSN的数据帧反馈给NOF引擎。由NOF引擎通过通信链路将该数据帧发送给主机。也即,该数据帧用于反馈已处理的读命令对应的数据。
可选地,主机和NOF引擎之间的信息交互符合RDMA协议。
步骤405,NOF引擎在通信链路发生拥塞时,生成通信链路对应的拥塞标记;
当主机正确接收该数据帧时,会向NOF引擎反馈具有相同PSN的确认(Acknowledgement,ACK)信号;当主机未正确接收该数据帧时,会向NOF引擎反馈具有相同PSN的否认(Non-Acknowledgement,NACK)信号。当主机未收到该数据帧时,不会向NOF引擎反馈任何信号,这时会在NOF引擎产生定时器超时事件,该定时器是NOF引擎从开始发送数据帧时进行计时的定时器。
根据RDMA协议,当NOF引擎收到该数据帧的NACK或者超时未接收到确认信号,则确定该通信链路发生了拥塞,NOF引擎生成该通信链路对应的拥塞标记。该拥塞标记可以记为FC。
可选地,该拥塞标记可以显式或隐式指示该通信链路的标识,比如,该拥塞标记中携带有该通信链路的标识,该标识是QPID。
步骤406,NOF引擎向NVMe硬盘发送拥塞标记;
由于NVMe硬盘可能已经读取了一部分与该通信链路对应的读命令进行处理,而这些读命令如果被NVMe硬盘继续处理的话,很可能因为网络拥塞而失败,所以NOF引擎向NVMe硬盘发送拥塞标记,该拥塞标记用于指示NVMe硬盘暂停处理通信链路对应的读命令。
可选地,NOF引擎暂停接收来自该通信链路的读请求。
步骤407,NVMe硬盘接收NOF引擎发送的拥塞标记;
步骤408,NVMe硬盘根据拥塞标记,暂停处理该通信链路对应的读命令。
当NVMe硬盘中存在已经获取且尚未处理的读命令时,暂停处理该通信链路对应的读命令。
综上所述,本实施例提供的基于NOF的读取控制方法,通过NOF引擎在与主机之间的通信链路发生拥塞时,向NVMe硬盘发送拥塞标记,由NVMe硬盘根据拥塞标记暂停处理该通信链路对应的读命令。使得在发生网络拥塞的场景下,NVMe硬盘对已经获取且尚未处理的读命令暂停处理,解决了这部分读命令的数据在读取后,因为网络拥塞而无法顺利发送给主机,导致整个读取过程失败的问题,达到了在网络拥塞场景下减少无效数据的发送,从而避免网络更加拥塞的效果。
在基于图4实施例的可选实施例中,网络拥塞可能在一段时间后发生缓解,此时NOF引擎可以向NVMe硬盘发送拥塞解除标记。也即,步骤408之后还可以包括如下步骤409至步骤413,如下图5所示:
步骤409,NOF引擎通过通信链路向主机间隔发送空闲帧;
可选地,NOF引擎在发送某一个通信链路的拥塞标记后,每隔预定时间间隔通过该通信链路向主机发送空闲帧。该空闲帧是不包括数据但包括序列号的探测帧。该序列号可以是NOF引擎在已经使用过的序列号中选择出的任一序列号。
步骤410,主机在正确接收到空闲帧时,向NOF引擎发送确认信号;
假如网络拥塞已经解除,主机可以正确接收到空闲帧,则主机向NOF引擎发送该空闲帧对应的ACK。该ACK中携带有空闲帧的序列号。
步骤411,NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记;
可选地,该拥塞解除标记可以显式或隐式指示该通信链路的标识,比如,该拥塞标记中携带有该通信链路的标识,该标识是QPID。
步骤412,NOF引擎向NVMe硬盘发送拥塞解除标记;
拥塞解除标记用于指示NVMe硬盘恢复对通信链路对应的读命令的处理。
对应地,NVMe硬盘接收NOF引擎发送的拥塞解除标记。
步骤413,NVMe硬盘根据拥塞解除标记,恢复对该通信链路对应的读命令的处理。
当NVMe硬盘中存在已经获取且尚未处理的读命令时,恢复对该通信链路对应的读命令的处理。
综上所述,本实施例提供的基于NOF的读取控制方法,通过NOF引擎在通信链路的拥塞接触时,向NVMe硬盘发送拥塞解除标记,由NVMe硬盘根据拥塞解除标记恢复处理该通信链路对应的读命令。使得在网络拥塞已经解除的场景下,NVMe硬盘对已经获取且尚未处理的读命令恢复处理,保证了主机在读取数据时的成功率。
由于NOF引擎与NVMe硬盘之间存在多种信息交互方式,上述步骤406中,NOF引擎向NVMe硬盘发送拥塞标记(和/或拥塞解除标记)也可以采用如下三种不同的方式中的任意一种:
第一,通过提交队列中的SQE命令进行发送;
第二,通过寄存器写命令进行发送;
第三,通过管理(Admin)命令进行发送。
针对第一种可选的实现方式,上述步骤406至步骤413可实现成为如下步骤,如图6所示:
步骤506,NOF引擎确定与通信链路对应的提交队列;
提交队列用于存储与通信链路对应的提交队列的条目(Submission QueueEntry,SQE)SQE命令,SQE命令包括读命令和/或写命令;
NOF引擎中存储有通信链路与提交队列之间的对应关系。表一示意性的示出了该对应关系。
表一
通信链路 | 提交队列 |
QP ID 0 | SQ0 |
QP ID 1 | SQ1 |
QP ID 2 | SQ2 |
QP ID 3 | SQ3 |
示意性的,当通信链路0发生拥塞时,NOF引擎能够根据该对应关系,确定出与通信链路0对应的提交队列SQ0。该SQ0用于存储与通信链路0对应的SQE命令,SQE命令包括读命令和/或写命令。可选地,该SQE命令是NOF引擎根据该通信链路0上收到读写请求生成或转发的。
步骤507,NVMe硬盘向NOF引擎发送命令读取请求,命令读取请求用于读取与通信链路对应的提交队列中的SQE命令。
NVMe硬盘会每隔预定时间间隔向NOF引擎发送命令读取请求,或者,NVMe硬盘在处理资源空闲时,向NOF引擎发送命令读取请求。
该命令读取请求用于读取与通信链路对应的提交队列中的SQE命令。
需要说明的是,该读取过程是NVMe硬盘正常运行过程中的例行过程,NVMe硬盘事先并不知晓哪一个通信链路发生了拥塞。
步骤508,NOF引擎在接收到NVMe硬盘对提交队列的命令读取请求时,向NVMe硬盘发送携带有拥塞标记的SQE命令;
示意性的,假设通信链路0对应的提交队列是SQ0,NOF引擎在接收到NVMe硬盘对SQ0的命令读取请求时,向NVMe硬盘发送携带有拥塞标记的SQE命令。
可选地,本步骤分为两种情况:
一、当提交队列中存在待处理的SQE命令时,NOF引擎在该待处理的SQE命令的保留域(Reserved)中添加拥塞标记后,将携带有拥塞标记的SQE命令发送给NVMe硬盘;
二、当提交队列中不存在待处理的SQE命令时,也即提交队列为空,则NOF引擎生成一个携带有拥塞标记且不进行实际读写的SQE命令(简称空命令),将该携带有拥塞标记的空命令发送给NVMe硬盘。
步骤509,NVMe硬盘接收NOF引擎发送的携带有拥塞标记的SQE命令;
步骤510,NVMe硬盘在接收到携带有拥塞标记的SQE命令后,根据拥塞标记暂停处理该通信链路对应的读命令。
对于已发生拥塞的通信链路所对应的提交队列,NVMe硬盘根据拥塞标记执行如下操作中的至少一种操作:
1、暂停对该提交队列的命令读取请求;
NVMe硬盘暂停对该提交队列进行周期性的命令读取过程,从而减少NVMe硬盘的冗余读取。
2、将从该提交队列已经取回且尚未完成的读命令设置为挂起状态;
NVMe硬盘对从该提交队列已经取回且尚未完成的读命令暂不处理,全部设置为挂起状态。
3、将该提交队列对应的调度权重降低至第一权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第一权重可以是最低调度权重或者较低调度权重。
可选地,当该提交队列对应的通信链路发生拥塞时,NVMe硬盘将该提交队列对应的调度权重,降低至最低调度权重。因此,其它提交队列对应的SQE命令会被优先调度。
本实施例以NOF引擎将三种操作全部执行为例来说明。
步骤511,NOF引擎通过通信链路向主机间隔发送空闲帧;
示意性的,在通信链路0发生拥塞后,NOF引擎可以每隔预定时间间隔,通过通信链路0向主机发送空闲帧。该空闲帧是不包括数据但包括序列号的探测帧。该序列号可以是NOF引擎自定义的序列号,还可以是最近一个未收到确认信号的序列号。
步骤512,NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记;
假如网络拥塞已经解除,主机可以正确接收到空闲帧,则主机向NOF引擎发送该空闲帧对应的ACK。该ACK中携带有空闲帧的序列号。
NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记。可选地,该拥塞解除标记可以显式或隐式指示该通信链路的标识,比如,该拥塞标记中携带有该通信链路的标识,该标识是QPID。又比如,NOF引擎通过与该通信链路对应的提交队列的标识,隐式地向NVMe硬盘指示该通信链路。
步骤513,NOF引擎确定与通信链路对应的提交队列,提交队列用于存储与通信链路对应的SQE命令;
本步骤可以参考步骤506,不再赘述。
步骤514,NOF引擎在接收到NVMe硬盘对提交队列的命令读取请求时,向NVMe硬盘发送携带有拥塞解除标记的SQE命令;
示意性的,假设通信链路0对应的提交队列是SQ0,由于NVMe硬盘已经停止读取该提交队列,NOF引擎可以主动向NVMe硬盘发送携带有拥塞解除标记的SQE命令。
可选地,本步骤分为两种情况:
当提交队列中存在待处理的SQE命令时,NOF引擎在该待处理的SQE命令的保留域(Reserved)中添加拥塞解除标记后,将携带有拥塞解除标记的SQE命令发送给NVMe硬盘;
当提交队列中不存在待处理的SQE命令时,也即提交队列为空,则NOF引擎生成一个携带有拥塞解除标记且不进行实际读写的SQE命令(简称空命令),将该携带有拥塞标记的空命令发送给NVMe硬盘。
步骤515,NVMe硬盘接收NOF引擎发送的携带有拥塞解除标记的SQE命令;
步骤516,NVMe硬盘根据拥塞解除标记,恢复对通信链路对应的读命令的处理。
对于拥塞已经解除的通信链路所对应的提交队列,NVMe硬盘根据拥塞解除标记执行如下操作中的至少一种操作:
一、恢复对提交队列的命令读取请求;
NVMe硬盘恢复对该提交队列进行周期性的命令读取过程,从而继续对该提交队列中的SQE命令进行处理。
二、将从提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态;
NVMe硬盘还将从该提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态。
三、将该提交队列对应的调度权重提高至第二权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第二权重可以是该提交队列在调整为第一权重之前的权重,或者,第二权重是预设的最高权重或者较高权重。也即,第二权重高于第一权重。
可选地,当该提交队列对应的通信链路的拥塞解除时,NVMe硬盘将该提交队列对应的调度权重,调高至第二权重。因此,该提交队列对应的SQE命令会被优先调度或继续调度。
综上所述,本实施例提供的读取控制方法,通过利用提交队列中的SQE命令来传递拥塞标记,使得在尽量不增加额外信令的前提下,实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。由于提交队列中有很大概率存在NVMe硬盘还未读取的SQE命令,而利用SQE命令中的保留域来传递拥塞标记,几乎没有增加额外信令和数据量。
本实施例提供的读取控制方法,通过利用提交队列中的SQE命令来传递拥塞解除标记,使得在尽量不增加额外信令的前提下,实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。由于提交队列中有很大概率存在NVMe硬盘还未读取的SQE命令,而利用SQE命令中的保留域来传递拥塞标记,几乎没有增加额外信令和数据量。
针对第二种可选的实现方式,上述步骤406至步骤413可实现成为如下步骤,如图7所示:
步骤606,NOF引擎确定与通信链路对应的提交队列,提交队列用于存储与通信链路对应的SQE命令,SQE命令包括读命令和/或写命令;
NOF引擎中存储有通信链路与提交队列之间的对应关系。示意性的,当通信链路0发生拥塞时,NOF引擎能够根据该对应关系,确定出与通信链路0对应的提交队列SQ0。该SQ0用于存储与通信链路0对应的SQE命令,SQE命令包括读命令和/或写命令。可选地,该SQE命令是NOF引擎根据该通信链路0上收到读写请求生成或转发的。
步骤607,NOF引擎向NVMe硬盘发送指向第一自定义地址的寄存器写命令,第一自定义地址是用于存储所述拥塞标记的地址,该寄存器写命令携带有提交队列的标识和拥塞标记;
示意性的,假设通信链路0对应的提交队列是SQ0,NOF引擎向NVMe硬盘发送指向第一自定义地址的寄存器写命令。第一自定义地址是用于存储拥塞标记的地址,该第一自定义地址是NVMe硬盘的寄存器中的存储地址。该寄存器写命令携带有提交队列的标识和拥塞标记。每个提交队列可以有各自对应的第一自定义地址,也可以多个提交队列共用同一个第一自定义地址。
也即,该第一自定义地址是NOF引擎和NVMe硬盘之间事先设置的一个寄存器地址,位于NVMe硬盘内,该第一自定义地址用来存储拥塞标记。
步骤608,NVMe硬盘接收NOF引擎发送的指向第一自定义地址的寄存器写命令;
步骤609,NVMe硬盘根据寄存器写命令对第一自定义地址进行写入操作;
NVMe硬盘根据该寄存器写命令,将提交队列的标识和拥塞标记写入第一自定义地址中。之后,NVMe硬盘可以根据该提交队列的标识和拥塞标记,获知该提交队列对应的通信链路已经发生了拥塞。
需要说明的是,当多个提交队列共同同一个第一自定义地址时,若NVMe硬盘需要写入第i个指向第一自定义地址的寄存器写命令,i≥2,则NVMe硬盘可以将第一自定义地址中的已有数据进行擦除,然后再根据第i个指向第一自定义地址的寄存器写命令进行写入,以避免已有数据对本次写入过程的影响。
步骤610,NVMe硬盘在向第一自定义地址进行写入后,根据拥塞标记暂停处理该通信链路对应的读命令。
对于已发生拥塞的通信链路所对应的提交队列,NVMe硬盘根据拥塞标记执行如下操作中的至少一种操作:
1、暂停对该提交队列的命令读取请求;
NVMe硬盘暂停对该提交队列进行周期性的命令读取过程,从而减少NVMe硬盘的冗余读取。
2、将从该提交队列已经取回且尚未完成的读命令设置为挂起状态;
NVMe硬盘对从该提交队列已经取回且尚未完成的读命令暂不处理,全部设置为挂起状态。
3、将该提交队列对应的调度权重降低至第一权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第一权重可以是最低调度权重或者较低调度权重。
可选地,当该提交队列对应的通信链路发生拥塞时,NVMe硬盘将该提交队列对应的调度权重,降低至最低调度权重。因此,其它提交队列对应的SQE命令会被优先调度。
本实施例以NOF引擎将三种操作全部执行为例来说明。
步骤611,NOF引擎通过通信链路向主机间隔发送空闲帧;
示意性的,在通信链路0发生拥塞后,NOF引擎可以每隔预定时间间隔,通过通信链路0向主机发送空闲帧。该空闲帧是不包括数据但包括序列号的探测帧。该序列号可以是NOF引擎自定义的序列号,还可以是最近一个未收到确认信号的序列号。
步骤612,NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记;
假如网络拥塞已经解除,主机可以正确接收到空闲帧,则主机向NOF引擎发送该空闲帧对应的ACK。该ACK中携带有空闲帧的序列号。
NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记。可选地,该拥塞解除标记可以显式或隐式指示该通信链路的标识,比如,该拥塞标记中携带有该通信链路的标识,该标识是QPID。又比如,NOF引擎通过与该通信链路对应的提交队列的标识,隐式地向NVMe硬盘指示该通信链路。
步骤613,NOF引擎向NVMe硬盘发送指向第二自定义地址的寄存器写命令;
第二自定义地址是用于存储拥塞解除标记的地址,该寄存器写命令携带有提交队列的标识和拥塞解除标记。可选地,第二自定义地址与第一自定义地址是不同的地址,或者,第二自定义地址与第一自定义地址是相同的地址。每个提交队列可以对应有各自的第二自定义地址,也可以多个提交队列共用同一个第二自定义地址。
示意性的,假设通信链路0对应的提交队列是SQ0,NOF引擎可以主动向NVMe硬盘发送指向第二自定义地址的寄存器写命令。
步骤614,NVMe硬盘接收NOF引擎发送的指向第二自定义地址的寄存器写命令;
步骤615,NVMe硬盘根据寄存器写命令对第二自定义地址进行写入操作;
NVMe硬盘根据该寄存器写命令,将提交队列的标识和拥塞解除标记写入第二自定义地址中。之后,NVMe硬盘可以根据该提交队列的标识和拥塞解除标记,获知该提交队列对应的通信链路的拥塞已经解除。
需要说明的是,当多个提交队列共同同一个第二自定义地址时,若NVMe硬盘需要写入第i个指向第二自定义地址的寄存器写命令,i≥2,则NVMe硬盘可以将第二自定义地址中的已有数据进行擦除,然后再根据第i个指向第二自定义地址的寄存器写命令进行写入,以避免已有数据对本次写入过程的影响。
同理,对第一自定义地址和第二自定义地址是同一个地址的场景下,若NVMe硬盘需要写入第i个指向第二自定义地址的寄存器写命令,i≥2,则NVMe硬盘也可以将第二自定义地址中的已有数据进行擦除,然后再根据第i个指向第二自定义地址的寄存器写命令进行写入,以避免已有数据对本次写入过程的影响。
步骤616,NVMe硬盘根据拥塞解除标记,恢复对通信链路对应的读命令的处理。
对于拥塞已经解除的通信链路所对应的提交队列,NVMe硬盘根据拥塞解除标记执行如下操作中的至少一种操作:
一、恢复对提交队列的命令读取请求;
NVMe硬盘恢复对该提交队列进行周期性的命令读取过程,从而继续对该提交队列中的SQE命令进行处理。
二、将从提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态;
NVMe硬盘还将从该提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态。
三、将该提交队列对应的调度权重提高至第二权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第二权重可以是该提交队列在调整为第一权重之前的权重,或者,第二权重是预设的最高权重或者较高权重。也即,第二权重高于第一权重。
可选地,当该提交队列对应的通信链路的拥塞解除时,NVMe硬盘将该提交队列对应的调度权重,调高至第二权重。因此,该提交队列对应的SQE命令会被优先调度或继续调度。
综上所述,本实施例提供的读取控制方法,通过利用指向第一自定义地址的寄存器写命令来传递拥塞标记,使得在不改变SQE命令的正常读写机制时,也能够实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。
本实施例提供的读取控制方法,通过利用指向第二自定义地址的寄存器写命令来传递拥塞解除标记,使得在不改变SQE命令的正常读写机制时,实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘恢复对该通信链路对应的读命令进行处理。
针对第三种可选的实现方式,上述步骤406至步骤413可实现成为如下步骤,如图8所示:
步骤706,NOF引擎确定与通信链路对应的提交队列,提交队列用于存储与通信链路对应的提交队列的条目(Submission Queue Entry,SQE)SQE命令,SQE命令包括读命令和/或写命令;
NOF引擎中存储有通信链路与提交队列之间的对应关系。示意性的,当通信链路0发生拥塞时,NOF引擎能够根据该对应关系,确定出与通信链路0对应的提交队列SQ0。该SQ0用于存储与通信链路0对应的SQE命令,SQE命令包括读命令和/或写命令。可选地,该SQE命令是NOF引擎根据该通信链路0上收到读写请求生成或转发的。
步骤707,NOF引擎向NVMe硬盘发送具有第一自定义内容的管理命令,第一自定义内容携带有提交队列的标识和拥塞标记;
示意性的,假设通信链路0对应的提交队列是SQ0,NOF引擎向NVMe硬盘发送具有第一自定义内容的管理命令。第一自定义内容携带有提交队列的标识和拥塞标记。由于管理命令
步骤708,NVMe硬盘接收NOF引擎发送的具有第一自定义内容的管理命令,第一自定义内容携带有提交队列的标识和拥塞标记;
步骤709,NVMe硬盘在收到具有第一自定义内容的管理命令后,根据拥塞标记暂停处理该通信链路对应的读命令。
可选地,NVMe硬盘从该管理命令中,解析出提交队列的标识和拥塞标记。
对于已发生拥塞的通信链路所对应的提交队列,NVMe硬盘根据拥塞标记执行如下操作中的至少一种操作:
1、暂停对该提交队列的命令读取请求;
NVMe硬盘暂停对该提交队列进行周期性的命令读取过程,从而减少NVMe硬盘的冗余读取。
2、将从该提交队列已经取回且尚未完成的读命令设置为挂起状态;
NVMe硬盘对从该提交队列已经取回且尚未完成的读命令暂不处理,全部设置为挂起状态。
3、将该提交队列对应的调度权重降低至第一权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第一权重可以是最低调度权重或者较低调度权重。
可选地,当该提交队列对应的通信链路发生拥塞时,NVMe硬盘将该提交队列对应的调度权重,降低至最低调度权重。因此,其它提交队列对应的SQE命令会被优先调度。
本实施例以NOF引擎将三种操作全部执行为例来说明。
步骤710,NOF引擎通过通信链路向主机间隔发送空闲帧;
示意性的,在通信链路0发生拥塞后,NOF引擎可以每隔预定时间间隔,通过通信链路0向主机发送空闲帧。该空闲帧是不包括数据但包括序列号的探测帧。该序列号可以是NOF引擎自定义的序列号,还可以是最近一个未收到确认信号的序列号。
步骤711,NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记;
假如网络拥塞已经解除,主机可以正确接收到空闲帧,则主机向NOF引擎发送该空闲帧对应的ACK。该ACK中携带有空闲帧的序列号。
NOF引擎在接收到空闲帧的确认信号时,生成通信链路对应的拥塞解除标记。可选地,该拥塞解除标记可以显式或隐式指示该通信链路的标识,比如,该拥塞标记中携带有该通信链路的标识,该标识是QPID。又比如,NOF引擎通过与该通信链路对应的提交队列的标识,隐式地向NVMe硬盘指示该通信链路。
步骤712,NOF引擎向NVMe硬盘发送具有第二自定义内容的管理命令;
第二自定义地址是用于存储拥塞解除标记的地址,该寄存器写命令携带有提交队列的标识和拥塞解除标记。可选地,第二自定义地址与第一自定义地址是不同的地址,或者,第二自定义地址与第一自定义地址是相同的地址。每个提交队列可以对应有各自的第二自定义地址,也可以多个提交队列共用同一个第二自定义地址。
示意性的,假设通信链路0对应的提交队列是SQ0,NOF引擎可以主动向NVMe硬盘发送具有第二自定义内容的管理命令。
步骤713,NVMe硬盘接收NOF引擎发送的具有第二自定义内容的管理命令;
步骤714,NVMe硬盘根据拥塞解除标记,恢复对通信链路对应的读命令的处理。
对于拥塞已经解除的通信链路所对应的提交队列,NVMe硬盘根据拥塞解除标记执行如下操作中的至少一种操作:
一、恢复对提交队列的命令读取请求;
NVMe硬盘恢复对该提交队列进行周期性的命令读取过程,从而继续对该提交队列中的SQE命令进行处理。
二、将从提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态;
NVMe硬盘还将从该提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态。
三、将该提交队列对应的调度权重提高至第二权重。
NVMe硬盘可以对每个提交队列设置有调度权重(也称调度优先级)。第二权重可以是该提交队列在调整为第一权重之前的权重,或者,第二权重是预设的最高权重或者较高权重。也即,第二权重高于第一权重。
可选地,当该提交队列对应的通信链路的拥塞解除时,NVMe硬盘将该提交队列对应的调度权重,调高至第二权重。因此,该提交队列对应的SQE命令会被优先调度或继续调度。
综上所述,本实施例提供的读取控制方法,通过利用具有第一自定义内容的管理命令来传递拥塞标记,使得利用NVMe协议提供的管理命令,即可实现NOF引擎与NVMe硬盘之间的拥塞通知机制,进而控制NVMe硬盘暂停对该通信链路对应的读命令进行处理。
本实施例提供的读取控制方法,通过利用具有第二自定义内容的管理命令来传递拥塞解除标记,使得利用NVMe协议提供的管理命令,即可实现NOF引擎与NVMe硬盘之间的拥塞解除通知机制,进而控制NVMe硬盘恢复对该通信链路对应的读命令进行处理。
上述三个实施例,可以适用于NOF引擎142中不存在数据缓存的场景,也可以适用于NOF引擎142中存储数据缓存的场景。可选地,对于NOF引擎142中存在数据缓存的场景,还可以提供有如下实施例:
图9示出了本申请一个示例性实施例提供的基于NOF的读取控制方法的流程图。本实施例以该方法应用于图1或图2所示的NOF存储***中来举例说明,设NOF引擎142中设置有数据缓存,该数据缓存的缓存大小为n MB,NOF引擎142支持的通信链路数量为m,则分配给每个通信链路的数据缓存的缓存大小是总缓存大小n的1/m。该方法包括:
步骤801,NOF引擎通过通信链路接收主机发送的读请求,读请求用于请求读取第一数据量的数据,第一数据量超过数据缓存的缓存大小;
示意性的,假设NOF引擎142中设置有数据缓存的缓存大小n为1024MB,NOF引擎142支持的QP连接数量m为1024个QP连接,则分配给每个QP连接的数据缓存为1MB=1024KB的数据缓存空间。
主机通过通信链路向NOF引擎发送读请求。可选地,该读请求用于读取第一数据量的数据,该第一数据量超过该通信链路对应的数据缓存的缓存大小。例如,第一数据量超过1MB。
可选地,主机通过RDMA协议向NOF引擎发送读请求,NOF引擎通过RDMA协议接收主机发送的读请求。
步骤802,NOF引擎将读请求拆分为K个读命令;
NOF引擎将第一数据量的读请求拆分为K个第二数据量的读命令,每个读命令用于请求读取第二数据量的数据,第二数据量小于第一数据量。可选地,每个读命令对应的第二数据量是相同的,或者,存在至少两个读命令对应的第二数据量是不同的。该第二数据量是可以自定义的。
例如,NOF引擎将2MB的读请求拆分为16个128KB的读命令。
步骤803,NOF引擎向NVMe硬盘发送m个读命令,m≤K,m与第二数据量的乘积不大于数据缓存的缓存大小;
NOF引擎会控制向NVMe硬盘发送的读命令个数,使得NVMe硬盘正在处理的读命令对应的读取数据量不超过数据缓存的缓存大小。
例如,由于每个QP连接的数据缓存大小为1024KB,NOF引擎每次向NVMe硬盘发送的读命令个数不超过8个,8*128KB=1024KB。
可选地,NOF引擎将需要发送至NVMe硬盘的读命令缓存在提交队列中,由NVMe硬盘自行读取。NOF引擎将暂时不需要发送至NVMe硬盘的读命令,先缓存在本地的完成队列中,暂不发送至提交队列中。
当NVMe硬盘根据读命令将读取到的数据反馈给NOF引擎后,NOF引擎先将读取到的数据进行缓存,然后再以数据帧的形式发送给主机。
步骤804,NOF引擎在通信链路发生拥塞时,暂停向NVMe硬盘发送剩余的其它读命令;
当NOF引擎收到数据帧的否认信号,或者,超时未收到数据帧的确认信号时,确定该条通信链路发生了网络拥塞。该过程可以参考步骤405的相关描述细节,本实施例不再赘述。
此时,NOF引擎暂停向NVMe硬盘发送剩余的其它读命令。由于已经向NVMe硬盘发送的读命令有限,即便NVMe硬盘将已接收的读命令进行处理和响应,NOF引擎侧的数据缓存也可以将读取到的数据进行缓存,不会产生缓存溢出。
需要说明的是,NVMe硬盘侧完全不感知网络拥塞过程。
步骤805,NOF引擎接收NVMe硬盘根据m个读命令读取的数据;
在网络拥塞期间,NVMe硬盘可以继续对该通信链路对应的读命令进行处理,NOF引擎正常接收NVMe硬盘根据n个读命令读取的数据。
步骤806,NOF引擎将数据存储在通信链路对应的数据缓存中;
NOF引擎可以将数据存储在通信链路对应的数据缓存中,暂时不向主机发送。
步骤807,NOF引擎在通信链路解除拥塞时,将数据缓存中的数据通过通信链路发送至主机;
可选地,NOF引擎在发送某一个通信链路的拥塞标记后,每隔预定时间间隔通过该通信链路向主机发送空闲帧。该空闲帧是不包括数据但包括序列号的探测帧。该序列号可以是NOF引擎自定义的序列号,还可以是最近一个未收到确认信号的序列号。假如网络拥塞已经解除,主机可以正确接收到空闲帧,则主机向NOF引擎发送该空闲帧对应的ACK。该ACK中携带有空闲帧的序列号。
NOF引擎在通信链路解除拥塞时,将数据缓存中的数据通过通信链路发送至主机。
需要说明的是,NVMe硬盘侧也完全不感知网络拥塞解除过程。
步骤808,NOF引擎继续向NVMe硬盘发送n个读命令,n≤K-m,n与第二数据量的乘积不大于数据缓存的缓存大小。
当存在该通信链路对应的待处理的读命令时,NOF引擎继续向NVMe硬盘发送后续的n个读命令。每个批次向NVMe硬盘发送的n个读命令对应的读取数据量,不超过该通信链路对应的数据缓存的缓存大小。
综上所述,本实施例提供的基于NOF的读取控制方法,可以在NOF引擎侧有数据缓存的情况下,由NOF引擎控制向NVMe硬盘发送的读命令的数量,使得NVMe硬盘正在处理的读命令的读取数据量不超过数据缓存的缓存大小。即便通信链路发生了网络拥塞,NOF引擎暂停向NVMe硬盘继续下发读命令即可解决拥塞问题,不需要NVMe硬盘感知拥塞过程,减少NOF引擎和NVMe硬盘之间的信令交互以及传输带宽的占用。
另外,由于本实施例是为每个通信链路设置各自对应的数据缓存,而不是多个通信链路共用同一个数据缓存,因此即便某一个通信链路发生了网络拥塞,导致该通信链路对应的数据缓存被占用,也不会出现将NOF引擎中所有的数据缓存都被该通信链路对应的读取数据所占用,导致其它通信链路的读取过程也收到影响的问题。达到了每个通信链路都分别独立,即便一条或多条通信链路发生拥塞,也不会影响剩余通信链路的正常收发过程的效果。
本实施例提供的基于NOF的读取控制方法,还可以在通信链路的拥塞解除后,NOF引擎继续向NVMe硬盘下发读命令即可恢复正常处理流程,不需要NVMe硬盘感知拥塞解除过程,减少NOF引擎和NVMe硬盘之间的信令交互以及传输带宽的占用。
需要说明的是,上述各个方法实施例均以一条通信链路发生网络拥塞或拥塞解除时,如何对该条通信链路的读命令进行处理来进行示意性说明。但实际上发生拥塞的通信链路可以不止一条,此乃本领域技术人员在阅读上述实施例后易于思及的内容,本文不再赘述。
图10示出了本申请一个实施例提供的基于NOF的读取控制装置的结构框图。该装置可以实现成为NOF引擎本身或NOF引擎中的功能模块。该装置包括:接收单元920、发送单元940和处理单元960。
接收单元920,用于实现上述方法实施例中步骤401、步骤410、步骤507、步骤512、步骤612、步骤711、步骤801、步骤805中的至少一个接收步骤,以及其它明示或隐含的接收步骤。
发送单元940,用于实现上述方法实施例中步骤403、步骤406、步骤409、步骤412、步骤508、步骤511、步骤514、步骤607、步骤612、步骤707、步骤712、步骤803、步骤807、步骤808中的至少一个发送步骤,以及其它明示或隐含的发送步骤。
处理单元960,用于实现上述方法实施例中步骤411、步骤506、步骤513、步骤606、步骤706、步骤802、步骤804、步骤806中的至少一个处理步骤,以及其它明示或隐含的处理步骤。
上述接收单元920可以通过处理器控制接收机(或通信芯片或物理网络接口或虚拟网络接口)来实现,上述发送单元940可以通过处理器控制发送机(或通信芯片或物理网络接口或虚拟网络接口)来实现,上述处理单元960可以通过处理器、存储器和存储器中的至少一个程序或指令来实现。
图11示出了本申请一个实施例提供的基于NOF的读取控制装置的结构框图。该装置可以实现成为NVMe硬盘本身或NVMe硬盘中的功能模块。该装置包括:接收单元1020、发送单元1040和处理单元1060。
接收单元1020,用于实现上述方法实施例中步骤404、步骤407、步骤413、步骤509、步骤515、步骤608、步骤614、步骤708、步骤713中的至少一个接收步骤,以及其它明示或隐含的接收步骤。
发送单元1040,用于实现上述方法实施例中步骤507对应的发送步骤,以及其它明示或隐含的发送步骤。
处理单元106,用于实现上述方法实施例中步骤408、步骤413、步骤510、步骤516、步骤609、步骤610、步骤615、步骤616、步骤709、步骤714中的至少一个处理步骤,以及其它明示或隐含的处理步骤。
上述接收单元1020可以通过处理器控制接收机(或通信芯片或物理网络接口或虚拟网络接口)来实现,上述发送单元1040可以通过处理器控制发送机(或通信芯片或物理网络接口或虚拟网络接口)来实现,上述处理单元1060可以通过处理器、存储器和存储器中的至少一个程序或指令来实现。
图12示出了本申请一个实施例提供的NOF引擎的结构框图。该NOF引擎包括:处理器1220和存储器1240。存储器1240存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如上述任一方法实施例中,由NOF引擎执行的步骤。
可选地,该NOF引擎还包括:网络接口1260和PCI接口1280。其中,网络接口1260用于结合物理线缆与主机相连,PCI接口1280用于与NVMe硬盘相连。
图13示出了本申请一个实施例提供的NVMe硬盘的结构框图。该NVMe硬盘包括:控制器1320和存储器1340。存储器1340存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如上述任一方法实施例中,由NVMe硬盘执行的步骤。可选地,存储器1340也可以集成在控制器1320中。
可选地,该NVMe硬盘还包括:至少一个非易失性存储单元1360,该非易失性存储单元1360用于存储数据。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有至少一个指令,所述至少一个指令被执行以实现如任一方法实施例中,由NOF引擎执行的步骤。
本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有至少一个指令,所述至少一个指令被执行以实现如任一方法实施例中,由NVMe硬盘执行的步骤。
本申请实施例还提供了一种计算机程序产品,所述程序产品存储有至少一个指令,所述至少一个指令被执行以实现如任一方法实施例中,由NOF引擎执行的步骤。
本申请实施例还提供了一种计算机程序产品,所述程序产品存储有至少一个指令,所述至少一个指令被执行以实现如任一方法实施例中,由NVMe硬盘执行的步骤。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (30)
1.一种基于网络连接的非易失性存储NOF的读取控制方法,其特征在于,所述方法包括:
NOF引擎通过通信链路接收主机发送的读请求;
所述NOF引擎根据所述读请求向NVMe硬盘发送至少一个读命令;
所述NOF引擎在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;
所述NOF引擎向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。
2.根据权利要求1所述的方法,其特征在于,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的提交队列的条目SQE命令,所述SQE命令包括读命令和/或写命令;
所述NOF引擎在接收到所述NVMe硬盘对所述提交队列的命令读取请求时,向所述NVMe硬盘发送携带有所述拥塞标记的SQE命令。
3.根据权利要求1所述的方法,其特征在于,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;
所述NOF引擎向所述NVMe硬盘发送指向第一自定义地址的寄存器写命令,所述第一自定义地址是用于存储所述拥塞标记的地址,所述寄存器写命令携带有所述提交队列的标识和所述拥塞标记。
4.根据权利要求1所述的方法,其特征在于,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;
所述NOF引擎向所述NVMe硬盘发送具有第一自定义内容的管理命令,所述第一自定义内容携带有所述提交队列的标识和所述拥塞标记。
5.根据权利要求1至4任一所述的方法,其特征在于,所述向所述NVMe硬盘发送添加有所述拥塞标记的SQE命令之后,还包括:
所述NOF引擎通过所述通信链路向所述主机间隔发送空闲帧;
所述NOF引擎在接收到所述空闲帧的确认信号时,生成所述通信链路对应的拥塞解除标记;
所述NOF引擎向所述NVMe硬盘发送所述拥塞解除标记,所述拥塞解除标记用于指示所述NVMe硬盘恢复对所述通信链路对应的读命令的处理。
6.根据权利要求5所述的方法,其特征在于,所述NOF引擎向所述NVMe硬盘发送所述拥塞解除标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;
所述NOF引擎在接收到所述NVMe硬盘对所述提交队列的命令读取请求时,向所述NVMe硬盘发送携带有所述拥塞解除标记的SQE命令。
7.根据权利要求5所述的方法,其特征在于,所述NOF引擎向所述NVMe硬盘发送所述拥塞解除标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;
所述NOF引擎向所述NVMe硬盘发送指向第二自定义地址的寄存器写命令,所述第二自定义地址是用于存储所述拥塞解除标记的地址,所述寄存器写命令携带有所述提交队列的标识和所述拥塞解除标记。
8.根据权利要求5所述的方法,其特征在于,所述NOF引擎向所述NVMe硬盘发送所述拥塞解除标记,包括:
所述NOF引擎确定与所述通信链路对应的提交队列,所述提交队列用于存储与所述通信链路对应的SQE命令;
所述NOF引擎向所述NVMe硬盘发送具有第二自定义内容的管理命令,所述第二自定义内容携带有所述提交队列的标识和所述拥塞解除标记。
9.一种基于NOF的读取控制方法,其特征在于,所述方法包括:
NVMe硬盘接收NOF引擎发送的至少一个读命令,所述读命令是所述NOF引擎根据主机通过通信链路发送的读请求产生的;
所述NVMe硬盘接收NOF引擎发送的拥塞标记,所述拥塞标记是所述NOF引擎在所述通信链路发送拥塞时发送的;
所述NVMe硬盘根据所述拥塞标记,暂停处理所述通信链路对应的所述读命令。
10.根据权利要求9所述的方法,其特征在于,所述NVMe硬盘接收NOF引擎发送的拥塞标记,包括:
所述NVMe硬盘向所述NOF引擎发送命令读取请求,所述命令读取请求用于读取与所述通信链路对应的提交队列中的SQE命令;
所述NVMe硬盘接收所述NOF引擎发送的携带有所述拥塞标记的SQE命令。
11.根据权利要求9所述的方法,其特征在于,所述NVMe硬盘接收NOF引擎发送的拥塞标记,包括:
所述NVMe硬盘接收所述NOF引擎发送的指向第一自定义地址的寄存器写命令,所述第一自定义地址是用于存储所述拥塞标记的地址,所述寄存器写命令携带有与所述通信链路对应的提交队列的标识和所述拥塞标记;
所述NVMe硬盘根据所述寄存器写命令对所述第一自定义地址进行写入操作。
12.根据权利要求9所述的方法,其特征在于,所述NOF引擎向NVMe硬盘发送所述拥塞标记,包括:
所述NVMe硬盘接收所述NOF引擎发送的具有第一自定义内容的管理命令,所述第一自定义内容携带有提交队列的标识和所述拥塞标记,所述提交队列是与所述通信链路对应的队列。
13.根据权利要求9至12任一所述的方法,其特征在于,所述NVMe硬盘根据所述拥塞标记,暂停处理所述通信链路对应的读命令,包括:
所述NVMe硬盘根据所述拥塞标记执行如下操作中的至少一种操作:
暂停对与所述通信链路对应的提交队列的命令读取请求;
将从所述提交队列已经取回且尚未完成的读命令设置为挂起状态;
将所述提交队列对应的调度权重降低至第一权重。
14.根据权利要求9所述的方法,其特征在于,所述NVMe硬盘根据所述拥塞标记,暂停处理所述通信链路对应的读命令之后,还包括:
所述NVMe硬盘接收所述NOF引擎发送的拥塞解除标记,所述拥塞解除标记是所述NOF引擎在与主机之间的通信链路拥塞解除时发送的;
所述NVMe硬盘根据所述拥塞解除标记,恢复对所述通信链路对应的读命令的处理。
15.根据权利要求14所述的方法,其特征在于,所述NVMe硬盘接收所述NOF引擎发送的拥塞解除标记,包括:
所述NVMe硬盘向所述NOF引擎发送命令读取请求,所述命令读取请求用于读取与所述通信链路对应的提交队列中的SQE命令;
所述NVMe硬盘接收所述NOF引擎发送的携带有所述拥塞解除标记的SQE命令。
16.根据权利要求14所述的方法,其特征在于,所述NVMe硬盘接收所述NOF引擎发送的拥塞解除标记,包括:
所述NVMe硬盘接收所述NOF引擎发送的指向第二自定义地址的寄存器写命令,所述第二自定义地址是用于存储所述拥塞解除标记的地址,所述寄存器写命令携带有与所述通信链路对应提交队列的标识和所述拥塞解除标记;
所述NVMe硬盘根据所述寄存器写命令对所述第二自定义地址进行写入操作。
17.根据权利要求14所述的方法,其特征在于,所述NVMe硬盘接收所述NOF引擎发送的拥塞解除标记,包括:
所述NVMe硬盘接收所述NOF引擎发送的具有第二自定义内容的管理命令,所述第二自定义内容携带有与所述通信链路对应提交队列的标识和所述拥塞解除标记。
18.根据权利要求15至17任一所述的方法,其特征在于,所述NVMe硬盘根据所述拥塞解除标记,恢复处理所述通信链路对应的读命令,包括:
所述NVMe硬盘根据所述拥塞解除标记执行如下操作中的至少一种操作:
恢复对所述提交队列的命令读取请求;
将从所述提交队列已经取回且尚未完成的读命令从挂机状态切换为执行状态;
将所述提交队列对应的调度权重提高至第二权重。
19.一种基于NOF的读取控制方法,其特征在于,应用于NOF引擎中,所述NOF引擎中设置有与通信链路对应的数据缓存,所述方法包括:
所述NOF引擎通过所述通信链路接收主机发送的读请求,所述读请求用于请求读取第一数据量的数据,所述第一数据量超过所述通信链路对应的数据缓存大小;
所述NOF引擎将所述读请求拆分为K个读命令,所述读命令用于请求读取第二数据量的数据,所述第二数据量小于所述第一数据量;
所述NOF引擎向NVMe硬盘发送m个所述读命令,m≤K,m与所述第二数据量的乘积不大于所述通信链路对应的数据缓存大小;
所述NOF引擎在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令。
20.根据权利要求19所述的方法,其特征在于,所述NOF引擎在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令之后,还包括:
所述NOF引擎接收所述NVMe硬盘根据所述m个读命令读取的数据;
所述NOF引擎将所述数据存储在所述通信链路对应的所述数据缓存中;
所述NOF引擎在所述通信链路解除拥塞时,将所述数据缓存中的所述数据通过所述通信链路发送至所述主机。
21.根据权利要求20所述的方法,其特征在于,所述NOF引擎在所述通信链路解除拥塞时,将所述数据缓存中的所述数据通过所述通信链路发送至所述主机之后,还包括:
所述NOF引擎继续向所述NVMe硬盘发送n个所述读命令,n≤K-m,n与所述第二数据量的乘积不大于所述通信链路对应的数据缓存大小。
22.一种基于NOF的读取控制装置,其特征在于,所述装置包括:
接收单元,用于通过通信链路接收主机发送的读请求;
发送单元,用于根据所述读请求向NVMe硬盘发送至少一个读命令;
处理单元,用于在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;
所述发送单元,用于向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。
23.一种基于NOF的读取控制装置,其特征在于,所述装置包括:
接收单元,用于接收NOF引擎发送的至少一个读命令,所述读命令是所述NOF引擎根据主机通过通信链路发送的读请求产生的;
所述接收单元,用于接收NOF引擎发送的拥塞标记,所述拥塞标记是所述NOF引擎在所述通信链路发送拥塞时发送的;
处理单元,用于根据所述拥塞标记,暂停处理所述通信链路对应的所述读命令。
24.一种基于NOF的读取控制装置,其特征在于,所述装置中设置有与通信链路对应的数据缓存,所述装置包括:
接收单元,用于通过所述通信链路接收主机发送的读请求,所述读请求用于请求读取第一数据量的数据,所述第一数据量超过所述通信链路对应的数据缓存大小;
处理单元,用于将所述读请求拆分为K个读命令,所述读命令用于请求读取第二数据量的数据,所述第二数据量小于所述第一数据量;
发送单元,用于向NVMe硬盘发送m个所述读命令,m≤K,m与所述第二数据量的乘积不大于所述通信链路对应的数据缓存大小;
处理单元,还用于在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令。
25.一种NOF引擎,其特征在于,所述NOF引擎包括:处理器和存储器,所述存储器存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如下步骤:
通过通信链路接收主机发送的读请求;
根据所述读请求向NVMe硬盘发送至少一个读命令;
在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;
向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。
26.一种NVMe硬盘,其特征在于,所述NVMe硬盘包括:控制器和存储器,所述存储器存储有至少一个指令,所述至少一个指令被所述控制器执行以实现如下步骤:
接收NOF引擎发送的至少一个读命令,所述读命令是所述NOF引擎根据主机通过通信链路发送的读请求产生的;
接收NOF引擎发送的拥塞标记,所述拥塞标记是所述NOF引擎在所述通信链路发送拥塞时发送的;
根据所述拥塞标记,暂停处理所述通信链路对应的所述读命令。
27.一种NOF引擎,其特征在于,所述NOF引擎包括:处理器和存储器,所述存储器包括与通信链路对应的数据缓存,所述存储器存储有至少一个指令,所述至少一个指令被所述处理器执行以实现如下步骤:
通过所述通信链路接收主机发送的读请求,所述读请求用于请求读取第一数据量的数据,所述第一数据量超过所述通信链路的数据缓存大小;
将所述读请求拆分为K个读命令,所述读命令用于请求读取第二数据量的数据,所述第二数据量小于所述第一数据量;
向NVMe硬盘发送m个所述读命令,m≤K,m与所述第二数据量的乘积不大于所述通信链路的数据缓存大小;
在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令。
28.一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一个指令,所述至少一个指令被执行时实现如下步骤:
通过通信链路接收主机发送的读请求;
根据所述读请求向NVMe硬盘发送至少一个读命令;
在所述通信链路发生拥塞时,生成所述通信链路对应的拥塞标记;
向所述NVMe硬盘发送所述拥塞标记,所述拥塞标记用于指示所述NVMe硬盘暂停处理所述通信链路对应的所述读命令。
29.一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一个指令,所述至少一个指令被执行时实现如下步骤:
接收NOF引擎发送的至少一个读命令,所述读命令是所述NOF引擎根据主机通过通信链路发送的读请求产生的;
接收NOF引擎发送的拥塞标记,所述拥塞标记是所述NOF引擎在所述通信链路发送拥塞时发送的;
根据所述拥塞标记,暂停处理所述通信链路对应的所述读命令。
30.一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一个指令,所述至少一个指令被执行时实现如下步骤:
通过通信链路接收主机发送的读请求,所述读请求用于请求读取第一数据量的数据,所述第一数据量超过所述数据缓存的缓存大小;
将所述读请求拆分为K个读命令,所述读命令用于请求读取第二数据量的数据,所述第二数据量小于所述第一数据量;
向NVMe硬盘发送m个所述读命令,m≤K,m与所述第二数据量的乘积不大于所述数据缓存的缓存大小;
在所述通信链路发生拥塞时,暂停向所述NVMe硬盘发送剩余的其它读命令。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711444963.0A CN109976661B (zh) | 2017-12-27 | 2017-12-27 | 基于nof的读取控制方法、装置及*** |
PCT/CN2018/123749 WO2019129023A1 (zh) | 2017-12-27 | 2018-12-26 | 基于nof的读取控制方法、装置及*** |
EP18893956.5A EP3722938B1 (en) | 2017-12-27 | 2018-12-26 | Nof based reading control method, device and system |
US16/911,736 US11301163B2 (en) | 2017-12-27 | 2020-06-25 | NOF-based read control method, apparatus, and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711444963.0A CN109976661B (zh) | 2017-12-27 | 2017-12-27 | 基于nof的读取控制方法、装置及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109976661A CN109976661A (zh) | 2019-07-05 |
CN109976661B true CN109976661B (zh) | 2020-08-14 |
Family
ID=67063161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711444963.0A Active CN109976661B (zh) | 2017-12-27 | 2017-12-27 | 基于nof的读取控制方法、装置及*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US11301163B2 (zh) |
EP (1) | EP3722938B1 (zh) |
CN (1) | CN109976661B (zh) |
WO (1) | WO2019129023A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471627B (zh) * | 2019-08-19 | 2022-06-21 | 北京首都在线科技股份有限公司 | 一种共享存储的方法、***及装置 |
CN110795367B (zh) * | 2019-10-23 | 2021-10-29 | 北京达佳互联信息技术有限公司 | 一种存储访问控制方法和装置 |
CN113076280B (zh) * | 2019-12-18 | 2024-03-01 | 华为技术有限公司 | 一种数据传输方法及相关设备 |
CN113932549A (zh) * | 2020-06-29 | 2022-01-14 | 海信(山东)冰箱有限公司 | 一种冰箱和rfid标签处理方法 |
CN112653634A (zh) * | 2020-12-10 | 2021-04-13 | 苏州浪潮智能科技有限公司 | 一种流量控制方法、装置、设备及可读存储介质 |
KR20220094726A (ko) * | 2020-12-29 | 2022-07-06 | 삼성전자주식회사 | 메모리 컨트롤러, 비휘발성 메모리 장치 및 그 스토리지 장치 |
US20220311716A1 (en) * | 2021-03-25 | 2022-09-29 | Nokia Solutions And Networks Oy | Supporting communications for data storage |
CN114489510A (zh) * | 2022-01-28 | 2022-05-13 | 维沃移动通信有限公司 | 数据读取方法及装置 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6765904B1 (en) * | 1999-08-10 | 2004-07-20 | Texas Instruments Incorporated | Packet networks |
DE602004021643D1 (de) * | 2004-09-10 | 2009-07-30 | Telecom Italia Spa | Verfahren und system zur verwaltung von funkbetriebsmitteln in mobilkommunikationsnetzen, diesbezügliches netz und computerprogrammprodukt dafür |
US7411911B2 (en) * | 2005-04-08 | 2008-08-12 | Cisco Technology, Inc. | Network availability status detection device and method |
US7606159B2 (en) * | 2005-08-30 | 2009-10-20 | Cisco Technology, Inc. | Method and apparatus for updating best path based on real-time congestion feedback |
US10180809B2 (en) * | 2006-05-17 | 2019-01-15 | Richard Fetik | Secure application acceleration system, methods and apparatus |
JP5074820B2 (ja) * | 2007-05-22 | 2012-11-14 | ルネサスエレクトロニクス株式会社 | 画像処理装置および画像処理方法 |
RU2515997C2 (ru) * | 2009-03-20 | 2014-05-20 | Телефонактиеболагет Л М Эрикссон (Пабл) | Активное управление очередью для восходящей линии связи в сети беспроводной связи |
WO2011120581A1 (en) * | 2010-03-31 | 2011-10-06 | Telefonaktiebolaget L M Ericsson (Publ) | Congestion handling in a communication network |
US8396072B2 (en) * | 2011-02-21 | 2013-03-12 | Renesas Mobile Corporation | Method and apparatus for channel traffic congestion avoidance in a mobile communication system |
US8644157B2 (en) * | 2011-03-28 | 2014-02-04 | Citrix Systems, Inc. | Systems and methods for handling NIC congestion via NIC aware application |
US9125098B2 (en) * | 2011-08-03 | 2015-09-01 | Qualcomm Incorporated | Method and apparatus for flow congestion control in multiflow networks |
CN102664803B (zh) * | 2012-04-23 | 2015-04-15 | 杭州华三通信技术有限公司 | 一种ef队列的实现方法和设备 |
CN104536701B (zh) * | 2014-12-23 | 2018-02-06 | 记忆科技(深圳)有限公司 | 一种nvme协议多命令队列的实现方法及*** |
US9734098B2 (en) * | 2015-03-31 | 2017-08-15 | Sandisk Technologies Llc | Memory bus management |
CN106775434B (zh) * | 2015-11-19 | 2019-11-29 | 华为技术有限公司 | 一种NVMe网络化存储的实现方法、终端、服务器及*** |
CN110413542B (zh) * | 2016-12-05 | 2023-08-22 | 华为技术有限公司 | NVMe over Fabric架构中数据读写命令的控制方法、设备和*** |
CN106612240B (zh) * | 2016-12-27 | 2019-07-30 | 郑州云海信息技术有限公司 | 一种存储高效网络连接***及方法 |
-
2017
- 2017-12-27 CN CN201711444963.0A patent/CN109976661B/zh active Active
-
2018
- 2018-12-26 EP EP18893956.5A patent/EP3722938B1/en active Active
- 2018-12-26 WO PCT/CN2018/123749 patent/WO2019129023A1/zh unknown
-
2020
- 2020-06-25 US US16/911,736 patent/US11301163B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3722938A1 (en) | 2020-10-14 |
US20200326879A1 (en) | 2020-10-15 |
EP3722938B1 (en) | 2023-02-08 |
US11301163B2 (en) | 2022-04-12 |
WO2019129023A1 (zh) | 2019-07-04 |
CN109976661A (zh) | 2019-07-05 |
EP3722938A4 (en) | 2021-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109976661B (zh) | 基于nof的读取控制方法、装置及*** | |
US11176068B2 (en) | Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link | |
US11899596B2 (en) | System and method for facilitating dynamic command management in a network interface controller (NIC) | |
CN106980582B (zh) | 数据处理方法和装置 | |
CN108062285B (zh) | 一种访问NVMe存储设备的方法和NVMe存储设备 | |
EP3873062A1 (en) | Data transmission method, system, and proxy server | |
KR100284790B1 (ko) | 멀티노드 비동기 데이타 통신 시스템 내의 조기 도달 메시지처리 방법 | |
CN109936510A (zh) | 多路径rdma传输 | |
EP2871580B1 (en) | Programmed input/output mode | |
TW200814672A (en) | Method and system for a user space TCP offload engine (TOE) | |
WO2006090408A2 (en) | Input/output tracing in a protocol offload system | |
CN113687770B (zh) | 调节跨速率失配网络的NVMe-oF命令请求和数据流的***和方法 | |
US7788437B2 (en) | Computer system with network interface retransmit | |
CN107517167B (zh) | 一种数据传输控制方法、装置及SoC芯片 | |
TW200947957A (en) | Non-block network system and packet arbitration method thereof | |
US11275698B2 (en) | Termination of non-volatile memory networking messages at the drive level | |
CN113572582A (zh) | 数据发送、重传控制方法及***、存储介质及电子设备 | |
CN114745331B (zh) | 一种拥塞通知方法及设备 | |
CN110830386A (zh) | 报文保序的方法、装置和*** | |
US20200065276A1 (en) | Dropped command truncation for efficient queue utilization in multiprocessor data processing system | |
CN101594291B (zh) | 非阻塞式网络***及其分组仲裁方法 | |
CN114928573A (zh) | 一种数据的传输方法及*** | |
CN113254202A (zh) | 一种基于万兆以太网口的5g基站前传无损抓包方法 | |
CN117880197A (zh) | 汇聚以实现拥塞管理 | |
CN117692389A (zh) | Rdma报文信息重传方法、装置、电子设备及存储介质 |
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 |