CN115550079A - 网络接口卡、消息收发方法、存储装置和主机客户端 - Google Patents

网络接口卡、消息收发方法、存储装置和主机客户端 Download PDF

Info

Publication number
CN115550079A
CN115550079A CN202110722869.7A CN202110722869A CN115550079A CN 115550079 A CN115550079 A CN 115550079A CN 202110722869 A CN202110722869 A CN 202110722869A CN 115550079 A CN115550079 A CN 115550079A
Authority
CN
China
Prior art keywords
message
data
rdma
indication information
integrity
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
CN202110722869.7A
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 CN202110722869.7A priority Critical patent/CN115550079A/zh
Publication of CN115550079A publication Critical patent/CN115550079A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0061Error detection codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/1607Details of the supervisory signal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/18Automatic repetition systems, e.g. Van Duuren systems
    • H04L1/1829Arrangements specially adapted for the receiver end
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/18Automatic repetition systems, e.g. Van Duuren systems
    • H04L1/1829Arrangements specially adapted for the receiver end
    • H04L1/1864ARQ related signaling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • H04L43/0829Packet loss
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • H04L43/0847Transmission error

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Communication Control (AREA)

Abstract

本申请公开了一种网络接口卡、消息收发方法、存储装置和主机客户端,涉及存储领域,用于当IO数据的完整性有误时提高IO数据的传输效率。网络接口卡包括:处理器和通信接口;通信接口用于发送RDMA报文,RDMA报文包括输入输出IO数据以及数据完整性字段,数据完整性字段用于对IO数据的完整性进行校验;通信接口还用于接收第一指示信息,第一指示信息用于指示IO数据的完整性校验是否有错误,处理器用于根据第一指示信息确定是否重传RDMA报文。

Description

