网卡的数据处理方法以及网卡

文档序号:1952022 发布日期:2021-12-10 浏览:2次 >En<

阅读说明:本技术 网卡的数据处理方法以及网卡 (Data processing method of network card and network card ) 是由 卢胜文 维克多·吉辛 李君瑛 于 2020-09-22 设计创作,主要内容包括:本申请提供了一种网卡的数据处理方法,该方法包括:网卡获取第一IO命令,所述第一IO命令指示将本端服务器中存储的数据写入至少一个对端服务器,所述第一IO命令中包括所述数据存储在所述本端服务器的地址信息和长度信息;网卡根据所述地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息;所述网卡根据所述多组地址信息以及长度信息从本端服务器获取多组地址信息以及长度信息对应的数据,并向至少一个对端服务器发送所述数据。本申请的技术方案中,网卡不需要大量的存储器来存放要写的数据,降低了程序的复杂度和存储器资源的消耗。(The application provides a data processing method of a network card, which comprises the following steps: a network card acquires a first IO command, the first IO command indicates that data stored in a local server is written into at least one opposite terminal server, and the first IO command comprises address information and length information of the data stored in the local server; the network card splits the data according to the address information and the length information to obtain a plurality of groups of address information and length information; and the network card acquires a plurality of groups of data corresponding to the address information and the length information from a local terminal server according to the plurality of groups of address information and the length information and sends the data to at least one opposite terminal server. In the technical scheme of the application, the network card does not need a large amount of memories to store the data to be written, and the complexity of the program and the consumption of memory resources are reduced.)

网卡的数据处理方法以及网卡

技术领域

本申请涉及服务器技术领域,更具体地,涉及一种网卡的数据处理方法以及网卡。

背景技术

随着云计算的兴起,为了减少对主机处理器(例如,中央处理器(centralprocessing unit,CPU))的占用率,让更多的主机CPU用来提供对外的售卖,或者是让用户的体验更好,让用户的CPU免受更多主机后台业务的影响。可以将原来运行在主机上的业务,例如管理业务、存储业务、网络业务等都卸载到网卡上,由网卡上的CPU对上述业务进行处理,这样,主机的CPU基本上可以全部提供给用户。

以存储业务为例,相关的技术方案中,对于输入输出(input output,IO)写命令,网卡需要将主机中要写的数据存储至网卡的存储器中,由网卡的处理器对该数据进行处理之后,将该数据发送至对端的服务器。对于IO读命令,则先把数据从对端服务器读到网卡的存储器中,然后再把数据写入到主机的存储器中。

上述相关的技术方案中,一方面,由于数据要从主机的存储器中读取数据到网卡的存储器中,这给网卡的总线带来很大的压力,也大大增加了网卡中处理器的开销。另一方面,网卡需要大量的存储器来存放这些数据,这些数据的存放和管理大大增加了程序的复杂度和存储器资源的消耗。

发明内容

本申请提供一种网卡的数据处理方法以及网卡,网卡可以不需要大量的存储器来存放要写的数据,降低了程序的复杂度和存储器资源的消耗。

第一方面,提供了一种网卡的数据处理方法,包括:所述网卡获取第一输入输出IO命令,所述第一IO命令指示将本端服务器中存储的数据写入至少一个对端服务器中,所述第一IO命令中包括所述数据存储在所述本端服务器的地址信息和长度信息;所述网卡根据所述地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息;所述网卡根据所述多组地址信息以及长度信息从所述本端服务器获取所述多组地址信息以及长度信息对应的数据,并向所述至少一个对端服务器发送所述数据。

上述技术方案中,对于IO写命令,要写的数据不需要从主机的存储器搬移到网卡的存储器中,网卡是基于主机的存储器中数据的存储地址和数据长度进行存储业务的处理,而不是基于主机的存储器中存储的真实的要写的数据。这样,一方面,由于数据不需要从主机的存储器中读取数据到网卡的存储器中,可以减小网卡总线的压力,也减小了网卡处理器的开销。另一方面,网卡不需要大量的存储器来存放要写的数据,降低了程序的复杂度和存储器资源的消耗。

在一种可能的实现方式中,所述网卡根据所述多组地址信息以及长度信息、所述本端服务器中下发所述第一IO命令的第一虚拟机VM对应的标识,从所述第一VM中获取所述多组地址信息以及长度信息对应的数据。

在另一种可能的实现方式中,所述网卡的存储器中不存储所述数据。

在另一种可能的实现方式中,所述方法还包括:所述网卡接收多个IO命令;所述网卡根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

在另一种可能的实现方式中,所述网卡包括硬件引擎,所述硬件引擎用于对数据面进行处理,所述网卡上的硬件引擎根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

在另一种可能的实现方式中,所述方法还包括:所述网卡根据所述第一IO命令的上下文信息确定所述多个数据是否全部写入所述至少一个对端服务器,所述第一IO命令的上下文信息中包括所述多个数据在所述至少一个对端服务器中存储状态;当所述多个数据全部分别写入所述至少一个对端服务器,所述网卡通过接口向所述本端服务器发送IO写完成消息。

第二方面,提供了一种网卡的数据处理方法,包括:所述网卡获取第二IO命令,所述第二IO命令指示将至少一个对端服务器中的数据存储至本端服务器,所述第二IO命令中包括所述数据写入所述本端服务器的地址信息和长度信息;所述网卡根据所述地址信息和长度信息对所述第二IO命令进行拆分,得到多个IO读消息,每个所述多个IO读消息中包括所述数据中的每个数据写入所述本端服务器的信息;所述网卡分别向所述至少一个对端服务器发送所述IO读消息。

上述技术方案中,对于IO读,不需要先将从对端服务器读取的数据写入网卡的内存,再写入VM内存中。这样,数据不需要上送网卡的内存中,一方面,可以减小网卡内存的资源消耗以及带宽压力,另一方面,还可以降低网卡处理器的开销。

在一种可能的实现方式中,所述每个数据写入所述本端服务器的信息包括以下中的任意一种:所述每个数据写入所述本端服务器的地址信息和长度信息;或所述每个数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息;或第一标识ID和所述本端服务器中写入所述数据的偏移信息,所述第一ID用于指示所述本端服务器中下发所述第二IO命令的VM信息和所述VM中写入所述数据的多组地址信息和长度信息。

在另一种可能的实现方式中,所述方法还包括:所述网卡从对端服务器接收第一IO读响应消息,所述第一IO读响应消息中包括本端服务器需要从所述对端服务器获取的第一数据;所述网卡根据所述第一IO读响应消息确定所述第一数据写入所述本端服务器的地址信息和长度信息;所述网卡根据所述地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述第一IO读响应消息中包括第一ID和所述第一数据写入所述本端服务器的偏移信息,所述网卡根据所述第一ID确定所述VM中写入数据的多组地址信息和长度信息;所述网卡根据所述偏移信息从所述多组地址信息和长度信息中确定第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,所述第一IO读响应消息中包括所述第一数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息,所述网卡根据所述第一IO读响应消息中包括的信息确定所述第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,长度信息在权限表的范围内,所述权限表中包括所述本端服务器中写入数据的多组地址信息和长度信息;所述网卡根据所述第一IO读响应消息中包括的地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述方法还包括:所述网卡根据所述第二IO命令的上下文信息确定所述多个数据是否全部写入所述本端服务器,所述第二IO命令的上下文信息中包括所述多个数据在所述本端服务器中存储的完成状态;当所述多个数据全部写入所述本端服务器中,所述网卡通过接口向所述本端服务器发送IO读完成消息。

