CN115033521A - 网络接口卡、消息收发方法和存储装置 - Google Patents

网络接口卡、消息收发方法和存储装置 Download PDF

Info

Publication number
CN115033521A
CN115033521A CN202110209930.8A CN202110209930A CN115033521A CN 115033521 A CN115033521 A CN 115033521A CN 202110209930 A CN202110209930 A CN 202110209930A CN 115033521 A CN115033521 A CN 115033521A
Authority
CN
China
Prior art keywords
message
rdma
controller
write
nvme
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.)
Pending
Application number
CN202110209930.8A
Other languages
English (en)
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 CN202110209930.8A priority Critical patent/CN115033521A/zh
Priority to PCT/CN2022/076499 priority patent/WO2022179417A1/zh
Priority to EP22758782.1A priority patent/EP4287034A4/en
Publication of CN115033521A publication Critical patent/CN115033521A/zh
Priority to US18/454,182 priority patent/US11968260B2/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of 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/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/143Termination or inactivation of sessions, e.g. event-controlled end of session
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/40Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass for recovering from a failure of a protocol instance or entity, e.g. service redundancy protocols, protocol state redundancy or protocol service redirection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/549Remote execution
    • 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/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请公开了一种网络接口卡、消息收发方法和存储装置,涉及存储领域,用于实现当某一控制器故障时不断开QP连接,提高存储装置的可靠性。网络接口卡包括:解析器和至少一个共享连接器,解析器接收来自主机客户端的与第一QP连接对应的第一SEND消息,并将第一SEND消息分发给至少一个共享连接器中的第一共享连接器;第一SEND消息包括RDMA操作命令;第一共享连接器根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息;检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息;从第二控制器获取WQE,WQE由第二控制器根据NVME信息得到;根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息。

Description