网络接口卡、消息收发方法、存储装置和主机客户端
技术领域
本申请涉及存储领域,尤其涉及一种网络接口卡、消息收发方法、存储装置和主机客户端。
背景技术
目前许多数据不是存储在本地,而是存储在远端的存储装置中。如图1所示,本申请实施例提供了一种存储系统,包括存储装置(或称存储阵列)11和主机(host)客户端12。存储装置11通过前端网络(front-end fabric)连接主机客户端12,可以为多个主机客户端12提供数据存储服务。随着基于非易失性存储器规范(non volatile memory express,NVMe)的固态驱动器(solid state drives,SSD)的兴起,主机客户端12远程访问存储装置11的协议逐渐采用NVMe,前端网络逐渐采用基于交换网的NVMe(NVMe over fabric,NoF)网络迁移。远程直接内存访问(remote direct memory access,RDMA)即是NoF网络中的一种标准,可以降低存储装置存取数据的时延。
存储装置11与主机客户端12传输IO数据时,响应端会对IO数据的完整性进行校验,如果校验错误则请求端通常会进行重传,但是如果IO数据存储有误,则会导致请求端频繁进行重传,而这种重传只能修复IO数据在传输过程中产生的错误,并不能修复IO数据存储有误,所以这种重传是无效的,降低了IO数据的传输效率。
发明内容
本申请实施例提供一种网络接口卡、消息收发方法、存储装置和主机客户端,用于当IO数据的完整性有错误时提高IO数据的传输效率。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种网络接口卡,可以作为请求端的网络接口卡,包括:处理器和通信接口;通信接口用于发送RDMA报文,RDMA报文包括IO数据以及数据完整性字段,IO数据以及数据完整性字段可以有一对或多对,每个数据完整性字段紧邻在一段IO数据后面,用于对前面紧邻的IO数据进行完整性校验;通信接口还用于接收第一指示信息,第一指示信息用于指示IO数据的完整性校验是否有错误;处理器用于根据第一指示信息确定是否重传RDMA报文。
本申请实施例提供的网络接口卡,请求端的网络接口卡向响应端的网络接口卡发送RDMA报文,该RDMA报文中包括IO数据以及数据完整性字段,响应端的网络接口卡可以根据数据完整性字段对IO数据的完整性进行校验,并向请求端的网络接口卡发送第一指示信息,该第一指示信息用于指示IO数据的完整性校验是否有错误。请求端可以根据第一指示信息来判断是否重传RDMA报文,不会出现根据接收到确认(ACK)消息或否定确认(NAK)消息来判断是否重传RDMA报文时产生不必要的重传,因为这种重传无法解决IO数据本身的完整性校验错误,只能解决传输过程中产生的错误,节省下的带宽可用于传输其他IO数据,所以提高了IO数据的传输效率。
在一种可能的实施方式中,第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。当RDMA报文有多个时,通过该消息序列号可以确定具体哪个RDMA报文中的IO数据的完整性校验有错误。
在一种可能的实施方式中,第一指示信息承载在RDMA报文的确认消息或否定确认消息中。对侧的响应端可以根据RDMA报文的合法性校验是否有错误来反馈RDMA报文的确认消息或否定确认消息,可以在确认消息或否定确认消息中新增字段来携带第一指示信息,该新增字段可以位于确认扩展传输头(ACK extended transport header,AETH)字段之后。
在一种可能的实施方式中,处理器具体用于:如果第一指示信息指示IO数据的完整性校验有错误,则对IO数据的完整性进行校验,如果完整性校验无错误,则重传RDMA报文,如果完整性校验有错误,则不重传RDMA报文。也就是说,只有当本地对IO数据的完整性进行校验没有错误的情况下,网络接口卡才会重传RDMA报文,此时,对方接收的IO数据的完整性校验有错误是由网络传输导致的,通过重传可以避免错误发生。当本地对IO数据的完整性进行校验有错误的情况下,重传RDMA报文是无法避免对方接收的IO数据的完整性校验产生错误的,所以此时可以不必立即重传RDMA报文,而是将IO数据的完整性校验有错误的信息发送给上层协议栈以作进一步处理,因此可以提高IO数据的传输效率。
在一种可能的实施方式中,通信接口还用于:如果第一指示信息指示IO数据的完整性校验有错误,则发送第二指示信息,第二指示信息用于指示清除IO数据的完整性校验有错误的信息。因为对侧的响应端为了保证第一指示信息不会丢包,会重复发送第一指示信息,直到接收到第二指示信息,所以第二指示信息相当于指示停止发送包含第一指示信息的确认(ACK)消息/否定确认(NAK)消息。
在一种可能的实施方式中,第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。可以在确认消息或否定确认消息中新增字段来携带第二指示信息,该新增字段可以位于确认扩展传输头(ACKextended transport header,AETH)字段之后。可以在RDMA WRITE消息中新增字段来携带第一指示信息,该新增字段可以位于RDMA扩展传输头(RDMA extended transport header,RETH)字段之后。可以在SEND消息中新增字段来携带第一指示信息,该新增字段可以位于基本传输头(base transport header,BTH)字段之后。
第二方面,提供了一种网络接口卡,可以作为响应端的网络接口卡,包括:处理器和通信接口;通信接口用于接收RDMA报文,RDMA报文包括IO数据以及数据完整性字段,IO数据以及数据完整性字段可以有一对或多对,每个数据完整性字段紧邻在一段IO数据后面,用于对前面紧邻的IO数据进行完整性校验;处理器用于根据数据完整性字段对IO数据的完整性进行校验;通信接口还用于发送第一指示信息,第一指示信息用于指示IO数据的完整性校验是否有错误。
本申请实施例提供的网络接口卡,请求端的网络接口卡向响应端的网络接口卡发送RDMA报文,该RDMA报文中包括IO数据以及数据完整性字段,响应端的网络接口卡可以根据数据完整性字段对IO数据的完整性进行校验,并向请求端的网络接口卡发送第一指示信息,该第一指示信息用于指示IO数据的完整性校验是否有错误。使得请求端可以根据第一指示信息来判断是否重传RDMA报文,不会出现根据接收到确认(ACK)消息或否定确认(NAK)消息来判断是否重传RDMA报文时产生不必要的重传,因为这种重传无法解决IO数据本身的完整性校验错误,只能解决传输过程中产生的错误,节省下的带宽可用于传输其他IO数据,所以提高了IO数据的传输效率。
在一种可能的实施方式中,第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。当RDMA报文有多个时,通过该消息序列号可以确定具体哪个RDMA报文中的IO数据的完整性校验有错误。
在一种可能的实施方式中,第一指示信息承载在RDMA报文的确认消息或否定确认消息中。响应端可以根据RDMA报文的合法性校验是否有错误来反馈RDMA报文的确认消息或否定确认消息,可以在确认消息或否定确认消息中新增字段来携带第一指示信息,该新增字段可以位于确认扩展传输头(ACK extended transport header,AETH)字段之后。
在一种可能的实施方式中,通信接口还用于:接收第二指示信息,第二指示信息用于指示清除IO数据的完整性校验有错误的信息。响应端为了保证第一指示信息不会丢包,会重复发送第一指示信息,直到接收到第二指示信息,所以第二指示信息相当于指示停止发送包含第一指示信息的确认(ACK)消息/否定确认(NAK)消息。
在一种可能的实施方式中,第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。可以在确认消息或否定确认消息中新增字段来携带第二指示信息,该新增字段可以位于确认扩展传输头(ACKextended transport header,AETH)字段之后。可以在RDMA WRITE消息中新增字段来携带第一指示信息,该新增字段可以位于RDMA扩展传输头(RDMA extended transport header,RETH)字段之后。可以在SEND消息中新增字段来携带第一指示信息,该新增字段可以位于基本传输头(base transport header,BTH)字段之后。
第三方面,提供了一种消息收发方法,包括:发送远程直接内存访问RDMA报文,RDMA报文包括输入输出IO数据以及数据完整性字段,数据完整性字段用于对IO数据的完整性进行校验;接收第一指示信息,第一指示信息用于指示IO数据的完整性校验是否有错误;根据第一指示信息确定是否重传RDMA报文。
在一种可能的实施方式中,第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
在一种可能的实施方式中,第一指示信息承载在RDMA报文的确认消息或否定确认消息中。
在一种可能的实施方式中,根据第一指示信息确定是否重传RDMA报文,包括:如果第一指示信息指示IO数据的完整性校验有错误,则对IO数据的完整性进行校验,如果完整性校验无错误,则重传RDMA报文,如果完整性校验有错误,则将IO数据的完整性校验有错误的信息发送给上层协议栈。
在一种可能的实施方式中,还包括:如果第一指示信息指示IO数据的完整性校验有错误,则发送第二指示信息,第二指示信息用于指示清除IO数据的完整性校验有错误的信息。
在一种可能的实施方式中,第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
第四方面,提供了一种消息收发方法,包括:接收远程直接内存访问RDMA报文,RDMA报文包括输入输出IO数据以及数据完整性字段;根据数据完整性字段对IO数据的完整性进行校验;发送第一指示信息,第一指示信息用于指示IO数据的完整性校验是否有错误。
在一种可能的实施方式中,第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
在一种可能的实施方式中,第一指示信息承载在RDMA报文的确认消息或否定确认消息中。
在一种可能的实施方式中,还包括:接收第二指示信息,第二指示信息用于指示清除IO数据的完整性校验有错误的信息。
在一种可能的实施方式中,第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
第五方面,提供了一种存储装置,包括如第一方面及其任一实施方式所述的网络接口卡和控制器,或者,包括如第二方面及其任一实施方式所述的网络接口卡和控制器,控制器通过网络接口卡接收输入输出IO数据或发送IO数据。
第六方面,提供了一种主机客户端,包括如第二方面及其任一实施方式任一项所述的网络接口卡和处理器,所述处理器通过所述网络接口卡接收输入输出IO数据或发送IO数据。
第七方面,提供了一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,当所述指令被网络接口卡执行时使网络接口卡执行如第三方面及其任一实施方式所述的消息收发方法,或者,执行如第四方面及其任一实施方式所述的消息收发方法。
第八方面,提供了一种包含指令的计算机程序产品,当该指令在网络接口卡上运行时,使得网络接口卡执行如第三方面及其任一实施方式所述的消息收发方法,或者,执行如第四方面及其任一实施方式所述的消息收发方法。
第三方面至第八方面的技术效果参照第一方面至第二方面及其任一实施方式的技术效果。
附图说明
图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消息的确认消息/否定确认消息的结构示意图;
图8A为本申请实施例提供的另一种可靠连接的请求端与响应端之间的交互过程示意图;
图8B为本申请实施例提供的一种包含DIF的RDMA写消息的示意图;
图9A为本申请实施例提供的一种基于IB协议的RDMA READ请求消息和RDMA READ响应消息的结构示意图;
图9B为本申请实施例提供的一种基于RoCEv2协议的RDMA READ请求消息和RDMAREAD响应消息的结构示意图;
图10为本申请实施例提供的又一种可靠连接的请求端与响应端之间的交互过程示意图;
图11为本申请实施例提供的一种主机客户端与存储装置利用RDMA操作完成IO读写的过程的示意图;
图12为本申请实施例提供的一种IO数据镜像备份的交互过程示意图;
图13为本申请实施例提供的另一种存储系统的架构示意图;
图14为本申请实施例提供的一种消息收发方法的流程示意图;
图15为本申请实施例提供的一种DIF扩展传输头所在帧结构的示意图;
图16为本申请实施例提供的另一种消息收发方法的流程示意图;
图17为本申请实施例提供的又一种消息收发方法的流程示意图;
图18为本申请实施例提供的另一种DIF扩展传输头所在帧结构的示意图;
图19为本申请实施例提供的又一种DIF扩展传输头所在帧结构的示意图。
具体实施方式
如本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。
本申请实施例涉及的“A/B”指A或B二者中可以有一个。
首先对本申请涉及的概念进行描述:
如图1所示,基于RDMA的存储系统中,存储装置11包括多个控制器(例如第一控制器111、第二控制器112)、多个网络接口卡(network interface card,NIC)(例如第一NIC113、第二NIC 114)、盘框115以及存储介质(例如硬盘驱动器(hard disk drive,HDD)116或固态硬盘(solid state drives,SSD)117)。主机客户端包括第三NIC 121和处理器122。
其中,盘框115是可选的,存储介质可以挂载在盘框115上,存储介质可以直接挂载在控制器的处理器上。
存储装置11中的多个控制器可以工作在负荷分担模式,以提高存储系统的吞吐量和可靠性。存储装置11中的多个NIC具有高速串行计算机扩展总线标准(peripheralcomponent interconnect,PCIe)接口,分别连接对应的控制器,例如第一控制器111连接第一NIC 113,第二控制器112连接第二NIC 114。存储装置11中的控制器可以通过对应的NIC获得来自主机客户端12的读请求,然后从存储介质中读取IO数据,再由对应的NIC将IO数据返回给主机客户端12;存储装置11中的控制器还可以通过对应的NIC获得来自主机客户端12的写请求和IO数据,并将IO数据写入存储介质中。
存储装置11中的控制器包括处理器、内存以及在处理器中运行的软件,主机客户端12中的CPU 122中运行软件,上述软件按分层包括驱动(driver)软件和NoF协议软件(也可以称为NoF协议栈),可选的,还可以包括使用开放交换网企业发布(open fabricsenterprise distribution,OFED)的软件(简称OFED软件)。其中驱动软件为上层软件提供了控制NIC的接口,NoF协议软件实现NoF协议控制功能和IO读写功能,OFED软件是一组开源驱动软件、核心内核代码、中间件和支持无限带宽网络(infiniband fabric)的用户级接口程序。
本申请实施例涉及的存储装置可以称为存储服务器、存储阵列、刀片服务器等,对名称不作限定。本申请实施例涉及的控制器可以包括但不限于处理器和存储器。
本申请实施例涉及的处理器可以是一个芯片。例如,可以是现场可编程门阵列(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),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。
存储装置为了提高数据的可靠性,会采用多个控制器的架构方案,由多个控制器将同一数据的多个副本存储至存储介质。
存储装置通过网络连接主机客户端,可以为多个主机客户端提供数据存储服务。随着NVMe SSD的兴起,主机客户端访问存储装置的协议从小型计算机系统接口(smallcomputer system interface,SCSI)向NVMe过渡,相应地,该网络也从光纤通道(fibrechannel,FC)网络、传输控制协议/互联网协议(transmission control protocol/internet protocol,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消息或SEND消息的确认(acknowledge,ACK)消息/否定确认(non-acknowledge,NAK)消息,网络接口卡向与SQ关联的CQ提交一个CQE,以通知消费者完成了其提交的某个WQE指示的RDMA WRITE操作或RDMA SEND操作。关于SEND消息、RDMA READ响应消息和RDMA WRITE消息的确认(ACK)消息/否定确认(NAK)消息见后面的描述。
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)时响应端才接收报文,并可以针对每个报文反馈确认(ACK)消息或者针对连续多个报文反馈一个确认(ACK)消息。如图4中B所示,当报文的PSN发生跳变(例如,报文的PSN缺少n+2)时,即丢失某一PSN的报文时,响应端会丢弃该QP后续所有PSN未严格递增的报文,并反馈否定确认(NAK)消息,请求端按照PSN重传丢失的报文。如图4中C所示,如果接收端从某一PSN开始连续丢失报文,则请求端会连续重传丢失报文,响应端会连续反馈否定确认(NAK)消息,直到达到最大重传次数,则可以认为请求端和响应端之间的网络发生故障,请求端和响应端之间的QP连接会断开。如图4中D所示,当报文的PSN与已接收报文的PSN重复(例如,重复接收到PSN为n+1的报文)时则响应端会丢弃重复报文,而不必反馈否定确认(NAK)消息。
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)消息/否定确认(NAK)消息;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)消息/否定确认(NAK)消息,或者,针对同一消息的连续多个报文向请求端发送一个确认(ACK)消息,或者,针对消息的尾包向请求端发送确认(ACK)消息;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)消息,例如,一个PSN为X的SEND消息的确认(ACK)消息可以用于确认该SEND消息之前的PSN小于X的消息已被响应端成功接收。
每个SEND消息中可以包括四字节的立即数(immediate data,ImmDt),如果要包括立即数,则在SEND消息的最后一个报文的附加头字段(立即扩展传输头或ImmDt字段)中包括该立即数。
示例性的,假设SEND消息被分段为三个报文,则基于IB协议的SEND消息和SEND消息的确认(ACK)消息/否定确认(NAK)消息的结构如图5A所示,基于RoCEv2协议的SEND消息和SEND消息的确认(ACK)消息/否定确认(NAK)消息的结构如图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)包括确认(ACK)消息/否定确认(NAK)消息的附加传输字段,其包含在SEND消息的每个确认(ACK)消息/否定确认(NAK)消息中。
媒体访问控制(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消息的确认(ACK)消息或否定确认(NAK)消息来说,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消息的单包或尾包对应的确认(ACK)消息)后,向本节点的SQ关联的CQ提交CQE。
RDMA写操作
RDMA写操作用于请求端将数据写入响应端的存储空间。
在允许请求端进行RDMA写操作之前,响应端首先分配一个存储空间供响应端的QP(或QP组)访问。响应端的通道适配器将一个32位M_Key密钥与此存储空间的虚拟地址相关联。响应端将该存储空间的虚拟地址、长度和M_Key密钥发送给可以访问该内存区域的请求端。示例性的,可以通过前文所述的发送操作来将上述信息发送给请求端。
请求端可以通过发送RDMA WRITE消息来发起RDMA写操作,该消息中包括待写至响应端的数据、响应端的存储空间的虚拟地址、数据的长度和M_Key密钥。数据的长度可以在0字节到231字节之间,与发送操作类似的,如果数据的长度大于PMTU,将按照PMTU大小分段为多个报文,响应端再将这些报文重新组合得到数据。对于可靠连接,如果数据是短消息(即不必分段为多个报文),响应端针对每个报文向请求端发送确认(ACK)消息/否定确认(NAK)消息;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)消息/否定确认(NAK)消息,或者,针对同一数据的连续多个报文向请求端发送一个确认(ACK)消息,或者,针对消息的尾包向请求端发送确认(ACK)消息;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)消息,例如,一个PSN为X的RDMA WRITE消息的确认(ACK)消息可以用于确认该RDMA WRITE消息之前的PSN小于X的消息已被响应端成功接收。
示例性的,假设RDMA WRITE消息被分段为三个报文,则基于IB协议的RDMA WRITE消息和RDMA WRITE消息的确认(ACK)消息/否定确认(NAK)消息的结构如图7A所示,基于RoCEv2协议的RDMA WRITE消息和RDMA WRITE消息的确认(ACK)消息/否定确认(NAK)消息的结构如图7B所示。可靠连接的请求端与响应端之间的交互过程如图8A所示。
其中,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消息的确认(ACK)消息或否定确认(NAK)消息来说,BTH操作码为“Acknowledge”。
另外,如图8B所示,为了提升数据传输的可靠性,RDMA写操作还支持通过数据完整性字段(data integrity field,DIF)校验来对IO数据的存储和传输进行保护。在RDMAWRITE消息的每个报文可以包括一段或多段IO数据,每一段IO数据后面紧邻一个DIF字段,每个DIF字段用于对前面紧邻的IO数据进行完整性校验,响应端除了可以根据报文的PSN来对该报文的合法性进行图4所示的校验,还可以根据DIF字段对该报文中的IO数据的完整性进行校验。如果RDMA报文的合法性校验有错误,响应端会向请求端发送否定确认(NAK)消息,请求端会重传IO数据。如果IO数据的完整性校验有错误,则响应端可以向请求端发送确认(ACK)消息或否定确认(NAK)消息,协议未作规定,但一般情况下,响应端会向请求端发送否定确认(NAK)消息,请求端会重传IO数据,否则请求端会认为IO数据存储成功。
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响应消息没有相应的确认(ACK)消息,请求端如果发现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消息的确认(ACK)消息,表示接收到IO写命令。然后存储装置(作为请求端)向主机客户端(作为响应端)发送RDMA READ请求消息,主机客户端向存储装置发送RDMA READ响应消息,该报文的数据负荷即为IO数据。存储装置对IO数据进行持久化存储后,即将IO数据存储至硬盘驱动器(hard disk drive,HDD)或固态硬盘(solid state drives,SSD)等存储介质后,向主机客户端发送SEND消息,该报文中包括IO响应,表示完成IO写操作,主机客户端向存储装置发送SEND消息的确认(ACK)消息,表示接收到IO响应。
在主机客户端向存储装置进行IO读操作过程中,主机客户端向存储装置发送SEND消息,该报文的数据负荷即为IO读命令,对于可靠连接,存储装置可以向主机客户端发送SEND消息的确认(ACK)消息,表示接收到IO读命令。存储装置获取IO数据后,即从HDD或SSD等存储介质获取IO数据后,存储装置(作为请求端)向主机客户端(作为响应端)发送RDMAWRITE消息,该消息的数据负荷即为IO数据,主机客户端向存储装置发送RDMA WRITE消息的确认(ACK)消息。存储装置向主机客户端发送SEND消息,该消息中包括IO响应,表示完成IO读操作,主机客户端向存储装置发送SEND消息的确认(ACK)消息,表示接收到IO响应。
从中可以看出,完整的IO写操作是通过SEND操作来传递命令消息(例如命令请求和命令应答),通过RDMA READ操作来传递数据消息;完整的IO读操作是通过SEND操作来传递命令消息,通过RDMA WRITE操作来传递数据消息。
为了提升数据存储的可靠性,存储装置侧可以将一份IO数据分别通过多个控制器存储在不同存储介质中,实现IO数据的镜像备份。示例性的,对于图1所示的存储系统来说,第一控制器111可以作为主控制器,第一NIC 113可以作为主NIC,第二控制器112可以作为第一控制器111的镜像控制器,第二NIC 114可以为第一NIC 113的镜像NIC,第二控制器112可以对第一控制器111所存储的IO数据进行备份。
如图12所示,与图11的IO写操作类似的,在主机客户端向存储装置进行IO写操作过程中,主机客户端的处理器(依次通过第三NIC和存储装置的第一NIC)向存储装置的第一控制器发送SEND消息,该消息的数据负荷即为IO写命令,对于可靠连接,存储装置的第一NIC可以(通过第三NIC)向主机客户端的处理器发送SEND消息的确认(ACK)消息,表示接收到IO写命令。然后存储装置的第一控制器向主机客户端的处理器发送RDMA READ请求消息,主机客户端的处理器(依次通过第三NIC和第一NIC)向存储装置的第一控制器发送RDMAREAD响应消息,该消息的各个报文的数据负荷即为IO数据。存储装置的第一控制器对IO数据进行持久化存储(即将IO数据存储至存储介质),(依次通过第一NIC和存储装置的第二NIC)向存储装置的第二控制器发送RDMA WRITE消息,该消息的各个报文的数据负荷即为待备份的IO数据。存储装置的第二NIC(通过第一NIC)向第一控制器发送RDMA WRITE消息的确认(ACK)消息,表示接收到IO数据。存储装置的第一控制器(依次通过第一NIC和第三NIC)向主机客户端的处理器发送SEND消息,该消息中包括IO响应,表示完成IO写操作,主机客户端的第三NIC(通过第一NIC)向存储装置的第一控制器发送SEND消息的确认(ACK)消息,表示接收到IO响应。
如针对图8B所描述的,响应端除了可以根据RDMA WRITE消息的各个报文的PSN来对该报文的合法性进行图4所示的校验,还可以根据DIF字段对该报文中的IO数据的完整性进行校验。如果该报文的合法性校验有错误或者IO数据的完整性校验有错误,则响应端会向请求端发送否定确认(NAK)消息,请求端会重传IO数据。但是这种重传只适用于修复IO数据在传输过程中产生的错误,如果IO数据在存储过程中产生错误(即完整性错误),则重传无法修复这种错误。当重传次数超过上限,会使请求端与响应端之间QP连接断开,后续RDMA操作都无法完成。
为此,本申请实施例提供的NIC、消息收发方法、存储装置和主机客户端,请求端(例如图1中存储装置11的第一NIC 113)向响应端(例如图1中主机客户端12的第三NIC 121或者存储装置11的第二NIC 114)发送RDMA WRITE消息,该RDMA WRITE消息的各个报文中包括IO数据以及对应的DIF字段。响应端接收到报文后,对该报文的合法性和IO数据的完整性进行校验,并向请求端发送确认(ACK)消息/否定确认(NAK)消息,其中,确认(ACK)消息/否定确认(NAK)消息中包括第一指示信息,确认(ACK)消息/否定确认(NAK)消息用于指示报文的合法性校验是否有错误,第一指示信息用于指示IO数据的完整性校验是否有错误,进一步地,第一指示信息还可以指示完整性校验有错误的IO数据所属RDMA报文的消息序列号(message sequence number,MSN)。另外,为了防止确认(ACK)消息/否定确认(NAK)消息丢包,响应端可以重复发送包含第一指示信息的确认(ACK)消息/否定确认(NAK)消息,直到接收到来自请求端的第二指示信息,第二指示信息用于指示清除IO数据的完整性校验有错误的信息(或者说,用于指示停止发送包含第一指示信息的确认(ACK)消息/否定确认(NAK)消息),响应端接收到第二指示信息后则不必再发送包含第一指示信息的确认(ACK)消息/否定确认(NAK)消息,除非有新的IO数据的完整性校验有错误。如果第一指示信息指示IO数据的完整性校验有错误,则请求端可以先在本地对IO数据的完整性进行校验,从而明确是否IO数据存储有误,如果本地对IO数据的完整性校验无错误,再重传第一指示信息所指示的IO数据所属的RDMA报文,如果本地对IO数据的完整性校验有错误,则将IO数据的完整性校验有错误的信息发送给上层协议栈(例如NoF协议栈)进行进一步处理,而不必立即重传RDMA报文,因为立即重传RDMA报文是无法避免对方接收的IO数据的完整性校验产生错误的。
如图13所示,在图1的基础上,第一NIC 113包括第一处理器1131和第一通信接口1132,第二NIC 114包括第二处理器1141和第二通信接口1142,第三NIC 121包括第三处理器1211和第三通信接口1212。其中,处理器用于处理控制逻辑,通信接口用于发送和接收消息。
第一NIC 113作为请求端,第二NIC 114或第三NIC 121作为响应端,执行如图14所示的消息收发方法。其中,第一NIC 113作为请求端第二NIC 114作为响应端,适用于图12所示的存储装置的第一控制器依次通过第一NIC和第二NIC向存储装置的第二控制器发送RDMA WRITE消息,以实现第二控制器对第一控制器所存储的IO数据进行备份的场景;第一NIC 113作为请求端第三NIC 121作为响应端,适用于图11所示的存储装置向主机客户端发送RDMA WRITE消息,以实现IO读操作的场景。
如图14所示,该消息收发方法包括:
S1401、请求端向响应端发送RDMA报文。
具体的,第一NIC 113的第一通信接口1132向第二NIC 114的第二通信接口1142或者第三NIC 121的第三通信接口1212发送RDMA报文,相应地,第二NIC 114的第二通信接口1142或者第三NIC 121的第三通信接口1212从第一NIC 113的第一通信接口1132接收RDMA报文。
该RDMA报文可以为RDMA WRITE消息的一个报文(不对IO数据分段时)或多个报文(对IO数据分段时),该RDMA报文包括IO数据以及DIF字段,DIF字段用于对IO数据的完整性进行校验。如图8B所示,IO数据以及DIF字段可以有一对或多对,每个DIF字段紧邻在一段IO数据后面,用于对前面紧邻的IO数据进行完整性校验。
S1402、响应端根据RDMA报文的PSN对该报文的合法性进行校验,并根据DIF字段对IO数据的完整性进行校验。
具体的,第二NIC 114的第二处理器1141根据RDMA报文的PSN对该报文的合法性进行校验(参照图4的相关描述),并根据DIF字段对IO数据的完整性进行校验,或者,第三NIC121的第三处理器1211根据RDMA报文的PSN对该报文的合法性进行校验(参照图4的相关描述),并根据DIF字段对IO数据的完整性进行校验。
根据DIF字段对IO数据的完整性进行校验的方式如下:对IO数据进行循环冗余码校验16(cyclic redundancy check 16,CRC16)计算,将计算结果与DIF字段(2字节校验值)比较,二者一致则校验无错误,二者不一致则校验有错误。
S1403、响应端向请求端发送确认(ACK)消息/否定确认(NAK)消息,确认(ACK)消息/否定确认(NAK)消息中包括第一指示信息。
具体的,第二NIC 114的第二通信接口1142或者第三NIC 121的第三通信接口1212向第一NIC 113的第一通信接口1132发送确认(ACK)消息/否定确认(NAK)消息,相应地,第一NIC 113的第一通信接口1132从第二NIC 114的第二通信接口1142或者第三NIC 121的第三通信接口1212接收确认(ACK)消息/否定确认(NAK)消息,并且第一NIC 113的第一通信接口1132从第二NIC 114的第二通信接口1142或者第三NIC 121的第三通信接口1212接收第一指示信息。
如图15中A所示,可以对图7A中所示的基于IB协议的RDMA WRITE消息的确认(ACK)消息/否定确认(NAK)消息进行扩展,增加DIF扩展传输头(DIF extended transportheader,DIFETH)字段以传输第一指示信息,或者,如图15中B所示,可以对图7B中所示的基于RoCEv2协议的RDMA WRITE消息的确认(ACK)消息/否定确认(NAK)消息进行扩展,增加DIFETH字段以传输第一指示信息。本申请不限定增加字段的具体名称,也不限定增加字段的数量,例如可以有多个DIFETH字段分别用于指示不同的IO数据的完整性校验是否有错误,本申请也不限定增加的DIFETH字段的位置,图15中位于AETH字段之后,但并不意在限定于此。
示例性的,如表1所示,该DIFETH字段可以占32位。其中,第29-31位用于指示反馈的指示信息的类型:第29-31位取值为000表示此时第一指示信息指示IO数据的完整性校验无错误,第29-31位取值001表示此时第一指示信息指示IO数据的完整性校验有错误,第29-31位取值010表示此时第二指示信息指示清除IO数据的完整性校验有错误的信息,第29-31位取值011-111为保留值。其中,第29-31位取值为000或001时,用于响应端向请求端发送第一指示信息时使用,第29-31位取值为010时,用于请求端向响应端发送第二指示信息时使用。
当第29-31位取值为001时,第24-28位(AAAAA)用于指示第一指示信息指示的DIF校验错误数量。当第29-31位取值为001时,第0-23位(NN...NN)表示第一指示信息还指示完整性校验有错误的IO数据所属RDMA报文的MSN,当RDMA报文有多个时,通过该消息序列号可以确定具体哪个RDMA报文中的IO数据的完整性校验有错误。当第29-31位取值为010时,第0-23位(MM...MM)表示第二指示信息还指示待清除的完整性校验有错误的IO数据所属RDMA报文的MSN,响应端接收到第二指示信息后,清除MSN小于该MSN的完整性校验有错误的信息。该表中“N”或“M”表示该值可以取值0或1,并且具有实际意义,该表中“X”表示该值可以取值0或1的任意值,并且不具有实际意义。
表1
位[29:31] 位[24:28] 位[0:23]
000 XXXXX XX...XX
001 AAAAA NN...NN
010 XXXXX MM...MM
011-111 XXXXX XX...XX
如图16所示,如果该RDMA报文的合法性校验有错误,并且IO数据的完整性校验有错误的信息已清除(接收到第二指示信息),则响应端执行步骤S1601:丢弃RDMA报文中的IO数据,向请求端回复否定确认(NAK)消息,否定确认(NAK)消息中包括第一指示信息,此时第一指示信息指示IO数据的完整性校验无错误。
如果该RDMA报文的合法性校验有错误,并且IO数据的完整性校验有错误的信息未被清除(未接收到第二指示信息),则响应端执行步骤S1602:丢弃RDMA报文中的IO数据,向请求端回复否定确认(NAK)消息,否定确认(NAK)消息中包括第一指示信息,此时第一指示信息指示完整性校验有错误的IO数据(例如指示完整性校验有错误的IO数据所属RDMA报文的MSN)。
如果该RDMA报文的合法性校验正确,并且RDMA报文中的IO数据的完整性校验正确,并且IO数据的完整性校验有错误的信息已清除(接收到第二指示信息),则响应端执行步骤S1603:接受RDMA报文中的IO数据,向请求端回复确认(ACK)消息,确认(ACK)消息中包括第一指示信息,此时第一指示信息指示IO数据的完整性校验无错误。
如果该RDMA报文的合法性校验正确,并且RDMA报文中的IO数据的完整性校验正确,并且IO数据的完整性校验有错误的信息未被清除(未接收到第二指示信息),则响应端执行步骤S1604:接受RDMA报文中的IO数据,向请求端回复确认(ACK)消息,确认(ACK)消息中包括第一指示信息,此时第一指示信息指示完整性校验有错误的IO数据(例如指示完整性校验有错误的IO数据所属RDMA报文的MSN)。
如果该RDMA报文的合法性校验正确,并且RDMA报文中的IO数据的完整性校验有错误,则响应端执行步骤S1605和步骤S1606:S1605、记录IO数据的完整性校验有错误的信息(例如完整性校验有错误的IO数据所属RDMA报文的MSN)。S1606、丢弃RDMA报文中的IO数据,向请求端回复确认(ACK)消息,确认(ACK)消息中包括第一指示信息,此时第一指示信息除了可以指示IO数据的完整性校验有错误,还可以指示完整性校验有错误的IO数据所属RDMA报文的MSN。
S1404、请求端根据确认(ACK)消息/否定确认(NAK)消息以及第一指示信息,确定是否重传RDMA报文。
具体的,第一NIC 113的第一处理器1131根据第一NIC 113的第一通信接口1132接收的确认(ACK)消息/否定确认(NAK)消息以及第一指示信息,确定是否重传RDMA报文。
如图17所示,如果请求端(具体的,第一NIC 113的第一通信接口1132)接收到否定确认(NAK)消息,则执行步骤S1701:请求端(具体的,第一NIC 113的第一处理器1131)确定重传RDMA报文。
如果请求端(具体的,第一NIC 113的第一通信接口1132)接收到确认(ACK)消息,并且确认(ACK)消息中的第一指示信息指示IO数据的完整性校验无错误,则执行步骤S1702:请求端(具体的,第一NIC 113的第一处理器1131)确定不会再重传RDMA报文。
如果请求端(具体的,第一NIC 113的第一通信接口1132)接收到确认(ACK)消息,并且确认(ACK)消息中的第一指示信息指示IO数据的完整性校验有错误,则执行步骤S1703:请求端(具体的,第一NIC 113的第一处理器1131)先在本地对IO数据的完整性进行校验,从而明确是否IO数据存储有误,如果本地对IO数据的完整性校验无错误,则请求端(具体的,第一NIC 113的第一处理器1131)确定重传第一指示信息所指示的IO数据所属的RDMA报文,如果本地对IO数据的完整性校验有错误,则请求端确定(具体的,第一NIC 113的第一处理器1131)不会再重传RDMA报文。
另外,如果第一指示信息指示IO数据的完整性校验有错误,第一NIC 113的第一通信接口1132可以将第一指示信息上报给第一控制器的NoF协议软件。
可选的,如果请求端(具体的,第一NIC 113的第一通信接口1132)接收到确认(ACK)消息,并且确认(ACK)消息中的第一指示信息指示IO数据的完整性校验有错误,还可以执行步骤S1704:请求端(具体的,第一NIC 113的第一通信接口1132)向响应端发送第二指示信息。第二指示信息用于指示清除IO数据的完整性校验有错误的信息(或者说,用于指示停止发送第一指示信息),第二指示信息还可以指示完整性校验有错误的IO数据所属RDMA报文的MSN,响应端接收到第二指示信息后,可以清除小于该MSN的RDMA报文的IO数据的完整性校验有错误的信息。响应端不会再向请求端指示被清除的IO数据的完整性校验有错误,除非有新的IO数据的完整性校验有错误产生。
如前文所述的,请求端可以向响应端发送确认(ACK)消息/否定确认(NAK)消息,该确认(ACK)消息/否定确认(NAK)消息中包括DIFETH字段,该DIFETH字段携带第二指示信息。另外,请求端可以向响应端发送SEND消息或RDMA WRITE消息,SEND消息或RDMA WRITE消息包括DIFETH字段,该DIFETH字段携带第二指示信息。
示例性的,如图18中A所示,可以对图5A中所示的基于IB协议的SEND消息进行扩展,增加DIFETH字段以传输第二指示信息,或者,如图18中B所示,可以对图5B中所示的基于RoCEv2协议的SEND消息进行扩展,增加DIFETH字段以传输第二指示信息。本申请不限定增加的DIFETH字段的位置,图18中位于BTH字段之后,但并不意在限定于此。
或者,如图19中A所示,对图7A中所示的基于IB协议的RDMA WRITE消息进行扩展,增加DIFETH字段以传输第二指示信息,或者,如图19中B所示,可以对图7B中所示的基于RoCEv2协议的RDMA WRITE消息进行扩展,增加DIFETH字段以传输第二指示信息。本申请不限定增加的DIFETH字段的位置,图19中位于RETH字段之后,但并不意在限定于此。
本申请实施例提供的网络接口卡、消息收发方法、存储装置和主机客户端,请求端的网络接口卡向响应端的网络接口卡发送RDMA报文,该RDMA报文中包括IO数据以及DIF字段,响应端的网络接口卡根据DIF字段对IO数据的完整性进行校验,并向请求端的网络接口卡发送第一指示信息,该第一指示信息用于指示IO数据的完整性校验是否有错误。请求端可以根据第一指示信息来判断是否重传RDMA报文,不会出现根据接收到确认(ACK)消息或否定确认(NAK)消息来判断是否重传RDMA报文时产生不必要的重传,因为这种重传无法解决IO数据本身的完整性校验错误,只能解决传输过程中产生的错误,节省下的带宽可用于传输其他IO数据,所以提高了IO数据的传输效率。
本申请实施例提供一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,当指令被网络接口卡执行时使网络接口卡执行如图14、图16、图17所示的消息收发方法。
本申请实施例提供一种包括指令的计算机程序产品,当指令在在网络接口卡上运行时,使得网络接口卡执行如图14、图16、图17所示的消息收发方法。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个设备,或者也可以分布到多个设备上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个设备中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个设备中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (24)