第三方面,提供了一种网卡,包括:获取模块、拆分模块,发送模块,

所述获取模块,用于获取第一输入输出IO命令,所述第一IO命令指示将本端服务器中存储的数据写入至少一个对端服务器中,所述第一IO命令中包括所述数据存储在所述本端服务器的地址信息和长度信息;

所述拆分模块,用于根据所述地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息;

所述发送模块,还用于根据所述多组地址信息以及长度信息从所述本端服务器获取所述多组地址信息以及长度信息对应的数据,并向所述至少一个对端服务器发送所述数据。

在一种可能的实现方式中,所述获取模块具体用于:根据所述多组地址信息以及长度信息、所述本端服务器中下发所述第一IO命令的第一虚拟机VM对应的标识,从所述第一VM中获取所述多组地址信息以及长度信息对应的数据。

在另一种可能的实现方式中,所述网卡的存储器中不存储所述数据。

在另一种可能的实现方式中,所述网卡还包括:调度模块,

所述获取模块,还用于接收多个IO命令;

所述调度模块,用于根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

在另一种可能的实现方式中,所述网卡包括硬件引擎,所述硬件引擎用于对数据面进行处理,硬件引擎根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

在另一种可能的实现方式中,所述网卡还包括:确定模块,

所述确定模块,用于根据所述第一IO命令的上下文信息确定所述多个数据是否全部写入所述至少一个对端服务器,所述第一IO命令的上下文信息中包括所述多个数据在所述至少一个对端服务器中存储状态;

所述发送模块,还用于当所述多个数据全部分别写入所述至少一个对端服务器,通过接口向所述本端服务器发送IO写完成消息。

第三方面和第三方面的任意一个可能的实现方式的有益效果和第一方面以及第一方面的任意一个可能的实现方式的有益效果是对应的,对此,不再赘述。

第四方面,提供了一种网卡,包括:获取模块,拆分模块,发送模块,

所述获取模块,用于获取第二IO命令,所述第二IO命令指示将至少一个对端服务器中的数据存储至本端服务器,所述第二IO命令中包括所述数据写入所述本端服务器的地址信息和长度信息;

所述拆分模块,用于根据所述地址信息和长度信息对所述第二IO命令进行拆分,得到多个IO读消息,每个所述多个IO读消息中包括所述数据中的每个数据写入所述本端服务器的信息;

所述发送模块,用于分别向所述至少一个对端服务器发送所述IO读消息。

在一种可能的实现方式中,所述每个数据写入所述本端服务器的信息包括以下中的任意一种:所述每个数据写入所述本端服务器的地址信息和长度信息;或所述每个数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息;或第一标识ID和所述本端服务器中写入所述数据的偏移信息,所述第一ID用于指示所述本端服务器中下发所述第二IO命令的VM信息和所述VM中写入所述数据的多组地址信息和长度信息。

在另一种可能的实现方式中,所述网卡还包括:确定模块,存储模块,

所述获取模块,还用于从对端服务器接收第一IO读响应消息,所述第一IO读响应消息中包括本端服务器需要从所述对端服务器获取的第一数据;

所述确定模块,用于根据所述第一IO读响应消息确定所述第一数据写入所述本端服务器的地址信息和长度信息;

所述存储模块,用于根据所述地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述第一IO读响应消息中包括第一ID和所述第一数据写入所述本端服务器的偏移信息,

所述确定模块具体用于:根据所述第一ID确定所述VM中写入数据的多组地址信息和长度信息;

所述存储模块具体用于:根据所述偏移信息从所述多组地址信息和长度信息中确定第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,所述第一IO读响应消息中包括所述第一数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息,

所述确定模块具体用于:根据所述第一IO读响应消息中包括的信息确定所述第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,确定模块具体用于:确定所述第一IO读响应消息中包括的地址信息和长度信息在权限表的范围内,所述权限表中包括所述本端服务器中写入数据的多组地址信息和长度信息;

所述存储模块具体用于:根据所述第一IO读响应消息中包括的地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述确定模块还用于:根据所述第二IO命令的上下文信息确定所述多个数据是否全部写入所述本端服务器,所述第二IO命令的上下文信息中包括所述多个数据在所述本端服务器中存储的完成状态;

所发送模块还用于:当所述多个数据全部写入所述本端服务器中,通过接口向所述本端服务器发送IO读完成消息。

第四方面和第四方面的任意一个可能的实现方式的有益效果和第二方面以及第二方面的任意一个可能的实现方式的有益效果是对应的,对此,不再赘述。

第五方面,提供了一种网卡,包括:处理器和存储器,所述处理器运行所述存储器中的指令,使得所述计算设备执行如上述第一方面或第一方面的任意一种可能的实现方式中所执行的方法步骤。

第六方面,提供了一种网卡,包括处理器和存储器,所述处理器运行所述存储器中的指令,使得所述计算设备执行如上述第二方面或第二方面的任意一种可能的实现方式中所执行的方法步骤。

第七方面,提供了一种服务器,包括如上述第三方面或第三方面的任意一种可能的实现方式中的网卡。

第八方面,提供了一种服务器,包括如上述第四方面或第四方面的任意一种可能的实现方式中的网卡。

第九方面,提供了一种计算机可读存储介质,包括指令;所述指令用于实现如第一方面或第一方面的任意一种可能的实现方式中所执行的方法步骤。

可选地,作为一种实现方式,上述存储介质具体可以是非易失性存储介质。

第十方面,提供了一种计算机可读存储介质,包括指令;所述指令用于实现如第二方面或第二方面的任意一种可能的实现方式中所执行的方法步骤。

可选地,作为一种实现方式,上述存储介质具体可以是非易失性存储介质。

第十一方面,提供一种芯片,该芯片获取指令并执行该指令来实现上述第一方面以及第一方面的任意一种实现方式中的方法。

可选地,作为一种实现方式,该芯片包括处理器与数据接口,该处理器通过该数据接口读取存储器上存储的指令,执行上述第一方面以及第一方面的任意一种实现方式中的方法。

可选地,作为一种实现方式,该芯片还可以包括存储器,该存储器中存储有指令,该处理器用于执行该存储器上存储的指令,当该指令被执行时,该处理器用于执行第一方面以及第一方面中的任意一种实现方式中的方法。

第十二方面,提供一种芯片,该芯片获取指令并执行该指令来实现上述第二方面或第二方面的任意一种可能的实现方式中的方法。

可选地,作为一种实现方式,该芯片包括处理器与数据接口,该处理器通过该数据接口读取存储器上存储的指令,实现上述第二方面或第二方面的任意一种可能的实现方式中的方法。

可选地,作为一种实现方式,该芯片还可以包括存储器,该存储器中存储有指令,该处理器用于执行该存储器上存储的指令,当该指令被执行时,该处理器用于实现第二方面或第二方面的任意一种可能的实现方式中的方法。

附图说明

图1是本申请实施例提供的一种架构示意图。

图2是本申请实施例提供的一种应用场景示意图。