网络接口卡、消息收发方法和存储装置
技术领域
本申请涉及存储领域,尤其涉及一种网络接口卡、消息收发方法和存储装置。
背景技术
目前许多数据不是存储在本地,而是存储在远端的存储装置中。如图1所示,本申请实施例提供了一种存储系统,包括存储装置11、主机(host)客户端12。存储装置11通过前端网络(front-end fabric)连接主机客户端12,可以为多个主机客户端12提供数据存储服务。随着基于非易失性存储器规范(non volatile memory express,NVMe)的固态驱动器(solid state disk,SSD)的兴起,越来越多的前端网络采用基于交换网的NVMe(NVMe overfabric,NoF)网络。远程直接内存访问(remote direct memory access,RDMA)是NoF网络中的一种标准,可以降低存储装置存取数据的时延。
如图1所示,存储装置11中包括多个控制器111、至少一个网络接口卡(networkinterface card,NIC)112和存储阵列113。前端网络采用RDMA网络时,主机客户端可以与一个控制器111建立一对一的队列对(queue pair,QP)连接,这种方式可靠性低,也就是说,当某一控制器发生故障时,会断开主机客户端与控制器之间的QP连接,存储装置将无法继续为主机客户端提供存储服务,影响了存储系统的可靠性。
发明内容
本申请实施例提供一种网络接口卡、消息收发方法和存储装置,用于实现当某一控制器故障时不断开QP连接,提高存储装置的可靠性。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种网络接口卡,包括:解析器和至少一个共享连接器,解析器,用于接收来自主机客户端的与第一队列队QP连接对应的第一发送SEND消息,并将第一SEND消息分发给至少一个共享连接器中的第一共享连接器;第一SEND消息包括远程直接内存访问RDMA操作命令;第一共享连接器,用于:根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的非易失性存储器规范NVME信息;检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息;从第二控制器获取工作队列元素WQE,WQE由第二控制器根据NVME信息得到;根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息。
本申请实施例提供的网络接口卡,通过第一QP连接接收到主机客户端的RDMA操作命令后,根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。当检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息,这样第二控制器可以继续根据NVME信息向主机客户端发送与第一QP连接对应的第一RDMA消息,实现当第一控制器故障时也不会断开第一QP连接,提高存储装置的可靠性。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送RDMA写消息之前,发生断开事件,第一RDMA消息为RDMA写消息。该实施方式可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作过程中发生故障时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的首包期间发生断开事件,第一RDMA消息为RDMA写消息。该实施方式可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息的首包过程中发生故障时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的中间包或尾包期间发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示读操作完成,第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还用于:向主机客户端发送RDMA写消息的伪造尾包,伪造尾包的载荷随意填充,伪造尾包的报文序列号PSN为发生断开事件时RDMA写消息待发送的RDMA报文的PSN。该实施方式可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息的中间包或尾包过程中发生故障时,存储装置的网络接口卡向主机客户端发送RDMA写消息的伪造尾包,以结束当前的RDMA写操作,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息之后:在接收到RDMA写消息的否定确认消息之前,或者,由于接收到RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示读操作完成,第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还用于:向主机客户端发送RDMA写消息的伪造重传报文,伪造重传报文的报文序列号PSN为发生断开事件之前RDMA写消息的已发送的最后一个RDMA报文的PSN。该实施方式可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息之后,在接收到RDMA写消息的否定确认消息之前,或者,由于接收到RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,第一控制器发生故障,存储装置的网络接口卡向主机客户端发送RDMA写消息的伪造重传报文,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,发生断开事件,IO响应指示读操作完成,第一RDMA消息为第二SEND消息。该实施方式可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息之后,在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,第一控制器发生故障,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以重新发送包括IO响应的第二SEND消息。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO写命令,在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,发生断开事件,第一RDMA消息为RDMA读请求消息。该实施方式可以应用于由主机客户端向存储装置发送IO写命令,触发存储装置执行RDMA读操作的场景。在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA读操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为IO写命令,在第一控制器通过第一共享连接器接收RDMA读响应消息期间,发生断开事件第一RDMA消息为RDMA读请求消息,第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还用于:向主机客户端发送RDMA读响应消息对应的肯定确认消息。该实施方式可以应用于由主机客户端向存储装置发送IO写命令,触发存储装置执行RDMA读操作的场景。在第一控制器通过第一共享连接器接收RDMA读响应消息期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向主机客户端发送RDMA读响应消息对应的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA读操作能正常完成。
在一种可能的实施方式中,RDMA操作命令为包括立即数的IO写命令,在第一控制器通过第一共享连接器接收立即数期间,发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示接收立即数失败,第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还用于:向主机客户端发送第一SEND消息的肯定确认消息。该实施方式可以应用于由主机客户端向存储装置发送包括立即数的IO写命令,触发存储装置执行RDMA读操作的场景。在第一控制器通过第一共享连接器接收立即数期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向主机客户端发送第一SEND消息的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以发送包括IO响应的第二SEND消息,该IO响应指示接收立即数失败,以便主机客户端重新发送包括立即数的IO写命令和立即数。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了立即数的SEND操作能正常完成。
在一种可能的实施方式中,第一共享连接器,与第二控制器交互以使第二控制器获取NVME信息,包括:第一共享连接器向第二控制器发送通知消息,通知消息用于通知第二控制器获取NVME信息。该实施方式提供了使第二控制器获取NVME信息的一种方式。
在一种可能的实施方式中,第一共享连接器,与第二控制器交互以使第二控制器获取NVME信息,包括:第一共享连接器向第二控制器发送NVME信息。该实施方式提供了使第二控制器获取NVME信息的另一种方式。
第二方面,提供了一种消息收发方法,应用于如第一方面及其任一实施方式所述的网络接口卡,该方法包括:解析器接收来自主机客户端的与第一队列队QP连接对应的第一发送SEND消息,并将第一SEND消息分发给至少一个共享连接器中的第一共享连接器;第一SEND消息包括远程直接内存访问RDMA操作命令;第一共享连接器根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的非易失性存储器规范NVME信息;检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息;从第二控制器获取工作队列元素WQE,WQE由第二控制器根据NVME信息得到;根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送RDMA写消息之前,发生断开事件,第一RDMA消息为RDMA写消息。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的首包期间发生断开事件,第一RDMA消息为RDMA写消息。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的中间包或尾包期间发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示读操作完成,还包括:第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,向主机客户端发送RDMA写消息的伪造尾包,伪造尾包的载荷随意填充,伪造尾包的报文序列号PSN为发生断开事件时RDMA写消息待发送的RDMA报文的PSN。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息之后:在接收到RDMA写消息的否定确认消息之前,或者,由于接收到RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示读操作完成,还包括:第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,向主机客户端发送RDMA写消息的伪造重传报文,伪造重传报文的报文序列号PSN为发生断开事件之前RDMA写消息的已发送的最后一个RDMA报文的PSN。
在一种可能的实施方式中,RDMA操作命令为IO读命令,在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,发生断开事件,IO响应指示读操作完成,第一RDMA消息为第二SEND消息。
在一种可能的实施方式中,RDMA操作命令为IO写命令,在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,发生断开事件,第一RDMA消息为RDMA读请求消息。
在一种可能的实施方式中,RDMA操作命令为IO写命令,在第一控制器通过第一共享连接器接收RDMA读响应消息期间,发生断开事件第一RDMA消息为RDMA读请求消息,还包括:第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,向主机客户端发送RDMA读响应消息对应的肯定确认消息。
在一种可能的实施方式中,RDMA操作命令为包括立即数的IO写命令,在第一控制器通过第一共享连接器接收立即数期间,发生断开事件,第一RDMA消息为包括IO响应的第二SEND消息,IO响应指示接收立即数失败,还包括:第一共享连接器,在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,向主机客户端发送第一SEND消息的肯定确认消息。
在一种可能的实施方式中,与第二控制器交互以使第二控制器获取NVME信息,包括:第一共享连接器向第二控制器发送通知消息,通知消息用于通知第二控制器获取NVME信息。
在一种可能的实施方式中,与第二控制器交互以使第二控制器获取NVME信息,包括:第一共享连接器向第二控制器发送NVME信息。
第三方面,提供了一种存储装置,包括如第一方面及其任一实施方式所述的网络接口卡和多个控制器。
第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,所述指令在网络接口卡上运行,使得网络接口卡可以执行上述第二方面及其任一实施方式所述的方法。
第五方面,提供了一种包含指令的计算机程序产品,所述指令在网络接口卡上运行,使得所述网络接口卡可以执行上述第二方面及其任一实施方式所述的方法。
关于第二方面至第五方面的技术效果,参照第一方面及其任一实施方式的技术效果,在此不再重复。
附图说明
图1为本申请实施例提供的一种存储系统的架构示意图;
图2为本申请实施例提供的一种QP的示意图;
图3为本申请实施例提供的一种可靠连接的QP连接的示意图;
图4为本申请实施例提供的一种RDMA报文的PSN保序递增的示意图;
图5A为本申请实施例提供的一种基于IB协议的SEND消息和SEND消息的确认报文的结构示意图;
图5B为本申请实施例提供的一种基于RoCEv2协议的SEND消息和SEND消息的确认报文的结构示意图;
图6为本申请实施例提供的一种可靠连接的请求端与响应端之间的交互过程示意图;
图7A为本申请实施例提供的一种基于IB协议的RDMA WRITE消息和RDMA WRITE消息的确认报文的结构示意图;
图7B为本申请实施例提供的一种基于RoCEv2协议的RDMA WRITE消息和RDMAWRITE消息的确认报文的结构示意图;
图8为本申请实施例提供的另一种可靠连接的请求端与响应端之间的交互过程示意图;
图9A为本申请实施例提供的一种基于IB协议的RDMA READ请求消息和RDMA READ响应消息的结构示意图;
图9B为本申请实施例提供的一种基于RoCEv2协议的RDMA READ请求消息和RDMAREAD响应消息的结构示意图;
图10为本申请实施例提供的又一种可靠连接的请求端与响应端之间的交互过程示意图;
图11为本申请实施例提供的一种主机客户端与存储装置利用RDMA操作完成IO读写的过程的示意图;
图12为本申请实施例提供的另一种存储系统的架构示意图;
图13为本申请实施例提供的又一种存储系统的架构示意图;
图14为本申请实施例提供的一种消息收发方法的流程示意图一;
图15为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图一;
图16为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图一;
图17为本申请实施例提供的一种消息收发方法的流程示意图二;
图18为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图二;
图19为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图二;
图20为本申请实施例提供的一种消息收发方法的流程示意图三;
图21为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图三;
图22为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图三;
图23为本申请实施例提供的一种消息收发方法的流程示意图四;
图24为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图四;
图25为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图四;
图26为本申请实施例提供的一种消息收发方法的流程示意图五;
图27为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图五;
图28为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图五;
图29为本申请实施例提供的一种消息收发方法的流程示意图六;
图30为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图六;
图31为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图六;
图32为本申请实施例提供的一种消息收发方法的流程示意图七;
图33为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图七;
图34为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图七;
图35为本申请实施例提供的一种消息收发方法的流程示意图八;
图36本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的系统结构示意图八;
图37为本申请实施例提供的一种断开事件发生后对RDMA操作流程影响的流程示意图八;
图38为本申请实施例提供的一种消息收发方法的流程示意图九。
具体实施方式
如本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。
首先对本申请涉及的概念进行描述:
本申请涉及的存储装置可以称为存储服务器、存储阵列、刀片服务器等,对名称不作限定。存储装置可以包括至少一个控制器和至少一个网络接口卡(network interfacecard,NIC)。控制器可以包括但不限于处理器和存储器,处理器运行操作系统和应用程序。
本申请实施例涉及的处理器可以是一个芯片。例如,可以是现场可编程门阵列(field programmable gate array,FPGA),可以是专用集成芯片(application specificintegrated circuit,ASIC),还可以是系统芯片(system on chip,SoC),还可以是中央处理器(central processor unit,CPU),还可以是网络处理器(network processor,NP),还可以是数字信号处理电路(digital signal processor,DSP),还可以是微控制器(microcontroller unit,MCU),还可以是可编程控制器(programmable logic device,PLD)或其他集成芯片。
本申请实施例涉及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本申请实施例涉及的NIC也可以称为网络接口控制器(network interfacecontroller)、网络适配器(network adapter)、网卡等,或局域网适配器(LAN adapter),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。
存储装置为了提高系统的可靠性,会采用多控制器架构方案,支持多个控制器为一个或多个主机客户端提供数据存储服务。中高端存储装置会采用多主机(multi-host)NIC实现前端网络接口,多个控制器分别通过不同的高速串行计算机扩展总线标准(peripheral component interconnect,PCIe)通道共用一个NIC,每个控制器作为一个独立的网络节点。
存储装置通过前端网络连接主机客户端,可以为多个主机客户端提供数据存储服务。随着NVMe SSD的兴起,主机客户端访问存储装置的协议从小型计算机系统接口(smallcomputer system interface,SCSI)向NVMe过渡,相应地,前端网络也从光纤通道(fibrechannel,FC)网络、传输控制协议/网际协议(transmission control protocol/internetprotocol,TCP/IP)网络向NoF网络迁移。
NoF协议支持内存(memory)类型和消息(message)类型的操作,其中,PCIe支持内存类型的操作,FC支持消息类型的操作,RDMA支持内存类型和消息类型的操作。
RDMA可以通过前端网络将存储装置的存储空间中的数据作为消息,以RDMA报文形式传输至主机客户端的存储空间,或者,通过前端网络将主机客户端的存储空间中的数据作为消息,以RDMA报文形式传输至存储装置的存储空间。这些传输和拷贝工作主要由存储装置和主机客户端的网络接口卡(例如,RDMA网络接口卡(RDMA network interface card,RNIC))执行,不需要处理器执行,因此不影响主机客户端的性能。
目前,RDMA的硬件实现方式包括无限带宽(Infiniband,IB)、基于融合以太网的RDMA(RDMA over converged ethernet,RoCE)(包括RoCEv1和RoCEv2)、互联网广域RDMA协议(internet wide area RDMA protocol,iWARP)等。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输。RoCE和iWARP都是基于以太网的RDMA技术,支持相应的动词(Verbs)接口,RoCE也支持硬件级别保证可靠传输。
如图2所示,RDMA是传输层网络协议,在通道适配器(channel adapter,CA)中使用队列对(queue pair,QP)实现对消费者(consumer)的数据(作为消息)进行发送和接收。每个QP包含一个发送队列(send queue,SQ)和一个接收队列(receive queue,RQ),其中,SQ负责消息的发送,RQ负责消息的接收。每个QP的SQ和RQ可以分别关联一个完成队列(completion queue,CQ)。每个QP都拥有自己的连接上下文(connection context)用于维护其连接状态,SQ、RQ以及CQ也分别拥有自己的队列上下文(queue context)用于维护其队列使用状态。
本申请实施例中涉及的消费者指使用QP进行消息收发的主体,一般指软件进程,例如NoF协议软件。
发送消息时,消费者向本节点(作为请求端(requester))的QP中的SQ提交(post)工作队列元素(work queue element,WQE),该WQE包括RDMA操作类型、指向待传输的消息的存储空间的起始地址、待传输的消息的大小。待传输的数据作为一个消息,消息的长度支持0字节~2G字节,网络接口卡根据路径最大传输单元(path maximum transmission unit,PMTU)将WQE指向的数据分段(segmented)成报文(packet)后发送到网络。当网络接口卡将一个WQE指向的消息的所有内容传输完成后,向与SQ关联的CQ提交一个完成队列元素(completion queue element,CQE),以通知消费者完成了其提交的某个WQE指示的RDMA操作。
对于接收SEND消息,接收消息前,消费者预先向本节点(作为响应端(responder))的QP中的RQ提交WQE,该WQE包括能够存储数据的存储空间的指针、能够存储数据的存储空间的大小。网络接口卡从前端网络接收数据后写入到RQ的WQE指向的存储空间。当网络接口卡完成数据的接收后,向与RQ关联的CQ提交一个CQE,以通知消费者其完成了一个RDMA消息的接收。对于接收RDMA READ响应消息,网络接口卡将接收的数据写入对应的RDMA READ操作的WQE指向的存储空间,并且对于接收RDMA READ响应消息的尾包或单包,当网络接口卡完成数据的接收后,向与SQ关联的CQ提交一个CQE,以通知消费者完成了其提交的某个WQE指示的RDMA READ操作。对于接收RDMA WRITE消息或RDMA SEND消息的确认报文,网络接口卡向与SQ关联的CQ提交一个CQE,以通知消费者完成了其提交的某个WQE指示的RDMA WRITE操作或RDMA SEND操作。关于SEND消息、RDMA READ响应消息和RDMA WRITE消息的确认报文见后面的描述。
RDMA支持可靠连接的QP连接和不可靠连接的QP连接,其中可靠连接的QP连接只支持一对一通信模型,即一个节点上的一个QP只能与其它节点的一个QP建立QP连接,任何QP都不能同时与其它节点的多个QP建立QP连接。示例性的,如图3所示,节点1的消费者A的QPx与节点2的消费者B的QP a建立QP连接,节点1的消费者A的QP x不能再同时与其他QP(例如QP b、QP c)建立QP连接。NoF使用支持可靠连接的QP连接的RDMA进行通信。
RDMA中接收的可靠连接的QP连接的报文应遵循严格保序的要求,响应端根据依次接收的报文中的报文序列号(packet sequence numbers,PSN)是否严格保序递增来决定是否接收报文。如图4中A所示,只有当报文的PSN严格递增(例如,报文的PSN依次等于n、n+1、n+2、n+3)时响应端才接收报文。如图4中B所示,当报文的PSN发生跳变(例如,报文的PSN缺少n+2)时,响应端会丢弃该QP后续所有PSN未严格递增的报文。如图4中C所示,当报文的PSN与已接收报文的PSN重复(例如,重复接收到PSN为n+1的报文)时则响应端会丢弃重复报文。
RDMA支持的消息类型的操作包括发送操作(SEND operation),该操作涉及处理器,适用于传输控制类报文(或称命令消息)。
RDMA支持的内存类型的操作包括RDMA读操作(RDMA READ operation)、RDMA写操作(RDMA WRITE operation)。这些操作不涉及处理器,数据的读或写都通过网络接口卡操作存储空间来完成,适用于传输数据类报文(或称数据消息)。
下面分别对发送操作、RDMA读操作和RDMA写操作进行说明:
发送操作
发送操作也可以称为推送操作(push operation)或具有通道方式(havingchannel semantics)。请求端(requester)将数据推送给响应端(responder),而不必知道数据在响应端中存储的位置。响应端的通道适配器(channel adapter)将数据放入其QP的下一个可用存储空间,存储空间由QP的RQ中位于头部的WQE指示。
请求端可以通过发送SEND消息来发起发送操作,该消息中包括待推送给响应端的数据。数据的长度可以在0字节到231(2G)字节之间,如果数据的长度大于路径最大传输单元(path maximum transmission unit,PMTU),将按照PMTU大小分段为多个报文,响应端再将这些报文重新组合得到数据。对于可靠连接,如果数据是短消息(即不必分段为多个报文),响应端针对每个报文向请求端发送确认(ACK)报文;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)报文,或者,针对同一消息的连续多个报文向请求端发送一个确认报文,或者,针对消息的尾包向请求端发送确认报文;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)报文,例如,一个PSN为X的SEND消息的确认报文可以用于确认该SEND消息之前的PSN小于X的消息已被响应端成功接收。
每个SEND消息中可以包括四字节的立即数(immediate data,ImmDt),如果要包括立即数,则在SEND消息的最后一个报文的附加头字段中(立即扩展传输头或ImmDt字段)中包括该立即数。
示例性的,假设SEND消息被分段为三个报文,则基于IB协议的SEND消息和SEND消息的确认报文的结构如图5A所示,基于RoCEv2协议的SEND消息和SEND消息的确认报文的结构如图5B所示,可靠连接的请求端与响应端之间的交互过程如图6所示。
其中,本地路由头(local route header,LRH)字段用于通过子网中的交换机进行路由。
全局路由头(global route header,GRH)字段用于路由至发送方的本地子网之外的目标。
不变CRC(invariant CRC,ICRC)字段覆盖了报文不应该改变的所有字段,并对这些字段进行CRC校验。
可变CRC(variant CRC,VCRC)字段覆盖了报文的所有字段,并对这些字段进行CRC校验。
确认扩展传输头(ACK extended transport header,AETH)包括确认报文的附加传输字段,其包含在SEND消息的每个确认报文中。
媒体访问控制(media access control,MAC)字段用于通过以太网子网中的交换机进行二层转发。
互联网协议(internet protocol,IP)字段用于通过交换机进行三层转发。
用户数据报协议(user datagram protocol,UDP)字段用于指示报文的载荷是RDMA消息。
基本传输头(base transport header,BTH)字段用于指示目的QP(destinationQP)、操作码(operation code)、报文序列号(packet sequence numbers,PSN)和分区(partition)。BTH字段中的操作码字段(OpCode field)决定了SEND消息的起始和结束:
对于SEND消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“SENDOnly”或“SEND Only with Immediate”,表示该消息不可拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“SEND Only”或“SEND Only withImmediate”,并且消息中不存在数据负载字段。对于BTH操作码为“SEND Only”的SEND消息,其他字段如图5A或图5B中的报文1所示;对于BTH操作码为“SEND Only with Immediate”的SEND消息,其他字段如图5A或图5B中的报文3所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“SEND First”,表示该报文为首包;中间的报文的BTH操作码为“SEND Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“SEND Last”或“SEND Last with Immediate”,表示该报文为尾包。
对于SEND消息的确认报文来说,BTH操作码为“Acknowledge”。
对于给定的请求端的QP,一旦启动多包的发送操作,在操作码为“SEND Last”或“SEND Last with Immediate”的报文之前,不能发送其他SEND消息、RDMA WRITE消息或RDMA READ请求消息。
响应端直到最后一个带有“SEND Last”或“SEND Last with Immediate”操作码的报文到达,才知道数据的最终长度。
需要说明的是,响应端在完成对SEND消息的单包或尾包完成接收后,向本节点的RQ关联的CQ上报CQE,请求端在完成发送操作的发送流程(接收SEND消息的单包或尾包对应的确认报文)后,向本节点的SQ关联的CQ提交CQE。
RDMA写操作
RDMA写操作用于请求端将数据写入响应端的存储空间。
在允许请求端进行RDMA写操作之前,响应端首先分配一个存储空间供响应端的QP(或QP组)访问。响应端的通道适配器将一个32位M_Key密钥与此存储空间的虚拟地址相关联。响应端将该存储空间的虚拟地址、长度和M_Key密钥发送给可以访问该内存区域的请求端。示例性的,可以通过前文所述的发送操作来将上述信息发送给请求端。
请求端可以通过发送RDMA WRITE消息来发起RDMA写操作,该消息中包括待写至响应端的数据、响应端的存储空间的虚拟地址、数据的长度和M_Key密钥。数据的长度可以在0字节到231字节之间,与发送操作类似的,如果数据的长度大于PMTU,将按照PMTU大小分段为多个报文,响应端再将这些报文重新组合得到数据。对于可靠连接,如果数据是短消息(即不必分段为多个报文),响应端针对每个报文向请求端发送确认(ACK)报文;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)报文,或者,针对同一数据的连续多个报文向请求端发送一个确认报文,或者,针对报文的尾包向请求端发送确认报文;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)报文,例如,一个PSN为X的RDMA WRITE消息的确认报文可以用于确认该RDMA WRITE消息之前的PSN小于X的消息已被响应端成功接收。
示例性的,假设RDMA WRITE消息被分段为三个报文,则基于IB协议的RDMA WRITE消息和RDMA WRITE消息的确认报文的结构如图7A所示,基于RoCEv2协议的RDMA WRITE消息和RDMA WRITE消息的确认报文的结构如图7B所示。可靠连接的请求端与响应端之间的交互过程如图8所示。
其中,RDMA扩展传输头(RDMA extended transport header,RETH)包括RDMA操作的附加传输字段。例如,包括目标存储空间的虚拟地址、RDMA操作的数据的长度和M_Key密钥。响应端根据M_Key密钥确定请求端具有访问对应的虚拟地址的权限,将该长度指示的数据存储至虚拟地址指向的存储空间中。
与SEND操作类似的,BTH字段中的操作码字段(OpCode field)决定了RDMA WRITE消息的起始和结束:
对于RDMA WRITE消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“RDMA WRITE Only”或“RDMA WRITE Only with Immediate”,表示该消息不拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“RDMA WRITE Only”或“RDMA WRITE Onlywith Immediate”,并且报文中不存在数据负载字段。对于BTH操作码为“RDMA WRITE Only”的RDMA WRITE消息,其他字段如图7A或图7B中的报文1所示;对于BTH操作码为“RDMA WRITEOnly with Immediate”的RDMA WRITE消息,在如图7A或图7B中的报文1的RETH字段之后增加ImmDt字段,其他字段如报文1所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“RDMA WRITE first”,表示该报文为首包;中间的报文的BTH操作码为“RDMA WRITE Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“RDMA WRITE Last”或“RDMA WRITE Last with Immediate”,表示该报文为尾包。
对于RDMA WRITE消息的确认报文来说,BTH操作码为“Acknowledge”。
RDMA读操作
RDMA读操作是RDMA写操作的反向操作,用于请求端读取响应端的存储空间中的数据。
在允许请求端进行RDMA读操作之前,响应端首先允许请求端访问其虚拟地址,即将RDMA读操作要读取的数据的虚拟地址、长度和M_Key密钥发送给请求端。示例性的,可以通过前文所述的发送操作来将上述信息发送给请求端。
请求端可以通过发送RDMA READ请求(RDMA READ Request)消息来发起RDMA读操作,该消息中包括响应端的存储空间的虚拟地址、RDMA操作的数据的长度和M_Key密钥。响应端向请求端发送RDMA READ响应(RDMA READ Response)消息,该消息中包括读取的数据。待读取的数据的长度可以在0字节到231字节之间,如果长度大于PMTU,将按照PMTU大小分段为多个报文,以便通过多个RDMA READ响应消息的报文进行传输,请求端再将这些报文重新组合得到数据。对于可靠连接,RDMA READ响应消息没有相应的确认报文,请求端如果发现RDMA READ响应消息丢包,会重新发起RDMA读操作。
示例性的,假设RDMA READ响应消息被分段为三个报文,则基于IB协议的RDMAREAD请求消息和RDMA READ响应消息的结构如图9A所示,基于RoCEv2协议的RDMA READ请求消息和RDMA READ响应消息的结构如图9B所示。可靠连接的请求端与响应端之间的交互过程如图10所示。
BTH字段中的操作码字段(OpCode field)决定了消息(RDMA READ请求消息或RDMAREAD响应消息)的起始和结束:
对于RDMA READ请求消息来说,BTH操作码为“RDMA READ Request”。
对于RDMA READ响应消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“RDMA READ Response Only”,表示该消息不可拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“RDMA READ Response Only”,并且RDMA读响应消息中不存在数据负载字段,但所有其他字段如图9A或图9B中的报文1所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“RDMA READ Responsefirst”,表示该报文为首包;中间的报文的BTH操作码为“RDMA READ Response Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“RDMA READ Response Last”,表示该报文为尾包。
主机客户端与存储装置利用上述RDMA操作完成IO读写的过程如图11所示:
主机客户端首先在网络中发现存储装置并与存储装置建立连接。
在主机客户端向存储装置进行IO写过程中,主机客户端向存储装置发送SEND消息,该报文的数据负载即为IO写命令,对于可靠连接,存储装置可以向主机客户端发送SEND消息的确认报文,表示接收到IO写命令。然后存储装置(作为请求端)向主机客户端(作为响应端)发送RDMA READ请求消息,主机客户端向存储装置发送RDMA READ响应消息,该报文的数据负载即为IO数据。存储装置对IO数据进行持久化存储后,即将IO数据存储至硬盘驱动器(hard disk drive,HDD)或固态硬盘(solid state drives,SSD)等存储介质后,向主机客户端发送SEND消息,该报文中包括IO响应,表示完成IO写过程,主机客户端向存储装置发送SEND消息的确认报文,表示接收到IO响应。
在主机客户端向存储装置进行IO读过程中,主机客户端向存储装置发送SEND消息,该报文的数据负载即为IO读命令,对于可靠连接,存储装置可以向主机客户端发送SEND消息的确认报文,表示接收到IO读命令。存储装置获取IO数据后,即从HDD或SSD等存储介质获取IO数据后,存储装置(作为请求端)向主机客户端(作为响应端)发送RDMA WRITE消息,该报文的数据负载即为IO数据,主机客户端向存储装置发送RDMA WRITE消息的确认报文。存储装置向主机客户端发送SEND消息,该报文中包括IO响应,表示完成IO读过程,主机客户端向存储装置发送SEND消息的确认报文,表示接收到IO响应。
从中可以看出,完整的IO写过程是通过SEND操作来传递命令消息(例如命令请求和命令应答),通过RDMA READ操作来传递数据消息;完整的IO读过程是通过SEND操作来传递命令消息,通过RDMA WRITE操作来传递数据消息。
基于图1所示的存储系统,如图12所示,存储装置11与主机客户端12之间采用RDMA来实现前端网络时的架构如图12所示。
存储装置11的每个控制器111中实现NoF协议软件(也可以称为NoF协议栈)和驱动(driver),主机客户端12中也实现NoF协议软件和驱动,NoF协议软件和驱动运行在处理器中,NoF协议软件作为应用程序,驱动为NoF协议软件提供了控制网络接口卡的接口。
存储装置11的每个控制器111作为一个节点对应至少一个QP,多个控制器111共用网络接口卡(例如RNIC)112。主机客户端12包括网络接口卡(例如RNIC)121,根据需要可以通过网络接口卡121使用1个QP与存储装置11的中1个控制器111的QP建立可靠连接,也可以使用多个QP与存储装置11的多个控制器111的QP分别建立可靠连接。
控制器111将来自主机客户端的数据存储至存储阵列113或者从存储阵列113读取数据并通过网络接口卡112发送给主机客户端。
当主机客户端通过NoF网络与存储装置建立连接时,由存储装置的NIC根据哈希(Hash)策略选择其中一个控制器与主机客户端建立QP连接。主机客户端并不感知存储装置中哪个控制器提供服务。当某一控制器发生故障时,主机客户端会因为收不到存储装置的应答而将主机客户端与控制器之间的QP连接断开,则存储装置将无法为主机客户端提供存储服务,影响了存储系统的可靠性,而且用户可以感知到故障。
本申请实施例中,在存储装置可以通过多个控制器中的一个控制器来为主机客户端服务的场景下,当某一控制器发生故障后,NIC将发送给故障控制器的报文分发到正常工作的控制器,由正常工作的控制器维持QP连接状态并进行应答,从而使主机客户端不感知故障,因此不会造成QP连接断开。
为此,如图13所示,本申请实施例提供了另一种网络接口卡、存储装置和存储系统。
存储装置11包括多个控制器111、至少一个网络接口卡(例如RNIC)112和存储阵列113。网络接口卡112可以支持多个主机客户端,例如支持2个或大于2个主机接口(例如PCIe接口),网络接口卡112可以支持PCIe标准,后续也可以支持其它的接口标准。
网络接口卡112中包括解析器(parser)1121、调度器1122、至少一个共享连接器1123以及QP缓存1124。解析器1121、调度器1122和至少一个共享连接器1123可以是专用集成电路(application specific integrated circuit,ASIC)芯片模块,可以是烧录到可编程逻辑器件(programble logic device,PLD)的固件(firmware),也可以是处理器、微处理器或嵌入式处理器运行的软件模块,本申请不作限定。
在每个控制器111上分别建立至少一个QP(也可以称为SQ/RQ对,名称不作限定)以及与至少一个QP关联的CQ。共享连接器1123与多个控制器111分别进行连接,并且多个控制器中每个控制器111与共享连接器1123对应一个QP。网络接口卡112通过将多个控制器111中的QP的WQE(SQ的WQE和RQ的WQE)缓存(cache)至网络接口卡112的QP缓存1124中来实现对QP的操作。
可以由主机客户端12发起请求来与存储装置11的至少一个共享连接器1123建立至少一条QP连接,该QP连接可以为可靠连接或不可靠连接。也就是说,存储装置11通过至少一个共享连接器1123分别与主机客户端12(的至少一个QP)建立至少一条QP连接,每条QP连接对应一个共享连接器1123以及每个控制器111的一个QP。上述一个共享连接器1123以及每个控制器111的一个QP可以合称为一个QP组,即一条QP连接对应一个QP组,并且对应QP组内一个共享连接器1123和每个控制器111的一个QP。一条QP连接对应的控制器数可以随着控制器的上下电而动态增加或减少。
该共享连接器1123对主机客户端12可见而控制器111中各个QP对主机客户端12不可见,即存储装置11的网络接口卡112通过共享连接器1123与主机客户端12的网络接口卡121通信,并且与主机客户端12的一个QP之间建立一条QP连接。
可以将标准协议中RDMA QP中的队列上下文(queue context)承载在QP上,连接上下文(connection context)承载在共享连接器1123上。一个QP组内所有QP都使用同一个连接上下文,使用一套保序递增的PSN。
对于存储装置11接收来自主机客户端12的第一RDMA报文:
解析器1121,用于将接收的第一RDMA报文分发给至少一个共享连接器1123中的一个共享连接器1123。
共享连接器1123,用于与对端网络设备(例如主机客户端)建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一QP,以实现与第一控制器进行通信,从而将第一RDMA报文通知给对应的消费者。其中,多个控制器111包含第一控制器。
具体的,无论是命令消息还是数据消息,同一消息都可以被分段为多个报文,而可用于分发的信息一般只存在于消息的第一个报文内。共享连接器1123根据负载均衡原理将IO命令请求的第一个报文分发给正常工作的控制器111进行存储并保存第一个报文与控制器111对应关系,使得来自一个主机客户端12的不同IO命令请求及对应的数据消息可以被分发到不同的控制器111并行处理,提升处理性能。如果后续接收到该消息的后续报文,共享连接器1123可以利用RDMA传输的保序特性而将后续报文对应到第一个报文,根据对应的第一个报文以及第一个报文与控制器111的对应关系来分发到对应的控制器111,保持同一消息的报文在分发上的一致性。
对于不同消息,如果接收到命令消息,则共享连接器1123根据负载均衡原理分发给正常工作的控制器111进行存储并保存命令消息与控制器111对应关系,使得来自一个主机客户端12的多个命令消息可以被分发到不同的控制器111并行处理,提升处理性能。控制器完成对IO读写请求消息的处理后,发起IO数据传输操作,即由本控制器向对应的QP提交对应的RDMA写操作或RDMA读操作的WQE。第一共享连接器在接收到RDMA写操作的确认报文或RDMA读操作的响应消息后,根据第一RDMA报文的PSN分发给发起该操作的第一控制器的第一QP,保持命令消息和数据消息在分发上的一致性。
对于存储装置11向主机客户端12发送第一RDMA消息:
调度器1122,用于从在位的多个控制器111的多个QP中选择一个有消息待发送的第二QP。
共享连接器1123,用于向主机客户端12发送第二QP对应的存储空间中的第一RDMA消息。
当某一控制器有消息待传输时,控制器的QP的SQ中增加一个或多个WQE,该WQE指向待传输的消息的存储空间,QP产生门铃(doorbell)信号,调度器获取门铃信号。该门铃信号用于指示对应的控制器的QP的SQ中的WQE指向的存储空间中有消息(数据消息或命令消息)待发送。
调度器1122汇聚来自各个QP的门铃信号,并不会直接触发发送RDMA消息,而是根据预设规则从中选择一个门铃信号进行响应,对应的QP即为第二QP,第二QP所在的控制器要正常工作。
本申请不限定具体的预设规则,在一种可能的实施方式中,调度器可以通过轮询调度(round robin,RR)从与第二共享连接器对应的多个QP(位于不同控制器)中选择第二QP。预设规则还可以包括其他方式,例如加权轮询调度(weighted round robin,WRR)、动态加权(dynamic weighted round robin,DWRR)等。无论何种预设规则,在调度时可以跳过未在位的控制器的QP以及空闲的QP。
调度器1122确定有控制器111要发送消息后,按照调度算法选择对应的共享连接器来发送消息,由共享连接器1123通过对应的QP连接发送给对应的主机客户端12,从而实现公平发送。并且对于同一QP连接的来自不同控制器111的消息,在发送给主机客户端12之前,保证PSN保序递增,使主机客户端12以为在与存储装置11的一个QP进行通信。
共享连接器1123在发送消息之前将消息分段为RDMA报文,而同一QP组内不同控制器的QP间的调度的粒度是基于WQE的,即一个QP被调度后需要连续发送完WQE指向的存储空间中存储的消息,不能被同一个QP组内其它QP打断。不同QP组之间的调度是独立的,互不影响。
共享连接器1123在发送本QP组内的多个QP的消息时,使用同一套PSN,即本QP组内不同QP的RDMA报文携带的PSN是由同一个计数器递增得到的,使得主机客户端的网络接口卡认为这些RDMA报文来自存储装置的一个QP。
综上所述,多个控制器111可以并行工作为同一条QP连接提供存储服务,当有控制器111发生故障时只要有一个控制器111正常工作,可以将后续的消息重定向分发给正常工作的控制器111处理,从而保证主机客户端12访问存储装置11中的存储阵列113,提高可靠性,实现存储装置11的控制器的主用-主用(active-active,AA)功能。并且通过同一QP连接接收的不同IO命令请求可以分发给不同QP所在的控制器进行并行处理,因此可以提升单个QP连接的存储访问性能。
共享连接器1123可以管理NVME信息,NVME信息指存储装置与主机客户端的网络接口卡之间的交互信息,即NVME信息存储在网络接口卡中而不是控制器中,因此当一个控制器故障时,NVME信息不会丢失,共享连接器1123可以通过切换控制器来为主机客户端提供服务,新的控制器基于NVME信息来维持与主机客户端的通信,不会断开QP连接,实现主机客户端不会感知控制器的故障。
具体的,存储装置的网络接口卡可以执行如图14所示的消息收发方法,该方法包括:
S1401、解析器接收来自主机客户端的与第一QP连接对应的第一SEND消息,并将第一SEND消息分发给至少一个共享连接器中的第一共享连接器。
主机客户端在前端网络中发现存储装置,并通过至少一个QP,与存储装置的至少一个共享连接器中的第一共享连接器建立至少一条QP连接。这样,主机客户端即可以通过至少一条QP连接与存储装置互相传输数据。
主机客户端向存储装置发送与第一QP连接(至少一条QP连接中的一个)对应的第一SEND消息,则解析器可以根据第一QP连接找到对应的第一共享连接器。具体的,第一SEND消息中包括队列对编号(queue pair number,QPN),QPN是QP连接唯一的标识,解析器可以根据第一SEND消息中的QPN确定对应的第一QP连接以及建立该第一QP连接的第一共享连接器,并将第一SEND消息分发给该第一共享连接器。
第一SEND消息中包括RDMA操作命令,RDMA操作命令可能包括IO读命令、IO写命令或带立即数的IO写命令。其中,对于带立即数的IO写命令,立即数位于SEND消息的最后一个报文的附加头字段中。
IO读命令中包括主机客户端的内存地址、存储装置的地址信息和数据大小。其中,IO读命令指示RDMA操作类型为RDMA读操作,主机客户端的内存地址指示RDMA读操作从存储装置读取数据后存储至主机客户端中的内存地址,存储装置的地址信息指示RDMA读操作从存储装置中读取数据的地址,数据大小指示RDMA读操作要读取的数据的大小。
IO写命令包括主机客户端的内存地址、存储装置的地址信息和数据大小。其中,IO写命令指示RDMA操作类型为RDMA写操作,主机客户端的内存地址指示RDMA写操作从主机客户端中的内存地址中存储数据存储至存储装置中,存储装置的地址信息指示RDMA写操作存储至存储装置中的地址,数据大小指示RDMA写操作要存储的数据的大小。
带立即数的IO写命令包括存储装置的地址信息和数据大小。其中,带立即数的IO写命令指示RDMA操作类型为带立即数的RDMA写操作,存储装置的地址信息指示RDMA写操作存储至存储装置中的地址,数据大小指示RDMA写操作要存储的数据的大小。
S1402、第一共享连接器根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
第一共享连接器针对不同的QP连接维护不同的NVME信息,即每个QP连接对应一个NVME信息。由于一条QP连接对应一个QP组,即对应多个控制器,所以第一共享连接器维护第一QP连接对应的NVME信息,即可管理第一QP连接的多个控制器的收发数据。
NVME信息包括RDMA操作类型、NVMe IO状态、存储装置的地址信息和数据大小,可选的,还包括主机客户端的内存地址。
其中,NVME信息中的RDMA操作类型可以来自RDMA操作命令,例如,当RDMA操作命令为IO读命令时,则RDMA操作类型为RDMA写操作;当RDMA操作命令为IO写命令时,RDMA操作类型为RDMA读操作;当RDMA操作命令为带立即数的IO写命令时,则RDMA操作类型为立即数的SEND操作。
NVMe IO状态不仅与RDMA操作命令相关,还与RDMA操作当前阶段有关。
例如,当RDMA操作命令为IO读命令,存储装置在RDMA写操作过程中,如果还未发送RDMA写消息,则NVMe IO状态为接收到IO读命令而未发送RDMA写消息;如果发送完RDMA写消息,还未发送包括IO响应的SEND消息,则NVMe IO状态为接收到IO读命令而未发送IO响应。
当RDMA操作命令为IO写命令,存储装置在RDMA读操作过程中,如果还未发送RDMA读请求消息,则NVMe IO状态为接收到IO写命令而未发送RDMA读请求消息。
当RDMA操作命令为包括立即数的IO写命令,如果还未接收立即数,则NVMe IO状态为接收到包括立即数的IO写命令而未接收到立即数。
NVME信息中的存储装置的地址信息来自RDMA操作命令中的存储装置的地址信息。
NVME信息中的数据大小来自RDMA操作命令中的数据大小。
NVME信息中的主机客户端的内存地址来自RDMA操作命令中的主机客户端的内存地址。
假设此时网络接口卡根据特定算法(例如哈希算法),选择第一控制器来处理上述RDMA操作,则第一共享连接器确定该NVME信息可以发送给第一控制器。
S1403、第一共享连接器检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息。
第一控制器发生故障时,例如,第一控制器的PCIe发生不可恢复的高级错误报告(advanced error reporting,AER),第一控制器接收数据的进程发生故障等,第一共享连接器与第一控制器之间链路会断开,从而产生断开事件。
第一共享连接器可以清除第一控制器已提交的所有WQE,以免再次通过第一控制器来读写数据。
第一共享连接器可以根据特定算法(例如哈希算法),重新选择一个正常工作的第二控制器,并与第二控制器交互以使第二控制器获取NVME信息。
在一种可能的实施方式中,第一共享连接器可以向第二控制器发送NVME信息,使第二控制器获取NVME信息。
在另一种可能的实施方式中,第一共享连接器可以向第二控制器发送通知消息(例如异步事件),该通知消息用于通知第二控制器获取NVME信息,第二控制器接收到通知消息后,可以从网络接口卡获取NVME信息。
需要说明的是,在第一控制器发生故障之前,第一共享连接器还可以与第一控制器交互以使第一控制器获取NVME信息,具体方式可以参照第一共享连接器与第二控制器交互以使第二控制器获取NVME信息的相关描述,在此不再重复。
S1404、第一共享连接器从第二控制器获取WQE,WQE由第二控制器根据NVME信息得到。
第二控制器接收到NVME信息后,第二控制器在发送消息时,在其QP的SQ中增加一个或多个WQE,并产生门铃信号,该WQE指向RDMA操作涉及的数据在存储装置中的存储空间。
该WQE中包括RDMA操作类型(由NVME信息中的RDMA操作类型得到)、指向待传输的IO数据的存储空间的起始地址(由NVME信息中的存储装置的地址信息得到)、待传输的IO数据的大小(由NVME信息中的数据大小得到)。可选的,对于RDMA写操作和RDMA读操作,该WQE中还包括主机客户端的内存地址(由NVME信息中的主机客户端的内存地址得到)。
S1405、第一共享连接器根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息。
调度器汇聚来自各个QP的门铃信号,根据预设规则从中选择一个门铃信号进行响应,调度器按照调度算法选择对应的第一共享连接器来获取WQE。
由于每个QP连接对应一个NVME信息,而WQE是由NVME信息得到的,所以QP连接与WQE是对应的,根据WQE生发送的第一RDMA报文也是与第一QP连接对应的。该对应关系具体表现在:第一共享连接器在发送本QP组内的多个QP(位于不同控制器)的RDMA消息时,使用同一套PSN,来自不同控制器的RDMA消息携带的PSN是由同一个计数器递增得到的,使得主机客户端的网络接口卡认为这些RDMA消息来自存储装置的第一QP。这样即使有控制器故障导致切换控制器来提供存储服务,主机客户端也不会感知。
需要说明的是,对于第一共享连接器在基于第一控制器提交的WQE发送第一QP连接对应的RDMA消息期间,如果第一控制器发生故障,则第一共享连接器在基于第二控制器提交的WQE发送第一QP连接对应的第一RDMA消息时,第一个RDMA报文采用之前未发送成功的RDMA消息的PSN,并且后面再发送的RDMA报文基于该PSN进行保序递增。
根据RDMA操作命令以及断开事件发生时间的不同,第一RDMA消息也可能不同:
在一种可能的实施方式中,RDMA操作命令为IO读命令,并且在第一共享连接器向第一控制器发送NVME信息之前,发生断开事件,或者,在第一共享连接器向第一控制器发送NVME信息之后,使得第一控制器通过第一共享连接器发送RDMA写消息之前,发生断开事件,则第一RDMA消息为RDMA写消息。具体可以参照图17中描述。
在另一种可能的实施方式中,RDMA操作命令为IO读命令,并且在第一控制器通过第一共享连接器发送RDMA写消息的首包期间发生断开事件时,则第一RDMA消息为该RDMA写消息,也就是说,由第二控制器通过第一共享连接器重新发送RDMA写消息。具体可以参照图20中描述。
在另一种可能的实施方式中,RDMA操作命令为IO读命令,并且在第一控制器通过第一共享连接器发送RDMA写消息的中间包或尾包期间,发生断开事件,则第一RDMA消息为包括IO响应的第二SEND消息,其中,IO响应指示读操作完成。并且第一共享连接器在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还可以向主机客户端发送RDMA写消息的伪造尾包,主机客户端接收到伪造尾包后,会结束当前的RDMA写操作。具体可以参照图23中描述。
其中,RDMA写消息的伪造尾包是伪造的,即将RDMA写消息的RDMA报文的BTH操作码填充为“RDMA WRITE Last”,该伪造尾包的载荷随意填充,伪造尾包的PSN为发生断开事件时该RDMA写消息的待发送的RDMA报文的PSN。
在另一种可能的实施方式中,RDMA操作命令为IO读命令,并且在第一控制器通过第一共享连接器发送RDMA写消息之后:在接收到RDMA写消息的否定确认消息之前,发生断开事件,或者,由于接收到RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,发生断开事件,则第一RDMA消息为包括IO响应的第二SEND消息,其中,IO响应指示读操作完成。并且第一共享连接器在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还可以向主机客户端发送该RDMA写消息的伪造重传报文,伪造重传报文的PSN为发生断开事件之前该RDMA写消息的已发送的最后一个RDMA报文的PSN。具体可以参照图26中描述。
在另一种可能的实施方式中,RDMA操作命令为IO读命令,并且在第一控制器通过第一共享连接器发送包括IO响应的SEND消息期间,发生断开事件,其中,IO响应指示读操作完成,则第一RDMA消息为包括该IO响应的SEND消息。具体可以参照图29中描述。
在另一种可能的实施方式中,RDMA操作命令为IO写命令,并且在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,发生断开事件,则第一RDMA消息为RDMA读请求消息。具体可以参照图32中描述。
主机客户端接收到RDMA读请求消息之后,可以向存储装置发送RDMA读响应消息,该RDMA读响应消息中包括IO数据。RDMA读响应消息用于将IO数据从主机客户端的内存地址写入存储装置的存储空间中。当IO数据较长时,RDMA读响应消息可以有多个,即可以拆分为多个RDMA报文。
在另一种可能的实施方式中,RDMA操作命令为IO写命令,并且断开事件发生在第一控制器通过第一共享连接器接收RDMA读响应消息期间,则第一RDMA消息为RDMA读请求消息。并且第一共享连接器在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还可以向主机客户端发送RDMA读响应消息对应的肯定确认消息。具体可以参照图35中描述。
在另一种可能的实施方式中,RDMA操作命令为包括立即数的IO写命令,并且在第一控制器通过第一共享连接器接收立即数期间,发生断开事件,则第一RDMA消息为包括IO响应的第二SEND消息,其中,IO响应指示接收立即数失败。第一共享连接器在根据WQE向主机客户端发送与第一QP连接对应的第一RDMA消息之前,还可以向主机客户端发送第一SEND消息的肯定确认消息。具体可以参照图38中描述。
本申请实施例提供的网络接口卡和消息收发方法,通过第一QP连接接收到主机客户端的RDMA操作命令后,根据RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。当检测到与第一控制器之间链路的断开事件时,与第二控制器交互以使第二控制器获取NVME信息,这样第二控制器可以继续根据NVME信息向主机客户端发送与第一QP连接对应的第一RDMA消息,实现当第一控制器故障时也不会断开第一QP连接,提高存储装置的可靠性。
如图15和图16所示,对于主机客户端向存储装置发送IO读命令以触发存储装置执行RDMA写操作的场景:存储装置的网络接口卡收到IO读命令,在第一共享连接器向第一控制器发送NVME信息之前,第一控制器发生故障,或者,在第一共享连接器向第一控制器发送NVME信息之后,使得第一控制器通过第一共享连接器发送RDMA写消息之前,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得IO读命令(即NVME信息中的RDMA操作类型)无法到达第一控制器,或者,第一控制器无法发送RDMA写消息。此时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA写消息以及IO响应。
具体的,如图17所示,本申请实施例提供的消息收发方法包括:
S1701、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
第一SEND消息中包括IO读命令。
其他内容可以参照步骤S1401,在此不再重复。
S1702、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
由于存储装置的网络接口卡接收到IO读命令,将触发存储装置执行RDMA写操作,而根据RDMA写操作的流程,首先要发送RDMA写消息,所以NVME信息中的RDMA操作类型为RDMA写操作,NVME信息中的NVMe IO状态为接收到IO读命令而未发送RDMA写消息。
其他内容可以参照步骤S1402,在此不再重复。
S1703、在第一共享连接器向第一控制器发送NVME信息之前,存储装置的第一控制器发生故障,或者,在第一共享连接器向第一控制器发送NVME信息之后,使得第一控制器通过第一共享连接器发送RDMA写消息之前,存储装置的第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S1704、存储装置的第二控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
由于NVME信息中的NVMe IO状态为接收到IO读命令而未发送RDMA写消息,所以第二控制器根据RDMA写操作的流程知道接下来要发送RDMA写消息,因此提交RDMA写操作的WQE。
该步骤其他内容可以参照步骤S1404,在此不再重复。
S1705、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
此时,RDMA写消息即为前文所述的第一RDMA消息。
RDMA写消息中包括IO数据,RDMA写消息用于将IO数据从存储装置的存储空间写入主机客户端的内存地址中。当IO数据较长时,RDMA写消息可以有多个,即可以拆分为多个RDMA报文。主机客户端在接收到RDMA写消息后可以向存储装置发送RDMA写消息的确认报文。
其他内容可以参照步骤S1405,在此不再重复。
S1706、存储装置的第二控制器在发送完IO数据之后,提交SEND操作的WQE。
该WQE中包括RDMA操作类型为SEND操作。
S1707、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该SEND消息中包括IO响应,IO响应指示由主机客户端触发的RDMA写操作已经完成。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作过程中发生故障时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
如图18和图19所示,对于主机客户端向存储装置发送IO读命令以触发存储装置执行RDMA写操作的场景:存储装置的网络接口卡收到IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的首包期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得第一控制器无法继续发送RDMA写消息。此时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。
具体的,如图20所示,本申请实施例提供的消息收发方法包括:
S2001、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
该步骤可以参照步骤S1701,在此不再重复。
S2002、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
该步骤可以参照步骤S1702,在此不再重复。
S2003、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2004、第一控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第一控制器获取该WQE。
该步骤可以参照步骤S1404,在此不再重复。
S2005、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
RDMA写消息中包括IO数据,RDMA写消息用于将IO数据从存储装置的存储空间写入主机客户端的内存地址中。当IO数据较长时,RDMA写消息可以有多个,即可以拆分为多个RDMA报文。主机客户端在接收到RDMA写消息后可以向存储装置发送RDMA写消息的确认报文。
S2006、存储装置的第一控制器在发送RDMA写消息的首包时发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2007、存储装置的第二控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
该步骤可以参照步骤S1704,在此不再重复。
S2008、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
此时,RDMA写消息即为前文所述的第一RDMA消息。
第一共享连接器在基于第二控制器提交的WQE发送第一QP连接对应的第一RDMA消息时,第一个RDMA报文采用之前未发送成功的RDMA消息的PSN,并且后面再发送的RDMA报文基于该PSN进行保序递增。
其他内容可以参照步骤S1405,在此不再重复。
S2009、存储装置的第二控制器在发送完IO数据之后,提交SEND操作的WQE。
该步骤可以参照步骤S1706,在此不再重复。
S2010、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该步骤可以参照步骤S1707,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息的首包过程中发生故障时,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
如图21和图22所示,对于主机客户端向存储装置发送IO读命令以触发存储装置执行RDMA写操作的场景:存储装置的网络接口卡收到IO读命令,在第一控制器通过第一共享连接器发送RDMA写消息的中间包或尾包期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得第一控制器无法继续发送RDMA写消息。此时,网络接口卡向主机客户端发送RDMA写消息的伪造尾包,以结束当前的RDMA写操作,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。
具体的,如图23所示,本申请实施例提供的消息收发方法包括:
S2301、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
该步骤可以参照步骤S1701,在此不再重复。
S2302、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
该步骤可以参照步骤S1702,在此不再重复。
S2303、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2304、第一控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第一控制器获取该WQE。
该步骤可以参照步骤S1404,在此不再重复。
S2305、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
此时,RDMA写消息即为前文所述的第一RDMA消息。
其他内容可以参照步骤S1405,在此不再重复。
S2306、存储装置的第一控制器在发送RDMA写消息的中间包或尾包时发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,向主机客户端发送RDMA写消息的伪造尾包。
关于RDMA写消息的伪造尾包见步骤S1405中相关描述,在此不再重复。
S2307、网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2308、存储装置的第二控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
该步骤可以参照步骤S1704,在此不再重复。
S2309、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
该步骤可以参照步骤S1705,在此不再重复。
S2310、存储装置的第二控制器在发送完IO数据之后,提交SEND操作的WQE。
该步骤可以参照步骤S1706,在此不再重复。
S2311、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该步骤可以参照步骤S1707,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息的中间包或尾包过程中发生故障时,存储装置的网络接口卡向主机客户端发送RDMA写消息的伪造尾包,以结束当前的RDMA写操作,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
如图24和图25所示,对于主机客户端向存储装置发送IO读命令以触发存储装置执行RDMA写操作的场景:存储装置的网络接口卡收到IO读命令,在第一控制器通过第一共享连接器发送完RDMA写消息之后:在接收到RDMA写消息的否定确认消息之前,或者,由于接收到该RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得第一控制器无法发送RDMA写消息的重传报文。此时,网络接口卡向主机客户端发送RDMA写消息的伪造重传报文,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。
具体的,如图26所示,本申请实施例提供的消息收发方法包括:
S2601、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
该步骤可以参照步骤S1701,在此不再重复。
S2602、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
该步骤可以参照步骤S1702,在此不再重复。
S2603、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2604、第一控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第一控制器获取该WQE。
该步骤可以参照步骤S1404,在此不再重复。
S2605、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
该步骤可以参照步骤S2005,在此不再重复。
S2606、在接收到RDMA写消息的否定确认消息之前,或者,由于接收到该RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,存储装置的第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,向主机客户端发送RDMA写消息的伪造重传报文。
关于RDMA写消息的伪造重传报文见步骤S1405中相关描述,在此不再重复。
S2607、网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2608、存储装置的第二控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
该步骤可以参照步骤S1704,在此不再重复。
S2609、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
该步骤可以参照步骤S1705,在此不再重复。
S2610、存储装置的第二控制器在发送完IO数据之后,提交SEND操作的WQE。
该步骤可以参照步骤S1706,在此不再重复。
S2611、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该步骤可以参照步骤S1707,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息之后,在接收到RDMA写消息的否定确认消息之前,或者,由于接收到RDMA写消息的否定确认消息而发送RDMA写消息的重传报文之前,第一控制器发生故障,存储装置的网络接口卡向主机客户端发送RDMA写消息的伪造重传报文,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA写消息以及IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
如图27和图28所示,对于主机客户端向存储装置发送IO读命令以触发存储装置执行RDMA写操作的场景:存储装置的网络接口卡收到IO读命令,在第一控制器通过第一共享连接器发送完RDMA写消息之后,在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得第一控制器无法发送包括IO响应的第二SEND消息。此时,网络接口卡向向第二控制器发送NVME信息,使得第二控制器可以重新发送包括IO响应的第二SEND消息。
具体的,如图29所示,本申请实施例提供的消息收发方法包括:
S2901、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
该步骤可以参照步骤S1701,在此不再重复。
S2902、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
该步骤可以参照步骤S1702,在此不再重复。
S2903、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2904、第一控制器根据NVME信息提交RDMA写操作的WQE,使得存储装置的网络接口卡从第一控制器获取该WQE。
该步骤可以参照步骤S1404,在此不再重复。
S2905、存储装置的网络接口卡根据RDMA写操作的WQE向主机客户端发送与第一QP连接对应的RDMA写消息。
该步骤可以参照步骤S2005,在此不再重复。
S2906、存储装置的网络接口卡根据IO读命令以及RDMA写操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
在发送完RDMA写消息之后,存储装置的网络接口卡将NVME信息中的NVMe IO状态更新为接收到IO读命令而未发送IO响应,NVME信息中其他内容不变。
其他内容可以参照步骤S1402,在此不再重复。
S2907、在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,存储装置的第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S2908、存储装置的第二控制器根据NVME信息提交SEND操作的WQE。
由于NVME信息中的NVMe IO状态为接收到IO读命令而未发送IO响应,所以第二控制器根据RDMA写操作的流程知道接下来要发送包括IO响应的SEND消息,因此提交SEND操作的WQE。
该步骤可以参照步骤S1706,在此不再重复。
S2909、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该第二SEND消息中包括IO响应。此时,第二SEND消息即为前文所述的第一RDMA消息。
该步骤可以参照步骤S1707,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO读命令,触发存储装置执行RDMA写操作的场景。当存储装置的第一控制器在执行相应的RDMA写操作以发送RDMA写消息之后,在第一控制器通过第一共享连接器发送包括IO响应的第二SEND消息期间,第一控制器发生故障,存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以重新发送包括IO响应的第二SEND消息。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA写操作能正常完成。
如图30和图31所示,对于主机客户端向存储装置发送IO写命令以触发存储装置执行RDMA读操作的场景:存储装置的网络接口卡收到IO写命令,在第一共享连接器向第一控制器发送NVME信息之前,第一控制器发生故障,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得IO写命令(即NVME信息中的RDMA操作类型)无法到达第一控制器,或者,第一控制器无法发送RDMA读请求消息。此时,由存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。
具体的,如图32所示,本申请实施例提供的消息收发方法包括:
S3201、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
第一SEND消息中包括IO写命令。
其他内容可以参照步骤S1401,在此不再重复。
S3202、存储装置的网络接口卡根据IO写命令以及RDMA读操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
由于存储装置的网络接口卡接收到IO写命令,将触发存储装置执行RDMA读操作,而根据RDMA读操作的流程,首先要发送RDMA读请求消息,所以NVME信息中的RDMA操作类型为RDMA读操作,NVME信息中的NVMe IO状态为接收到IO写命令而未发送RDMA读请求消息。
其他内容可以参照步骤S1402,在此不再重复。
S3203、在第一共享连接器向第一控制器发送NVME信息之前,存储装置的第一控制器发生故障,或者,在第一共享连接器向第一控制器发送NVME信息之后,第一控制器通过第一共享连接器发送完RDMA读请求消息之前,存储装置的第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S3204、存储装置的第二控制器根据NVME信息提交RDMA读操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
由于NVME信息中的NVMe IO状态为接收到IO写命令而未发送RDMA读请求消息,所以第二控制器根据RDMA读操作的流程知道接下来要发送RDMA读请求消息,因此提交RDMA读操作的WQE。
该步骤其他内容可以参照步骤S1404,在此不再重复。
S3205、存储装置的网络接口卡根据RDMA读操作的WQE向主机客户端发送与第一QP连接对应的RDMA读请求消息。
此时,RDMA读请求消息即为前文所述的第一RDMA消息。
其他内容可以参照步骤S1405,在此不再重复。
S3206、主机客户端向存储装置发送RDMA读响应消息。
该RDMA读响应消息中包括IO数据。RDMA读响应消息用于将IO数据从主机客户端的内存地址写入存储装置的存储空间中。当IO数据较长时,RDMA读响应消息可以有多个,即可以拆分为多个RDMA报文。
其他内容可以参照步骤S1405,在此不再重复。
S3207、存储装置的第二控制器在接收完IO数据之后,提交SEND操作的WQE。
该WQE中包括RDMA操作类型为SEND操作。
S3208、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该SEND消息中包括IO响应,IO响应指示由主机客户端触发的RDMA读操作已经完成。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO写命令,触发存储装置执行RDMA读操作的场景。在第一共享连接器向第一控制器发送NVME信息之前,或者,在第一控制器通过第一共享连接器发送完RDMA读请求消息之前,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向第二控制器发送NVME信息,使得第二控制器可以发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA读操作能正常完成。
如图33和图34所示,对于主机客户端向存储装置发送IO写命令以触发存储装置执行RDMA读操作的场景:存储装置的网络接口卡收到IO写命令,在第一控制器通过第一共享连接器接收RDMA读响应消息期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得RDMA读响应消息中的IO数据无法存储到存储装置的存储空间。此时,存储装置的网络接口卡向主机客户端发送RDMA读响应消息对应的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。
具体的,如图35所示,本申请实施例提供的消息收发方法包括:
S3501、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
该步骤可以参照步骤S3201,在此不再重复。
S3502、存储装置的网络接口卡根据IO写命令以及RDMA读操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
该步骤可以参照步骤S3202,在此不再重复。
S3503、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S3504、第一控制器根据NVME信息提交RDMA读操作的WQE,使得存储装置的网络接口卡从第一控制器获取该WQE。
该步骤可以参照步骤S3204,在此不再重复。
S3505、存储装置的网络接口卡根据RDMA读操作的WQE向主机客户端发送与第一QP连接对应的RDMA读请求消息。
该步骤可以参照步骤S3205,在此不再重复。
S3506、主机客户端向存储装置发送RDMA读响应消息。
该步骤可以参照步骤S1405,在此不再重复。
S3507、在第一控制器通过第一共享连接器接收RDMA读响应消息期间,存储装置的第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡向主机客户端发送RDMA读响应消息对应的肯定确认消息。
该步骤可以参照步骤S1405,在此不再重复。
S3508、网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S3509、存储装置的第二控制器根据NVME信息提交RDMA读操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
该步骤可以参照步骤S3204,在此不再重复。
S3510、存储装置的网络接口卡根据RDMA读操作的WQE向主机客户端发送与第一QP连接对应的RDMA读请求消息。
该步骤可以参照步骤S3205,在此不再重复。
S3511、主机客户端向存储装置发送RDMA读响应消息。
该步骤可以参照步骤S3206,在此不再重复。
S3512、存储装置的第二控制器在接收完IO数据之后,提交SEND操作的WQE。
该步骤可以参照步骤S3207,在此不再重复。
S3513、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
该步骤可以参照步骤S3208,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送IO写命令,触发存储装置执行RDMA读操作的场景。在第一控制器通过第一共享连接器接收RDMA读响应消息期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向主机客户端发送RDMA读响应消息对应的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以重新发送RDMA读请求消息,接收RDMA读响应消息以及发送IO响应。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了RDMA读操作能正常完成。
如图36和图37所示,对于主机客户端向存储装置发送包括立即数的IO写命令,触发存储装置存储立即数的场景:存储装置的网络接口卡接收到包括立即数的IO写命令,在第一控制器通过第一共享连接器接收立即数期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,使得立即数无法存储到存储装置的存储空间。此时,存储装置的网络接口卡向主机客户端发送第一SEND消息的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以发送包括IO响应的第二SEND消息,该IO响应指示接收立即数失败,以便主机客户端重新发送包括立即数的IO写命令和立即数。
具体的,如图38所示,本申请实施例提供的消息收发方法包括:
S3801、主机客户端向存储装置发送与第一QP连接对应的第一SEND消息。
第一SEND消息中包括了包括立即数的IO写命令以及立即数,其中,立即数位于SEND消息的最后一个报文的附加头字段中。
其他内容可以参照步骤S1401,在此不再重复。
S3802、存储装置的网络接口卡根据包括立即数的IO写命令以及立即数的SEND操作当前阶段得到发送给第一控制器的与第一QP连接对应的NVME信息。
由于存储装置的网络接口卡接收到包括立即数的IO写命令,根据立即数的SEND操作的流程,存储装置接下来要接收来自主机客户端的立即数,所以NVME信息中的RDMA操作类型为立即数的SEND操作,NVME信息中的NVMe IO状态为接收到包括立即数的IO写命令而未接收到立即数。
该步骤其他内容可以参照步骤S1402,在此不再重复。
S3803、网络接口卡与第一控制器交互以使第一控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S3804、在存储装置的第一控制器通过第一共享连接器接收立即数期间,第一控制器发生故障,存储装置的网络接口卡检测到与第一控制器之间链路的断开事件,网络接口卡向主机客户端发送SEND消息对应的肯定确认消息。
网络接口卡根据包括立即数的IO写命令中的数据大小接收立即数,接收完立即数后直接丢弃。
该步骤其他内容可以参照步骤S1405,在此不再重复。
S3805、网络接口卡与第二控制器交互以使第二控制器获取NVME信息。
该步骤可以参照步骤S1403,在此不再重复。
S3806、存储装置的第二控制器根据NVME信息提交SEND操作的WQE,使得存储装置的网络接口卡从第二控制器获取该WQE。
由于NVME信息中的NVMe IO状态为接收到包括立即数的IO写命令而未接收到立即数,所以第二控制器根据立即数的SEND操作的流程知道接下来要发送包括IO响应的第二SEND消息,该IO响应指示接收立即数失败,以便主机客户端重新发送包括立即数的IO写命令和立即数,因此提交SEND操作的WQE。
该步骤其他内容可以参照步骤S1404,在此不再重复。
S3807、存储装置的网络接口卡根据SEND操作的WQE向主机客户端发送与第一QP连接对应的第二SEND消息。
第二SEND消息包括IO响应,IO响应指示接收立即数失败。此时,第二SEND消息即为前文所述的第一RDMA消息。
该步骤可以参照步骤S3205,在此不再重复。
本申请实施例提供的消息收发方法,可以应用于由主机客户端向存储装置发送包括立即数的IO写命令,触发存储装置执行RDMA读操作的场景。在第一控制器通过第一共享连接器接收立即数期间,第一控制器发生故障,从而产生网络接口卡与第一控制器之间的链路的断开事件,则存储装置的网络接口卡向主机客户端发送第一SEND消息的肯定确认消息,并向第二控制器发送NVME信息,使得第二控制器可以发送包括IO响应的第二SEND消息,该IO响应指示接收立即数失败,以便主机客户端重新发送包括立即数的IO写命令和立即数。存储装置的网络接口卡能够将当前的RDMA操作平滑切换到正常工作的第二控制器上,可以使主机客户端不感知控制器发生故障,保障了立即数的SEND操作能正常完成。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,指令在网络接口卡上运行,使得网络接口卡执行图14、图16、图17、图19、图20、图22图23、图25、图26、图28、图29、图31、图32、图34、图35、图37、图38中网络接口卡对应的方法。
本申请实施例还提供了一种包含指令的计算机程序产品,指令在网络接口卡上运行,使得网络接口卡执行图14、图16、图17、图19、图20、图22图23、图25、图26、图28、图29、图31、图32、图34、图35、图37、图38中网络接口卡对应的方法。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (23)