1.一种网络接口卡,其特征在于,包括:处理器和通信接口;
所述通信接口,用于发送远程直接内存访问RDMA报文,所述RDMA报文包括输入输出IO数据以及数据完整性字段,所述数据完整性字段用于对所述IO数据的完整性进行校验;
所述通信接口,还用于接收第一指示信息,所述第一指示信息用于指示所述IO数据的完整性校验是否有错误;
所述处理器,用于根据所述第一指示信息确定是否重传所述RDMA报文。
2.根据权利要求1所述的网络接口卡,其特征在于,所述第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
3.根据权利要求1-2任一项所述的网络接口卡,其特征在于,所述第一指示信息承载在所述RDMA报文的确认消息或否定确认消息中。
4.根据权利要求1-3任一项所述的网络接口卡,其特征在于,所述处理器具体用于:
如果所述第一指示信息指示所述IO数据的完整性校验有错误,则对所述IO数据的完整性进行校验,如果完整性校验无错误,则重传所述RDMA报文,如果完整性校验有错误,则不重传所述RDMA报文。
5.根据权利要求1-4任一项所述的网络接口卡,其特征在于,所述通信接口还用于:
如果所述第一指示信息指示所述IO数据的完整性校验有错误,则发送第二指示信息,所述第二指示信息用于指示清除所述IO数据的完整性校验有错误的信息。
6.根据权利要求5所述的网络接口卡,其特征在于,所述第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
7.一种网络接口卡,其特征在于,包括:处理器和通信接口;
所述通信接口,用于接收远程直接内存访问RDMA报文,所述RDMA报文包括输入输出IO数据以及数据完整性字段;
所述处理器,用于根据所述数据完整性字段对所述IO数据的完整性进行校验;
所述通信接口,还用于发送第一指示信息,所述第一指示信息用于指示所述IO数据的完整性校验是否有错误。
8.根据权利要求7所述的网络接口卡,其特征在于,所述第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
9.根据权利要求7-8任一项所述的网络接口卡,其特征在于,所述第一指示信息承载在所述RDMA报文的确认消息或否定确认消息中。
10.根据权利要求7-9任一项所述的网络接口卡,其特征在于,所述通信接口还用于:
接收第二指示信息,所述第二指示信息用于指示清除所述IO数据的完整性校验有错误的信息。
11.根据权利要求10所述的网络接口卡,其特征在于,所述第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
12.一种消息收发方法,其特征在于,包括:
发送远程直接内存访问RDMA报文,所述RDMA报文包括输入输出IO数据以及数据完整性字段,所述数据完整性字段用于对所述IO数据的完整性进行校验;
接收第一指示信息,所述第一指示信息用于指示所述IO数据的完整性校验是否有错误;
根据所述第一指示信息确定是否重传所述RDMA报文。
13.根据权利要求12所述的方法,其特征在于,所述第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
14.根据权利要求12-13任一项所述的方法,其特征在于,所述第一指示信息承载在所述RDMA报文的确认消息或否定确认消息中。
15.根据权利要求12-14任一项所述的方法,其特征在于,所述根据所述第一指示信息确定是否重传所述RDMA报文,包括:
如果所述第一指示信息指示所述IO数据的完整性校验有错误,则对所述IO数据的完整性进行校验,如果完整性校验无错误,则重传所述RDMA报文,如果完整性校验有错误,则不重传所述RDMA报文。
16.根据权利要求12-15任一项所述的方法,其特征在于,还包括:
如果所述第一指示信息指示所述IO数据的完整性校验有错误,则发送第二指示信息,所述第二指示信息用于指示清除所述IO数据的完整性校验有错误的信息。
17.根据权利要求16所述的方法,其特征在于,所述第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
18.一种消息收发方法,其特征在于,包括:
接收远程直接内存访问RDMA报文,所述RDMA报文包括输入输出IO数据以及数据完整性字段;
根据所述数据完整性字段对所述IO数据的完整性进行校验;
发送第一指示信息,所述第一指示信息用于指示所述IO数据的完整性校验是否有错误。
19.根据权利要求18所述的方法,其特征在于,所述第一指示信息还用于指示完整性校验有错误的IO数据所属RDMA报文的消息序列号。
20.根据权利要求18-19任一项所述的方法,其特征在于,所述第一指示信息承载在所述RDMA报文的确认消息或否定确认消息中。
21.根据权利要求18-20任一项所述的方法,其特征在于,还包括:
接收第二指示信息,所述第二指示信息用于指示清除所述IO数据的完整性校验有错误的信息。
22.根据权利要求21所述的方法,其特征在于,所述第二指示信息承载在确认消息或否定确认消息中,或者,承载在RDMA写WRITE消息中,或者,承载在发送SEND消息中。
23.一种存储装置,其特征在于,包括如权利要求1-6任一项所述的网络接口卡和控制器,或者,包括如权利要求7-11任一项所述的网络接口卡和控制器,所述控制器通过所述网络接口卡接收输入输出IO数据或发送IO数据。
24.一种主机客户端,其特征在于,包括如权利要求7-11任一项所述的网络接口卡和处理器,所述处理器通过所述网络接口卡接收输入输出IO数据或发送IO数据。
CN202110722869.7A 2021-06-29 2021-06-29 网络接口卡、消息收发方法、存储装置和主机客户端 Pending CN115550079A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110722869.7A CN115550079A (zh) 2021-06-29 2021-06-29 网络接口卡、消息收发方法、存储装置和主机客户端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110722869.7A CN115550079A (zh) 2021-06-29 2021-06-29 网络接口卡、消息收发方法、存储装置和主机客户端