图3是本申请实施例提供的一种网卡的数据处理的方法的示意性流程图。

图4是本申请实施例提供的一种网卡400的结构示意图。

图5是本申请实施例提供的一种网卡对IO写命令进行处理的方法的示意性流程图。

图6是本申请实施例提供的一种IO命令调度的示意性框图。

图7是本申请实施例提供的一种数据拆分过程的示意性框图。

图8是本申请实施例提供的一种IO命令处理过程的示意性框图。

图9是本申请实施例提供的一种网卡对IO读命令进行处理的方法的示意性流程图。

图10是本申请实施例提供的一种网卡对IO写响应消息进行处理的方法的示意性流程图。

图11是本申请实施例提供的另一种网卡对IO写响应消息进行处理的方法的示意性流程图。

图12是本申请实施例提供的另一种网卡对IO写响应消息进行处理的方法的示意性流程图。

图13是本申请实施例提供的一种网卡1300的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

本申请将围绕包括多个设备、组件、模块等的系统来呈现各个方面、实施例或特征。应当理解和明白的是,各个系统可以包括另外的设备、组件、模块等,并且/或者可以并不包括结合附图讨论的所有设备、组件、模块等。此外,还可以使用这些方案的组合。

另外,在本申请实施例中,“示例的”、“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用示例的一词旨在以具体方式呈现概念。

本申请实施例中,“相应的(corresponding,relevant)”和“对应的(corresponding)”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。

本申请实施例描述的网络架构以及业务场景是为了更加清楚地说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。

在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。

本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:包括单独存在A,同时存在A和B,以及单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

随着云计算的兴起,为了减少对主机处理器(例如,中央处理器(centralprocessing unit,CPU))的占用率,让更多的主机CPU用来提供对外的售卖,或者是让用户的体验更好,让用户的CPU免受更多主机后台业务的影响。如图1所示,现在的云计算厂家逐渐将原来运行在主机上的管理业务、存储业务、网络业务等都卸载到网卡上,由网卡上的CPU对上述业务进行处理,这样,主机的CPU基本上可以全部提供给用户。

下面以图2所示的应用场景为例,对存储业务进行详细描述。

如图2所示,该场景中可以包括主机210、网卡220、目的存储设备230。下面分别对各个设备进行详细描述。

1、主机210

主机210中可以包括至少一个处理器211以及存储器212。

可选地,主机210中还包括系统总线213。其中,至少一个处理器211和存储器212分别与系统总线213连接。

处理器211能够通过系统总线213访问存储器212,例如,处理器211能够通过系统总线在存储器212中进行数据读写或代码执行。该系统总线213例如可以是快速路径互连(quick path interconnect,QPI)或超路径互连(ultra path interconnect,UPI)等。所述系统总线213分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

一种可能的实现方式,处理器211的功能主要是解释计算机程序的指令(或者说,代码)以及处理计算机软件中的数据。其中,该计算机程序的指令以及计算机软件中的数据能够保存在存储器212中。

处理器211是主机210的运算核心和控制核心(control unit)。处理器211中可以包括多个处理器核(core)。处理器211中所有的计算、接受命令、存储命令、处理数据都由处理器核(core)执行。处理器核(core)分别独立地运行程序指令,利用并行计算的能力加快程序的运行速度。处理器核(core)具有固定的逻辑结构,例如,包括一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元。

可选地,处理器211可能是集成电路芯片,并具有信号的处理能力。作为示例而非限定,处理器110是通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。其中,通用处理器是微处理器等。例如,该处理器110是中央处理单元(central processing unit,CPU)。

存储器212是主机210的主存(也可以称为主机210的内存)。存储器212通常用来存放操作系统中各种正在运行的软件程序、上层应用下发的输入输出(input output,IO)命令以及与外存交换的信息等。为了提高处理器211的访问速度,存储器212需要具备访问速度快的优点。在一些计算机系统架构中,采用动态随机存取存储器(dynamic randomaccess memory,DRAM)作为存储器212。处理器211能够通过内存控制器(图1中未示出)高速访问存储器212,对存储器212中的任意一个存储单元进行读操作和写操作。

还应理解,本申请实施例中的存储器212可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random accessmemory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。

2、网卡220

网卡220用于实现主机210与通信网络中的其他服务器(例如,图1所示的目的存储设备230)之间的通讯。网卡220可以内置在主机210中,或者还可以作为主机210的外接设备,并通过接口与主机210连接。该接口例如可以是总线和接口标准(peripheralcomponent interface express,PCIE)接口。

为了便于描述,图2中以网卡220作为主机210的外接设备进行描述。

网卡220也可以包括存储器222、处理器221。可选地,网卡220还可以包括总线223。网卡220的内部结构可以与主机210类似,具体的请参考上文对主机210中各部分的描述,此处不再赘述。

3、目的存储设备230

目的存储设备230也可以包括存储器、处理器、网卡。可选地,目的存储设备230还可以包括总线。目的存储设备230的内部结构可以与主机210类似,具体的请参考上文对主机210中各部分的描述,此处不再赘述。

在数据处理和通信的场景中,以主机210作为本端,以目的存储设备230作为通信的对端。主机210上的虚拟机(virtual machine,VM)下发输入输出(input output,IO)命令,主机210上的处理器211可以将上述IO命令通过总线213发送至存储器212。网卡220从存储器212中获取上述IO命令,并对上述IO命令进行处理。

以IO命令为读命令和写命令作为示例,读命令是指由主机上运行的应用程序(例如,VM)下发的用于指示向远端设备(例如,目的存储设备)读数据,写命令是指由主机上运行的应用程序(例如,VM)下发的用于指示向远端设备写数据的命令。主机的处理器可以接收IO命令,并将其存储在存储器中,以使得IO命令等待被网卡220处理后发送给作为通信对端的目的存储设备230。

相关的技术方案中,以该IO命令为IO写命令为例,IO写的数据存储在存储器212中,网卡220需要先把要写的数据从主机210的存储器212中搬移到网卡220的存储器222中。然后网卡220的处理器221再从网卡220的存储器222中获取要写的数据,针对该数据完成存储业务的处理,并生成数据消息包,将要写的数据通过生成的消息包发送给通信对端的目的存储设备230。

相关的技术方案中,以该IO命令为IO读命令为例,网卡220的处理器221将从通信对端的目的存储设备230获得数据,将该数据存储在网卡220的存储器222中。再从网卡220的存储器222中获取数据,对该数据组装成完整的IO数据,并将该IO数据写入主机210的存储器212中。

上述相关的技术方案中,以IO写命令为例,要写的数据需要从主机210的存储器212搬移到网卡220的存储器222中,再由网卡220的处理器221针对该数据完成存储业务的处理。一方面,由于数据要从主机210的存储器212中读取数据到网卡220的存储器222中,这给网卡220的总线223带来很大的压力,也大大增加了网卡220中处理器221的开销。另一方面,网卡220需要大量的存储器222来存放这些数据,这些数据的存放和管理大大增加了程序的复杂度和存储器222资源的消耗。

有鉴于此,本申请提出了一种数据存储的方法,要写的数据不需要从主机210的存储器212搬移到网卡220的存储器222中。一方面,可以减小存储器222的资源消耗以及带宽压力,另一方面,还可以降低网卡220中处理器221的开销。