1.一种网络接口卡,其特征在于,包括:解析器和至少一个共享连接器,
所述解析器,用于接收来自主机客户端的与第一队列队QP连接对应的第一发送SEND消息,并将所述第一SEND消息分发给所述至少一个共享连接器中的第一共享连接器;所述第一SEND消息包括远程直接内存访问RDMA操作命令;
所述第一共享连接器,用于:
根据所述RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与所述第一QP连接对应的非易失性存储器规范NVME信息;
检测到与所述第一控制器之间链路的断开事件时,与第二控制器交互以使所述第二控制器获取所述NVME信息;
从所述第二控制器获取工作队列元素WQE,所述WQE由所述第二控制器根据所述NVME信息得到;
根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息。
2.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO读命令,在所述第一共享连接器向所述第一控制器发送NVME信息之前,或者,在所述第一控制器通过所述第一共享连接器发送RDMA写消息之前,发生所述断开事件,所述第一RDMA消息为RDMA写消息。
3.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息的首包期间发生所述断开事件,所述第一RDMA消息为所述RDMA写消息。
4.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息的中间包或尾包期间发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示读操作完成,所述第一共享连接器,在所述根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,还用于:
向所述主机客户端发送所述RDMA写消息的伪造尾包,所述伪造尾包的载荷随意填充,所述伪造尾包的报文序列号PSN为发生所述断开事件时所述RDMA写消息待发送的RDMA报文的PSN。
5.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息之后:在接收到所述RDMA写消息的否定确认消息之前,或者,由于接收到所述RDMA写消息的否定确认消息而发送所述RDMA写消息的重传报文之前,发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示读操作完成,所述第一共享连接器,在所述根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,还用于:
向所述主机客户端发送所述RDMA写消息的伪造重传报文,所述伪造重传报文的报文序列号PSN为发生所述断开事件之前所述RDMA写消息的已发送的最后一个RDMA报文的PSN。
6.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送包括IO响应的第二SEND消息期间,发生所述断开事件,所述IO响应指示读操作完成,所述第一RDMA消息为所述第二SEND消息。
7.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO写命令,在所述第一共享连接器向所述第一控制器发送所述NVME信息之前,或者,在所述第一控制器通过所述第一共享连接器发送完RDMA读请求消息之前,发生所述断开事件,所述第一RDMA消息为RDMA读请求消息。
8.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为IO写命令,在所述第一控制器通过所述第一共享连接器接收RDMA读响应消息期间,发生所述断开事件所述第一RDMA消息为RDMA读请求消息,所述第一共享连接器,在根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,还用于:
向所述主机客户端发送所述RDMA读响应消息对应的肯定确认消息。
9.根据权利要求1所述的网络接口卡,其特征在于,所述RDMA操作命令为包括立即数的IO写命令,在所述第一控制器通过所述第一共享连接器接收立即数期间,发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示接收立即数失败,所述第一共享连接器,在根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,还用于:
向所述主机客户端发送所述第一SEND消息的肯定确认消息。
10.根据权利要求1-9任一项所述的网络接口卡,其特征在于,所述第一共享连接器,与第二控制器交互以使所述第二控制器获取所述NVME信息,包括:
所述第一共享连接器向所述第二控制器发送通知消息,所述通知消息用于通知所述第二控制器获取所述NVME信息。
11.根据权利要求1-9任一项所述的网络接口卡,其特征在于,所述第一共享连接器,与第二控制器交互以使所述第二控制器获取所述NVME信息,包括:
所述第一共享连接器向所述第二控制器发送所述NVME信息。
12.一种消息收发方法,其特征在于,应用于如权利要求1-11任一项所述的网络接口卡,所述方法包括:
所述解析器接收来自主机客户端的与第一队列队QP连接对应的第一发送SEND消息,并将所述第一SEND消息分发给所述至少一个共享连接器中的第一共享连接器;所述第一SEND消息包括远程直接内存访问RDMA操作命令;
所述第一共享连接器根据所述RDMA操作命令以及RDMA操作当前阶段得到发送给第一控制器的与所述第一QP连接对应的非易失性存储器规范NVME信息;检测到与所述第一控制器之间链路的断开事件时,与第二控制器交互以使所述第二控制器获取所述NVME信息;从所述第二控制器获取工作队列元素WQE,所述WQE由所述第二控制器根据所述NVME信息得到;根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息。
13.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO读命令,在所述第一共享连接器向所述第一控制器发送NVME信息之前,或者,在所述第一控制器通过所述第一共享连接器发送RDMA写消息之前,发生所述断开事件,所述第一RDMA消息为RDMA写消息。
14.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息的首包期间发生所述断开事件,所述第一RDMA消息为所述RDMA写消息。
15.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息的中间包或尾包期间发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示读操作完成,还包括:
所述第一共享连接器,在所述根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,向所述主机客户端发送所述RDMA写消息的伪造尾包,所述伪造尾包的载荷随意填充,所述伪造尾包的报文序列号PSN为发生所述断开事件时所述RDMA写消息待发送的RDMA报文的PSN。
16.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送RDMA写消息之后:在接收到所述RDMA写消息的否定确认消息之前,或者,由于接收到所述RDMA写消息的否定确认消息而发送所述RDMA写消息的重传报文之前,发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示读操作完成,还包括:
所述第一共享连接器,在所述根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,向所述主机客户端发送所述RDMA写消息的伪造重传报文,所述伪造重传报文的报文序列号PSN为发生所述断开事件之前所述RDMA写消息的已发送的最后一个RDMA报文的PSN。
17.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO读命令,在所述第一控制器通过所述第一共享连接器发送包括IO响应的第二SEND消息期间,发生所述断开事件,所述IO响应指示读操作完成,所述第一RDMA消息为所述第二SEND消息。
18.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO写命令,在所述第一共享连接器向所述第一控制器发送所述NVME信息之前,或者,在所述第一控制器通过所述第一共享连接器发送完RDMA读请求消息之前,发生所述断开事件,所述第一RDMA消息为RDMA读请求消息。
19.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为IO写命令,在所述第一控制器通过所述第一共享连接器接收RDMA读响应消息期间,发生所述断开事件所述第一RDMA消息为RDMA读请求消息,还包括:
所述第一共享连接器,在根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,向所述主机客户端发送所述RDMA读响应消息对应的肯定确认消息。
20.根据权利要求12所述的方法,其特征在于,所述RDMA操作命令为包括立即数的IO写命令,在所述第一控制器通过所述第一共享连接器接收立即数期间,发生所述断开事件,所述第一RDMA消息为包括IO响应的第二SEND消息,所述IO响应指示接收立即数失败,还包括:
所述第一共享连接器,在根据所述WQE向所述主机客户端发送与所述第一QP连接对应的第一RDMA消息之前,向所述主机客户端发送所述第一SEND消息的肯定确认消息。
21.根据权利要求12-20任一项所述的方法,其特征在于,所述与第二控制器交互以使所述第二控制器获取所述NVME信息,包括:
所述第一共享连接器向所述第二控制器发送通知消息,所述通知消息用于通知所述第二控制器获取所述NVME信息。
22.根据权利要求12-20任一项所述的方法,其特征在于,所述与第二控制器交互以使所述第二控制器获取所述NVME信息,包括:
所述第一共享连接器向所述第二控制器发送所述NVME信息。
23.一种存储装置,其特征在于,包括如权利要求1-11任一项所述的网络接口卡和多个控制器。
CN202110209930.8A 2021-02-24 2021-02-24 网络接口卡、消息收发方法和存储装置 Pending CN115033521A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202110209930.8A CN115033521A (zh) 2021-02-24 2021-02-24 网络接口卡、消息收发方法和存储装置
PCT/CN2022/076499 WO2022179417A1 (zh) 2021-02-24 2022-02-16 网络接口卡、消息收发方法和存储装置
EP22758782.1A EP4287034A4 (en) 2021-02-24 2022-02-16 NETWORK INTERFACE CARD, MESSAGE TRANSMISSION/RECEPTION METHOD AND STORAGE DEVICE
US18/454,182 US11968260B2 (en) 2021-02-24 2023-08-23 Network interface card, message sending and receiving method, and storage apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110209930.8A CN115033521A (zh) 2021-02-24 2021-02-24 网络接口卡、消息收发方法和存储装置