Publications (1)

Publication Number Publication Date
CN115550079A true CN115550079A (zh) 2022-12-30

Family

ID=84717297

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110722869.7A Pending CN115550079A (zh) 2021-06-29 2021-06-29 网络接口卡、消息收发方法、存储装置和主机客户端

Country Status (1)

Country Link
CN (1) CN115550079A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115955356A (zh) * 2023-01-03 2023-04-11 重庆长安汽车股份有限公司 一种域间安全通信方法、系统、设备和介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115955356A (zh) * 2023-01-03 2023-04-11 重庆长安汽车股份有限公司 一种域间安全通信方法、系统、设备和介质

Similar Documents

Publication Publication Date Title
US11792114B2 (en) System and method for facilitating efficient management of non-idempotent operations in a network interface controller (NIC)
US6545981B1 (en) System and method for implementing error detection and recovery in a system area network
US6724762B2 (en) System and method for implementing multi-pathing data transfers in a system area network
US6343067B1 (en) Method and apparatus for failure and recovery in a computer network
US7734720B2 (en) Apparatus and system for distributing block data on a private network without using TCP/IP
EP1108343B1 (en) Method and apparatus for input/output link retry, failure and recovery in a computer network
US10148581B2 (en) End-to-end enhanced reliable datagram transport
US7818362B2 (en) Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms
US7149220B2 (en) System, method, and product for managing data transfers in a network
US6915354B1 (en) Distributed iSCSI and SCSI targets
US11886940B2 (en) Network interface card, storage apparatus, and packet receiving method and sending method
WO2022089258A1 (zh) 网络接口卡、控制器、存储装置和报文发送方法
WO2023040949A1 (zh) 网络接口卡、消息发送方法和存储装置
WO2022179417A1 (zh) 网络接口卡、消息收发方法和存储装置
US6898638B2 (en) Method and apparatus for grouping data for transfer according to recipient buffer size
CN115664883A (zh) 具有高效存储协议仿真的网络适配器
CN115550079A (zh) 网络接口卡、消息收发方法、存储装置和主机客户端
US20240146806A1 (en) Intermediate apparatus, communication method, and program
CN115686344A (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