下面结合图3,对本申请实施例提供的一种数据存储的方法进行详细的介绍。

图3是本申请实施例提供的一种网卡的数据处理的方法的示意性流程图。如图3所示,该方法可以包括步骤310-330,下面分别对步骤310-330进行详细描述。

步骤310:网卡获取第一IO命令,第一IO命令中包括数据存储在本端服务器的地址信息和长度信息。

本申请实施例中,第一IO命令可以用于指示将存储在本端服务器中的数据写入至少一个对端服务器。作为示例,该数据可以存储在本端服务器的内存中。

一个示例,上述本端服务器可以是图2中的主机210。上述对端服务器可以是一个存储设备,或者是具有计算能力的计算设备。一个示例,对端服务器为图2中的目的存储设备230。

网卡可以作为本端服务器的外接设备,并通过接口与本端服务器连接。该接口可以是总线和接口标准(peripheral component interface express,PCIE)接口。具体的连接关系请参考图2中的描述,此处不再赘述。

步骤320:网卡根据所述地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息。

网卡可以基于第一IO命令中携带的数据的地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息。应理解,数据的地址信息和长度信息可以用来描述本端服务器的存储器中存储的一个数据块。

本申请实施例中,网卡的存储器可以不需要存储本端服务器中需要写入至少一个对端服务器的数据,因此,网卡对该数据的拆分可以不基于真实的数据,而是根据数据的虚拟的地址信息(例如,数据在本端服务器的存储器中的地址信息和长度信息)对该数据进行拆分,这样,一方面,由于数据不需要从本端服务器的存储器中读取数据到网卡的存储器中,可以减小网卡总线的压力,也减小了网卡处理器的开销。另一方面,网卡不需要大量的存储器来存放要写的数据,降低了程序的复杂度和存储器资源的消耗。

步骤330:网卡根据所述多组地址信息以及长度信息从本端服务器获取多组地址信息以及长度信息对应的数据,并向至少一个对端服务器发送所述数据。

应理解,在步骤330中,网卡在需要向至少一个对端服务器发送数据时,直接根据所述多组地址信息以及长度信息从本端服务器获取多组地址信息以及长度信息对应的数据,并发送给至少一个对端服务器。

需要说明的是,网卡获取到的数据不会存储在网卡的存储器中,而是从本端服务器的存储器中获取到数据后,直接发送给至少一个对端服务器。

一种可能的实现方式中,网卡可以基于拆分之后得到的多组地址信息和长度信息,从本端服务器获取多组地址信息以及长度信息对应的数据。可选地,在一些实施例中,网卡还可以基于所述多组地址信息以及长度信息、本端服务器中下发第一IO命令的第一虚拟机VM对应的标识,从所述第一VM中获取所述多组地址信息以及长度信息对应的数据。这样,网卡可以准确的从某个VM的内存中获取数据。

上述技术方案中,网卡可以作为本端服务器的外接设备,并通过接口与本端服务器连接。对于IO写命令,要写的数据不需要从本端服务的存储器搬移到网卡的存储器中,网卡是基于本端服务的存储器中数据的存储地址和数据长度进行存储业务的处理,而不是基于本端服务的存储器中存储的真实的要写的数据。这样,一方面,由于数据不需要从本端服务的存储器中读取数据到网卡的存储器中,可以减小网卡与存储器总线的压力,也减小了网卡处理器的开销。另一方面,网卡不需要大量的存储器来存放要写的数据,降低了程序的复杂度和存储器资源的消耗。

下面结合图4,对本申请实施例提供的一种可能的网卡的结构进行详细描述。

图4是本申请实施例提供的一种网卡400的结构示意图。如图4所示,该网卡400通过PCIE接口与主机210连接。

网卡400中可以包括:数据平面卸载引擎410、内存控制器420、CPU核430、内存440、系统总线450。

1、数据平面卸载引擎410

作为示例,数据平面卸载引擎410可以由硬件逻辑或现成可编程门阵列(fieldprogrammable gate array,FPGA)或网络处理器(network processor,NP)这样的专门支持数据面处理的专用处理架构的引擎组成。其特点就是能够对报文进行快速的转发处理,但不适合做复杂协议处理。

应理解,数据平面卸载引擎410比较适合做网络转发的处理,所以通常网络转发的数据面可以由其承担。但存储业务的数据面,由于业务的复杂性,很难完全由其直接完成,通常需要CPU核来完成430。

数据平面卸载引擎410可以通过PCIE接口与主机210连接,用于获取主机210的存储器212中存储的数据。数据平面卸载引擎410还可以通过系统总线450与CPU核430、内存控制器420相连,可实现数据平面卸载引擎410内部的各个模块与CPU核430以及内存控制器420之间的高速通信。

数据平面卸载引擎410内部可以包括:设备模拟模块411、IO命令处理模块412、数据调度模块430、网络协议处理引擎460。

下面分别对数据平面卸载引擎410中包括的各个模块的功能进行详细描述。

设备模拟模块411,主要用于实现设备的模拟,以便于网卡400对主机或主机上运行的虚拟机VM呈现出所需的设备,例如,存储、网络等设备的模拟。作为示例,设备模拟模块411用于实现非易失性内存主机控制器接口规范(non-volatile memory express,NVMe)存储设备、小型计算机系统接口(small computer system interface,SCSI)设备、虚拟的小型计算机系统接口(virtio-SCSI)设备、virtio-BLK设备、virtio的其他类型的设备的呈现。

应理解,设备模拟也可以由硬件逻辑和CPU核共同完成,通常强数据交互的由数据面卸载引擎完成,配置相关的由CPU核配合完成。

IO命令处理模块412,用于对IO命令进行简单的分析处理。作为一个示例,可以用于确定IO命令是读命令还是写命令。作为另一个示例,对于IO的读写命令,通常需要走调度,从而保证设备IO的服务质量(quality of service,Qos)。

数据调度模块430,用于对多个IO命令进行调度。作为一个示例,该调度可以包括对数据的Qos处理。例如,为了避免一个VM或者一个卷的负载不合理,需要限制每个设备的带宽和包率。对于存储IO数据,通常还需要要基于卷的每秒的输入输出操作(input outputoperation per second,IOPS)、带宽和整个VM的IOPS和带宽管理对IO命令进行调度。

网络协议处理引擎460,主要用于完成网络协议的处理,保证数据可靠的传到目的节点。上述网络协议可以有多种,本申请对此不做具体限定,例如,该网络协议可以是远程直接数据存取(remote direct data access,RDMA)协议,又如,该网络协议还可以是传输控制协议(transmission control protocol,TCP)协议,又如,该网络协议还可以是自定义的可靠传输协议。

2、内存控制器420

内存控制器420用于控制内存440与CPU核430之间的数据交互。具体地说,内存控制器420从CPU核430接收内存访问请求,并基于该内存访问请求控制针对内存440的访问。

一种实现举例,各内存控制器420通过系统总线450进行针对内存440的寻址。并且在系统总线中配置仲裁器(图中未示出),该仲裁器负责处理和协调多个CPU核430的竞争访问。

3、CPU核430