Publications (1)

Publication Number Publication Date
CN115033521A true CN115033521A (zh) 2022-09-09

Family

ID=83048660

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110209930.8A Pending CN115033521A (zh) 2021-02-24 2021-02-24 网络接口卡、消息收发方法和存储装置

Country Status (4)

Country Link
US (1) US11968260B2 (zh)
EP (1) EP4287034A4 (zh)
CN (1) CN115033521A (zh)
WO (1) WO2022179417A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115623018A (zh) * 2022-11-30 2023-01-17 苏州浪潮智能科技有限公司 基于多设备节点的共享系统
CN115657975A (zh) * 2022-12-29 2023-01-31 浪潮电子信息产业股份有限公司 一种磁盘数据读写控制方法、相关组件及前端共享卡

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12047296B2 (en) * 2021-08-12 2024-07-23 Viscore Technologies Inc. Scalable loss tolerant remote direct memory access over optical infrastructure with shaped quota management
CN116582492B (zh) * 2023-07-14 2023-09-26 珠海星云智联科技有限公司 优化rdma读取的拥塞控制方法、系统及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7636772B1 (en) * 2000-10-19 2009-12-22 International Business Machines Corporation Method and apparatus for dynamic retention of system area network management information in non-volatile store
US7962562B1 (en) * 2004-04-30 2011-06-14 Netapp, Inc. Multicasting message in a network storage system to local NVRAM and remote cluster partner
US8458280B2 (en) * 2005-04-08 2013-06-04 Intel-Ne, Inc. Apparatus and method for packet transmission over a high speed network supporting remote direct memory access operations
CN103248467B (zh) * 2013-05-14 2015-10-28 中国人民解放军国防科学技术大学 基于片内连接管理的rdma通信方法
US8984173B1 (en) * 2013-09-26 2015-03-17 International Business Machines Corporation Fast path userspace RDMA resource error detection
US10148570B2 (en) * 2015-12-29 2018-12-04 Amazon Technologies, Inc. Connectionless reliable transport
US10868864B2 (en) * 2018-04-16 2020-12-15 Hewlett Packard Enterprise Development Lp System and method for fault-tolerant remote direct memory access using single port host channel adapter hardware
US10769042B2 (en) * 2018-06-25 2020-09-08 Seagate Technology Llc Single port data storage device with multi-port virtualization
CN109491809A (zh) * 2018-11-12 2019-03-19 西安微电子技术研究所 一种降低高速总线延迟的通信方法
CN111277616B (zh) * 2018-12-04 2023-11-03 中兴通讯股份有限公司 一种基于rdma的数据传输方法和分布式共享内存系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115623018A (zh) * 2022-11-30 2023-01-17 苏州浪潮智能科技有限公司 基于多设备节点的共享系统
CN115657975A (zh) * 2022-12-29 2023-01-31 浪潮电子信息产业股份有限公司 一种磁盘数据读写控制方法、相关组件及前端共享卡
WO2024139334A1 (zh) * 2022-12-29 2024-07-04 浪潮电子信息产业股份有限公司 一种磁盘数据读写控制方法、相关组件及前端共享卡