CPU核430是CPU最重要的组成部分,也可以称为CPU处理单元。是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受命令、存储命令、处理数据都由CPU核430执行。CPU核430分别独立地运行程序指令,利用并行计算的能力加快程序的运行速度。各种CPU核430都具有固定的逻辑结构,例如,CPU核430包括一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元。

CPU核430一般用于进行复杂的业务处理,通常会运行操作系统(operatingsystem,OS),这样可以在其上面运行复杂的业务处理软件,各种管理软件,控制面软件等等。

4、内存440

内存440可以作为CPU核430的外接内存,用于存储CPU核430的程序运行和数据平面卸载引擎410的部分表项。

本申请实施例对外接内存440不做具体限定,作为示例,该外接内存440为双倍速率(double data rate,DDR)内存。

应理解,由于数据平面卸载引擎410内部集成的片内存储器是高速缓存,但其速度快、成本高,只能少量集成。大规模的表项需要存储在外接的内存440中。例如外接的内存440中存储网络转发需要的大的转发流表,网络连接的收发队列,网络连接的上下文表项,IO的上下文表项等。

还应理解,我们常说的数据上送CPU,其实是上送CPU核430的外接内存440中。本文后面所说的数据上送CPU,上送CPU内存都是指上送CPU核430的外接内存440中。

5、系统总线450

系统总线450可以连接数据平面卸载引擎410与CPU核430、内存控制器420,使得数据平面卸载引擎410与CPU核430、内存控制器420之间可以通过系统总线450进行通信。

下面以图4所示的硬件架构为例,结合图5中的例子,详细描述网卡对IO写命令进行处理的一种具体实现方式。应理解,图5的例子仅仅是为了帮助本领域技术人员理解本申请实施例,而非要将申请实施例限制于图5的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改和变化也落入本申请实施例的范围内。

图5是本申请实施例提供的一种网卡对IO写命令进行处理的方法的示意性流程图。如图5所示,该方法可以包括步骤510-560,下面分别对步骤510-560进行详细描述。

步骤510:主机210中的VM下发IO写命令。

主机的某个VM可以基于一个存储IO设备接口(例如NVMe、SCSI、Virtio-BLK、Virtio-SCSI等)发起存储业务的IO写命令。

需要说明的是,图5所示的实施例中提及的IO命令或待处理的IO命令可以理解为待处理的IO写命令。

应理解,本申请实施例可以通过一个标识(identity,ID)来标识一个虚拟化的设备。以上的存储IO设备在PCIE上通常会映射成一个功能(function),在启用单根IO虚拟化(single-root I/O virtualization,SR-IOV)的情况下,以上的存储IO设备既可以是物理功能(Physical function,PF),也可以是虚拟功能(virtual function,VF)。在启用可伸缩的IO虚拟化(scalable I/O virtualization,scalable-IOV)的情况下,以上的存储IO设备还可以是ADI。

由于通常VF数量更多,在VM应用场景,给VM分配主要是VF,为了描述简单,后面描述以VF来描述,但只要没有特别强调只能是PF,所有VF描述的地方都同样适用于PF。也就是说,作为一个示例,可以通过VF来标识一个运行在主机210中的一个VM。

步骤520:主机210中的处理器211向网卡400发送提示消息。

处理器211将待处理的IO写命令发送至存储器212后,可以向网卡400发送提示消息。该提示消息用于通知数据平面卸载引擎410有待处理的IO命令。

作为示例,该提示消息可以为门铃(door bell,DB)。

步骤530:网卡400中的IO命令处理模块412对待处理的IO写命令进行处理。

对于IO命令例如IO读、IO写命令,则通常需要进行Qos控制。例如针对IO命令中的逻辑单元号(logical unit number,LUN)信息(在NVMe中是名字空间),可以将VM的LUN ID以及入口的VF信息转换成全局LUN ID,该全局LUN ID可以是目的存储设备的地址信息。或者也可以直接使用VF+VM的LUN ID。

为了便于描述,后文中出现的LUN ID可以理解为全局LUN ID。

应理解,VF信息(例如,VF ID)不在IO命令里面,就像一个报文进入网卡的如端口属性一样,这个信息不在报文里面。

步骤540:网卡400中的数据调度模块430对待处理的IO命令进行调度。

应理解,步骤540是可选地。也就是说,如果上述待处理的IO命令是多个IO命令,为了避免一个VM或者一个卷的负载不合理,需要限制每个设备的带宽和包率,因此,需要对上述多个IO命令进行调度,从多个IO命令中选择出符合条件的IO命令。数据调度模块430可以将符合条件的IO命令存储在网卡400的内存440中的IO消息接收队列中。

如图6所示,数据平面卸载引擎410中的数据调度模块430对所述多个IO命令进行调度,并将调度的IO命令存储在IO消息接收队列中。

一种可能的实现方式中,数据调度模块430可以对所述多个IO命令进行一级调度,选择出符合条件的IO命令。例如,数据调度模块430可以根据目的存储设备中存储所述待处理的IO命令的存储地址,对待处理的IO命令进行调度,选择出符合条件的IO命令。又如,数据调度模块430还可以根据主机210中下发所述多个IO命令的虚拟机VM,对待处理的IO命令进行调度,选择出符合条件的IO命令。

另一种可能的实现方式中,数据调度模块430还可以对所述多个IO命令进行多级调度,并选择出符合条件的IO命令。以二级调度为例,第一级是基于LUNID对IO命令进行调度,第二级是基于VM对IO命令进行调度。具体的,数据调度模块430可以根据目的存储设备中存储所述待处理的IO命令的存储地址以及主机210中下发所述多个IO命令的虚拟机VM,对待处理的IO命令进行调度,选择出符合条件的IO命令。

本申请实施例中,如果IO消息接收队列的规格不大,可以利用数据平面卸载引擎410的内部缓存进行存储。但如果IO消息接收队列的规格比较大,芯片内部的缓存无法保存时,这些队列可以放在网卡400的外接内存440中。

上述符合条件的IO命令可以是对IO命令读写的数据大小进行流量测量。应理解,上述测量可以包括但不限于:测量IOPS,每秒允许的IO次数,或者IO带宽等。

本申请实施例中可以使用令牌桶(token bucket)算法来进行流量的测量。所谓令牌桶算法,就是在令牌桶中放置一定数量的令牌,一个令牌允许发送指定单位的数据(例如,1Byte)。当发送完1Byte数据后,需要从桶中移除一个令牌。当桶里没有剩余令牌的时候,继续发送任何大小的数据,都会被认为超过了额定带宽。只有当桶中有剩余令牌时,才能继续发送数据。

一个示例,可以通过2个令牌桶来获得更为承诺性能(保证的性能)和允许的峰值性能(在处理能力有空闲的情况下最大允许的性能),以实现更为精准的控制。

令牌桶(token bucket)算法就好像一个池塘里的水一样,既可以流出也可以流入。令牌桶中的令牌不仅仅可以被移除,同样也可以往里添加。为了保证可以随时发送数据,还可以往桶里加令牌。因此,往令牌桶里添加令牌的速度,也就决定了发送数据的速度。比如设置用户的带宽为1GBps,每个令牌表示1Mbit,只要保证每秒钟往桶里添加1000个令牌即可。

因此,本申请实施例中为了获得更为灵活的QoS调度效果,令牌桶提供令牌调整接口,由CPU核430基于报文的特点进行令牌回补。例如,为了避免VM连续产生小IO命令,CPU核430可以进行实地合并,适当回补部分令牌。这样,可以避免出现的带宽不足,影响用户体验。

上述技术方案中,由数据面执行QoS调度,可以获得更为精确和稳定的Qos保证和更好的性能。支持CPU核的令牌回补调整,又可以提供更高Qos的灵活性。

步骤550:CPU核430对IO命令进行处理。

IO命令存储在网卡400的外接内存440后,CPU核430上的软件分析IO命令。作为示例,IO命令通常可以包括:LUN、逻辑区块地址(logical block address,LBA)、数据大小(size)以及指向数据块的分散集中(scatter gather,SG)列表等信息。

LUN表示要访问的存储单元的ID,例如,图2所示的目的存储设备230的ID。LBA表示要访问的存储单元上数据所在的区块,也就是要访问的数据存储在LUN中的逻辑地址起始地址。size表示读取该地址后面数据的大小。CPU核430可以基于LUN、LBA以及size进行目的存储设备的寻址。

SG列表是多项由地址和长度组成的一个列表。一个地址+长度构成一个内存块,多个地址块就构成主机中存放IO数据所需的全部内存大小。也就是说,SG列表是指一个通过起始地址+长度的序列来描述一个分散存放的数据块,多个数据块组合成一个逻辑上连续的数据块。

应理解,SG列表中的一个地址+长度可对应于上文中数据的地址信息和长度信息。

对于IO写而言,SG列表表示从主机的存储器(内存)的哪些地方读取数据,并写到目的存储设备中。

需要说明的是,SG本身只有地址和长度信息,在虚拟化应用时,还要加上VF ID信息,才能准确映射到对应VM的内存地址。

本申请实施例中,CPU核430可以基于待处理的数据在主机内存中的地址以及数据长度进行存储业务的处理。该存储业务的处理过程有多种,例如,数据拆分处理、数据去重、数据加密、数据压缩、数据快照等等。

下面以数据拆分处理为例,对CPU核430基于待处理的数据在主机内存中的地址以及数据长度进行存储业务处理的具体实现过程进行详细描述。

应理解,对于云计算上常用的分布式存储系统,数据会被分散保存到成百上千个目的存储设备上。这样,就可以同时实现对数据的高速并发访问,获得极高的性能,也可以获得更好的安全性和扩展性。这个过程就是对数据进行拆分的过程。也就是将数据拆分成固定大小的数据块,例如拆分成4K、8K、16K、32K等等大小的数据块,不同的数据块发往不同的目的存储设备。

对于IO写,需要对要写的数据进行拆分,并将不同的数据块发送到不同的目的存储设备上。对于IO读,需要从多个目的存储设备分别获取不同的数据块,并将不同的数据块组合成完整的一个IO数据,读是写的逆过程。

可选地,在一些实施例中,为了提高发往多个目的存储设备的效率,通常还可以适当做一下汇聚,将发往同一个目的存储设备的多个数据块组合成一个更大的数据包,例如组合成128KB的大包一次性发送出去。这样,可以避免频繁的调用协议栈进行数据发送,导致CPU核430过载。

通常对数据进行拆分的过程如图7所示,IO数据横向进行拆分,将一个IO数据拆分为多个数据块。纵向生成的就是一个个数据包,每个数据包唯一对应一个分布式远端的目的存储设备。每个数据包中可以包括一个数据块,或者也可以包括发往同一个目的存储设备的多个数据块。

本申请实施例中,由于IO写的真实数据存储在主机210中的存储器212,而没有存储在网卡400中的内存440中,因此,CPU核430对数据进行分区的过程不是基于IO写的真实数据,而是基于IO命令中SG的虚拟数据指针(数据在主机210存储器212中的地址信息和长度信息)进行拆分,其指向的对应主机VF的地址和长度的数据块。

也就是说,本申请实施例不是对IO写的真实数据进行拆分,而是基于存储器212中存放某个VM的IO数据的内存地址和数据长度进行拆分,从而得到拆分之后的VF+SG信息。

步骤560:CPU核430指示网络协议处理引擎460向远端的至少一个目的存储设备发送IO写的数据。

CPU核430对IO命令处理完之后,可以生成消息包,该消息包中包括消息头。消息头中可以携带对应的目的存储设备的信息,该信息通常可以是网络连接的发送队列。CPU核430可以将拆分的M个数据块放入M个消息队列中,其中,每个数据块存放的不是要写的真实的数据,而是VF+SG信息。

CPU核430还可以向网络协议处理引擎460发起存储数据处理指令,该指令用于指示网络协议处理引擎460获取IO写的真实数据,并对IO写的真实数据进行消息封装,并将封装后的报文发送到对应的远端目的存储设备中,从而实现IO写的过程。

作为示例,网络协议处理引擎460分别从M个消息队列中读取每个数据块中存放的VF+SG信息,并分别向VF对应的VM发起DMA,从而根据VF+SG信息获取各个数据块对应的IO写的真实数据。

如图8所示,例如,网络协议处理引擎460可以接收CPU核430发送的消息1中包含:VF1+SG1、VF2+SG1、VF3+SG1···VFm+SGn,网络协议处理引擎460可以通过PCIE接口从主机210的存储器212中获取或读取VF1+SG1对应的数据、VF2+SG1对应的数据、VF3+SG1对应的数据···VFm+SGn对应的数据等。

又如,网络协议处理引擎460可以接收CPU核430发送的消息2中包含:VF1+SG2、VF2+SG2、VF3+SG2···VFm+SGm,网络协议处理引擎460可以通过PCIE接口从主机210的存储器212中获取或读取VF1+SG2对应的数据、VF2+SG2对应的数据、VF3+SG2对应的数据···VFm+SGm对应的数据等。

网络协议处理引擎4600可以对从存储器212中获取到的数据进行封装,然后组合成真正有包含数据的消息后发送给远端目的存储设备,从而实现将IO写的数据写入目的存储设备中。

可选地,网卡400还可以根据所述IO命令的上下文信息确定所述数据是否全部写入至少一个目的存储设备中,当所述多个数据全部分别写入所述至少一个目的存储设备,网卡400通过PCIE接口向所主机210发送IO写完成消息。应理解,IO命令的上下文信息中可以包括所述数据在所述至少一个目的存储设备中的存储状态。

下面以图4所示的硬件架构为例,结合图9中的例子,详细描述网卡对IO读命令进行处理的一种具体实现方式。应理解,图9的例子仅仅是为了帮助本领域技术人员理解本申请实施例,而非要将申请实施例限制于图9的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改和变化也落入本申请实施例的范围内。

图9是本申请实施例提供的一种网卡对IO读命令进行处理的方法的示意性流程图。如图9所示,该方法可以包括步骤910-950,下面分别对步骤910-950进行详细描述。

步骤910:主机210中的VM下发IO读命令。

IO读命令用于指示从目的存储设备获取需要读取的数据,并将该数据存储在主机210中。作为示例,可以将该数据存储在主机210中下发IO读命令的VM对应的内存中。

IO读命令也可以称为IO读消息。

步骤915:主机210中的处理器211向网卡400发送提示消息。

步骤917:网卡400中的数据平面卸载引擎410将IO读命令转发到网卡400的外接内存440中。