Also Published As

Publication number Publication date
US11968260B2 (en) 2024-04-23
US20230403326A1 (en) 2023-12-14
EP4287034A1 (en) 2023-12-06
EP4287034A4 (en) 2024-07-24
WO2022179417A1 (zh) 2022-09-01

Similar Documents

Publication Publication Date Title
WO2022179417A1 (zh) 网络接口卡、消息收发方法和存储装置
WO2022089258A1 (zh) 网络接口卡、控制器、存储装置和报文发送方法
EP3493046B1 (en) Data processing system, method, and corresponding device
US11886940B2 (en) Network interface card, storage apparatus, and packet receiving method and sending method
EP3942759A1 (en) System and method for facilitating efficient management of idempotent operations in a network interface controller (nic)
US7165110B2 (en) System and method for simultaneously establishing multiple connections
US8948199B2 (en) Fibre channel processing by a host channel adapter
TW583544B (en) Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries
US7145866B1 (en) Virtual network devices
US11750418B2 (en) Cross network bridging
US20030018828A1 (en) Infiniband mixed semantic ethernet I/O path
KR20190028217A (ko) PCIe P2P 접속의 밴드위스를 최대화할 수 있는 방법 및 시스템
US6898638B2 (en) Method and apparatus for grouping data for transfer according to recipient buffer size
US11782869B2 (en) Data transmission method and related device
JP2003216592A (ja) ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置
WO2023040949A1 (zh) 网络接口卡、消息发送方法和存储装置
US20030016669A1 (en) Full transmission control protocol off-load
US20030046474A1 (en) Mixed semantic storage I/O
CN115550079A (zh) 网络接口卡、消息收发方法、存储装置和主机客户端
CN115686344A (zh) 网络接口卡、数据存储方法和存储装置
WO2024201804A1 (ja) 中継装置
TW202147122A (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