步骤920:网卡400上的CPU核430对IO读命令进行处理。

CPU核430上的软件分析IO读命令。IO读命令通常可以包括读取的目的存储设备信息,该存储设备的信息包括但不限于:LUN、LBA、数据大小以及主机210本地存放数据的内存的VF+SG列表等信息。

对于IO读而言,VF+SG信息表示将从目的存储设备中读取的数据写到主机210的存储器(内存)的哪些地方。

本申请实施例中,CPU核430可以根据从目的存储设备中读取的数据写到主机210的存储器的地址信息和长度信息(SG列表)对所述IO读命令进行拆分,得到多个IO读消息。每个所述多个IO读消息中包括从目的存储设备中读取的数据中的每个数据写入所述主机210的存储器的信息。

应理解,所述每个数据写入所述主机210的存储器的信息包括以下中的任意一种:所述每个数据写入主机210的存储器的地址信息和长度信息(SG列表);或所述每个数据写入主机210的存储器的地址信息和长度信息以及所述主机210中下发所述IO读命令的VM信息(VF+SG列表);或第一标识ID和主机210的存储器中写入所述数据的偏移信息,所述第一ID用于指示主机210中下发所述IO读命令的VM信息和VM中写入所述数据的多组地址信息和长度信息(SG列表)。

步骤925:CPU核430指示网络协议处理引擎460向远端的目的存储设备发送消息包。

CPU核430对IO读命令处理完之后,可以指示网络协议处理引擎460向远端的多个目的存储设备发送所述多个IO读消息。该消息可以包括消息头,消息头中可以携带对应的目的存储设备的存储地址信息,该信息通常可以是网络连接的发送队列。

CPU核430还可以通知网络协议处理引擎4600发起网络协议的发送处理,网络协议处理引擎4600将IO读消息包发送到对应的目的存储设备。

步骤930:数据平面卸载引擎410从目的存储设备接收返回的IO读响应消息。

目的存储设备可以基于IO读消息包中的存储地址信息,读取对应的存储数据,并将存储数据通过IO读响应消息反馈给数据平面卸载引擎410。

IO读响应消息可以理解为是目的存储设备对接收到的IO读命令反馈的应答报文。

目的存储设备返回的IO读响应消息的格式有多种,本申请对此不做具体限定,下面会结合步骤940进行详细描述,此处暂不详述。

步骤940:数据平面卸载引擎410将IO读响应消息中的数据直接写入VM的内存中。

本申请实施例中,数据平面卸载引擎410在接收到IO读响应消息中的数据后,可以不将该数据先写入网卡400的内存440,再从内存440中写入下发IO读命令的VM内存中,而是可以直接将IO读响应消息中的数据写入下发IO读命令的VM内存中。也就是说,网卡400的内存440中没有存储IO读响应消息中的数据。

数据平面卸载引擎410需要根据IO读消息获得每个数据块在主机210的存储器212中存储的地址信息和长度信息,即可实现直接将数据写入主机210的VM内存中,而不需要先写入网卡400的内存440再写入VM内存中,这样,数据不需要上送网卡的内存中,一方面,可以减小网卡内存的资源消耗以及带宽压力,另一方面,还可以降低网卡处理器的开销。

具体的,数据平面卸载引擎410可以确定每个数据块在主机210的存储器212中存储的VF+SG的信息。获得VF+SG的信息的具体实现方式有多种,下面分别对不同的实现方式进行详细描述。

一种可能的实现方式中,参见图10,IO读响应消息中可以包括:每个数据块的IO的ID、偏移信息以及数据。数据平面卸载引擎410可以根据IO读响应消息中每个数据分块的IO的ID查询对应的IO的上下文,获得VF+SG的信息。

应理解,本申请实施例中可以在将IO读命令发送给目的存储设备后,数据平面卸载引擎410的CPU核430申请IO的上下文信息,一个IO的上下文可以对应一个ID。该IO的上下文信息可以用于记录每个分块对应的IO的ID、处理IO的归属VF、VM本地的LUN以及SG列表以及目的存储设备中要读取的数据的地址和长度。

需要说明的是,一个IO读命令可以有多个这样的分块构成,它们可以是不同的IO的不同的分块。

例如,IO读消息中的一个数据块对应的ID为ID1,偏移信息为2,那么,参见图10,数据平面卸载引擎410在进行地址查询时,可以根据ID为ID1,偏移信息为2,确定该数据块主机210的存储器212中存储的信息为VF1+SG2。数据平面卸载引擎410在获得VF1+SG2的信息后,可以通过直接存储器访问(direct memory access,DMA)技术将该数据直接写入主机210的存储器212中。

另一种可能的实现方式中,参见图11,IO读响应消息中可以包括:消息ID(messageID,MSG ID)以及数据。数据平面卸载引擎410可以根据IO读响应消息中的MSG ID获取MSDID表中的VF+SG信息。

应理解,本申请实施例中可以基于每个IO读消息创建一个ID和一个MSG ID表,MSGID表记录了每个数据分片对应的数据块的VF+SG信息。发送的IO读消息中可以携带MSGID,当然还得有每个分片的长度信息。分片的排序与MSG ID表中的ID排序一致。

当IO读响应消息返回时,数据平面卸载引擎410根据返回消息的MSG ID获取MSDID表中的SG信息后,可以根据数据块的编号得到具体需要放入的地址。并通过DMA技术将数据写入到该地址中,从而实现数据直接写入到VM的内存中。

另一种可能的实现方式中,参见图12,IO读响应消息中可以携带一个或多个VF+SG以及数据。应理解,IO读响应消息中携带的一个或多个VF+SG是读回来的数据存放在主机的内存中的地址信息。

数据平面卸载引擎410可以通过该IO读响应消息直接获取对应的数据块的VF+SG信息,并基于VF+SG信息,通过直接存储器访问(direct memory access,DMA)技术将该数据直接写入主机210的存储器212中。

可选地,在一些实施例中,为了校验IO读响应消息携带的VF+SG信息是否合法和有效,数据平面卸载引擎410可以比较IO读响应消息中的SG地址与基于VF查询对应的SG权限表中的SG信息,看是否在权限表的地址范围内。如果在权限表的地址范围内,数据平面卸载引擎410通过DMA技术直接将数据写入VF+SG对应的主机地址中,从而实现数据直接写入到VM的内存中。否则是丢弃这个数据块的写入,通知进行错误处理。

还应理解,本申请实施例中可以针对每个IO读消息,为每个VF建立一个SG权限表,IO发起时创建SG权限表,IO完成则删除对应的SG权限。SG权限表中包括将数据写入到VM内存对应的VF+SG。

步骤950:数据平面卸载引擎410向主机210发送IO读完成消息。

由于返回的IO读响应消息是由M个数据包返回消息构成的,只有M个数据包的返回消息到齐了以后,说明一个IO读完成。由于这个过程处理比较简单,本申请实施例中可以由数据平面卸载引擎410来完成,这样返回的数据可以不再经过网卡400中的CPU核430处理,提升处理性能。

作为示例,网卡400中的CPU核430判断所有数据接收完成后,则向数据平面卸载引擎410的设备模拟模块411发送IO读完成消息。具体的实现方式有多种,下面对可能的几种实现方式进行详细描述。

一种可能的实现方式中,在前面分配一个IO上下文的基础上,每个ID对应的IO上下文中除了记录处理IO必须的相关信息外,还记录了消息ID的完成状态。数据平面卸载引擎410根据返回的消息中携带的IO ID获取IO的上下文,并根据消息ID设置对应消息的状态为完成状态。当所有的消息的状态都设置为完成状态时,网卡400中的CPU核430直接向设备模拟模块411发送IO读完成消息。

应理解,当IO读完成后,设置的对应的IO上下文失效,CPU可以再次分配该上下文。

另一种可能的实现方式中,在前面分配一个IO上下文的基础上,每个ID对应的IO上下文中除了记录处理IO必须的相关信息外,还记录了数据块的偏移编号。返回的消息中可以携带了IO ID和数据块的偏移编号,数据平面卸载引擎410获得IO ID,获取IO的上下文,根据数据块的偏移编号,设置对应的数据块的完成标志。当所有的数据都完成时,网卡400中的CPU核430直接向设备模拟模块411发送IO读完成消息。

上文结合图1至图12,详细描述了本申请实施例中的网卡的数据处理方法,下面将结合图13,详细描述本申请的装置实施例。

图13是本申请实施例提供的一种网卡1300的示意性框图。网卡1300能够执行图2、图5、图9所示的方法的各个步骤,为了避免重复,此处不再详述。网卡1300包括:获取模块1310,拆分模块1320,发送模块1330,

所述获取模块1310,用于获取第一输入输出IO命令,所述第一IO命令指示将本端服务器中存储的数据写入至少一个对端服务器中,所述第一IO命令中包括所述数据存储在所述本端服务器的地址信息和长度信息;

所述拆分模块1320,用于根据所述地址信息和长度信息对所述数据进行拆分,得到多组地址信息和长度信息;

所述发送模块1330,还用于根据所述多组地址信息以及长度信息从所述本端服务器获取所述多组地址信息以及长度信息对应的数据,并向所述至少一个对端服务器发送所述数据。

可选地,所述获取模块1310具体用于:根据所述多组地址信息以及长度信息、所述本端服务器中下发所述第一IO命令的第一虚拟机VM对应的标识,从所述第一VM中获取所述多组地址信息以及长度信息对应的数据。

可选地,所述网卡的存储器中不存储所述数据。

可选地,所述网卡1300还包括:调度模块1340,

所述获取模块1310,还用于接收多个IO命令;

所述调度模块1340,用于根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

可选地,所述网卡1300包括硬件引擎,所述硬件引擎用于对数据面进行处理,硬件引擎根据所述对端服务器中存储所述多个IO命令的存储地址和/或所述本端服务器中下发所述多个IO命令的虚拟机VM,从所述多个IO命令中选择出所述第一IO命令。

可选地,所述网卡1300还包括:确定模块1350,

所述确定模块1350,用于根据所述第一IO命令的上下文信息确定所述多个数据是否全部写入所述至少一个对端服务器,所述第一IO命令的上下文信息中包括所述多个数据在所述至少一个对端服务器中存储状态;

所述发送模块1330,还用于当所述多个数据全部分别写入所述至少一个对端服务器,通过接口向所述本端服务器发送IO写完成消息。

可选地,所述获取模块1310,还用于获取第二IO命令,所述第二IO命令指示将至少一个对端服务器中的数据存储至本端服务器,所述第二IO命令中包括所述数据写入所述本端服务器的地址信息和长度信息;

所述拆分模块1320,还用于根据所述地址信息和长度信息对所述第二IO命令进行拆分,得到多个IO读消息,每个所述多个IO读消息中包括所述数据中的每个数据写入所述本端服务器的信息;

所述发送模块1330,还用于分别向所述至少一个对端服务器发送所述IO读消息。

在一种可能的实现方式中,所述每个数据写入所述本端服务器的信息包括以下中的任意一种:所述每个数据写入所述本端服务器的地址信息和长度信息;或所述每个数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息;或第一标识ID和所述本端服务器中写入所述数据的偏移信息,所述第一ID用于指示所述本端服务器中下发所述第二IO命令的VM信息和所述VM中写入所述数据的多组地址信息和长度信息。

在另一种可能的实现方式中,所述网卡1300还包括:存储模块1360,

所述获取模块1300,还用于从对端服务器接收第一IO读响应消息,所述第一IO读响应消息中包括本端服务器需要从所述对端服务器获取的第一数据;

所述确定模块1350,还用于根据所述第一IO读响应消息确定所述第一数据写入所述本端服务器的地址信息和长度信息;

所述存储模块1360,用于根据所述地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述第一IO读响应消息中包括第一ID和所述第一数据写入所述本端服务器的偏移信息,

所述确定模块1350具体用于:根据所述第一ID确定所述VM中写入数据的多组地址信息和长度信息;

所述存储模块1360具体用于:根据所述偏移信息从所述多组地址信息和长度信息中确定第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,所述第一IO读响应消息中包括所述第一数据写入所述本端服务器的地址信息和长度信息以及所述本端服务器中下发所述第二IO命令的VM信息,

所述确定模块1350具体用于:根据所述第一IO读响应消息中包括的信息确定所述第一数据写入所述本端服务器的地址信息和长度信息。

在另一种可能的实现方式中,确定模块1350具体用于:确定所述第一IO读响应消息中包括的地址信息和长度信息在权限表的范围内,所述权限表中包括所述本端服务器中写入数据的多组地址信息和长度信息;

所述存储模块1360具体用于:根据所述第一IO读响应消息中包括的地址信息和长度信息,将所述第一数据存储在所述本端服务器中。

在另一种可能的实现方式中,所述确定模块1350还用于:根据所述第二IO命令的上下文信息确定所述多个数据是否全部写入所述本端服务器,所述第二IO命令的上下文信息中包括所述多个数据在所述本端服务器中存储的完成状态;

所发送模块1330还用于:当所述多个数据全部写入所述本端服务器中,通过接口向所述本端服务器发送IO读完成消息。

上述描述的各示例的模块,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

这里的网卡1300可以以功能模块的形式体现。这里的术语“模块”可以通过软件和/或硬件形式实现,对此不作具体限定。

例如,“模块”可以是实现上述功能的软件程序、硬件电路或二者结合。所述硬件电路可能包括应用特有集成电路(application specific integrated circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。

本申请实施例还提供一种芯片,该芯片获取指令并执行该指令来实现上述的方法。

可选地,作为一种实现方式,该芯片包括处理器与数据接口,该处理器通过该数据接口读取存储器上存储的指令,执行上述方法。

可选地,作为一种实现方式,该芯片还可以包括存储器,该存储器中存储有指令,该处理器用于执行该存储器上存储的指令,当该指令被执行时,该处理器用于执行上述方法。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有指令,该指令用于上述方法实施例中的方法。

本申请实施例还提供一种包含指令的计算机程序产品,该指令用于实现上述方法实施例中的方法。

一种实现举例,处理器可以为中央处理单元(central processing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

一种实现举例,存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasablePROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random access memory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系,但也可能表示的是一种“和/或”的关系,具体可参考前后文进行理解。

本申请中,“多个”是指两个或两个以上。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。

在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

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

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

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

37页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:消息处理的方法和装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类