一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据处理方法、网络接口卡、电子设备及存储介质与流程

2022-11-16 13:01:26 来源:中国专利 TAG:


1.本公开涉及通信技术领域,尤其涉及一种数据处理方法、网络接口卡、电子设备及存储介质。


背景技术:

2.目前许多数据不是存储在本地,而是存储在远端的数据存储设备中。现有的数据存储系统主要包括数据存储设备、主机客户端和交换机。存储设备通过前端网络连接交换机,交换机连接至至少一个主机客户端,存储设备可以为多个主机客户端提供数据存储服务。存储设备包括中央处理器以及至少一个网络接口卡。
3.在基于远程直接内存访问(remote direct memory access,缩写:rdma)的数据读取过程中,网络接口卡经常会盲目的安排队列执行调度,同时在调度过程中受拥塞控制影响,以使被调度的队列未获取到允许发送的消息字节数(即没有取得拥塞控制的授权),导致此次调度不能生效,浪费了产生的调度时间,且降低了性能。


技术实现要素:

4.为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种数据处理方法、网络接口卡、电子设备及存储介质。
5.根据本公开实施例的一个方面,提供了一种数据处理方法,包括:
6.响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,所述门铃信号用于指示所述目标调度队列中至少一个目标工作队列元素存在待发送的目标消息;
7.确定所述目标调度队列当前的目标调度状态,其中,所述目标调度状态根据所述目标工作队列元素对应的活跃度以及信用值得到的;
8.基于所述目标调度状态确定所述目标调度队列对应的调度机制是否生效,所述调度机制用于指示所述目标调度队列是否被允许调度;
9.在所述调度机制生效的情况下,执行对所述目标工作队列元素以及所述目标消息的调度操作。
10.根据本公开实施例的另一方面,还提供了一种网络接口卡,包括:直接存储器访问引擎模块以及传输模块;
11.所述直接存储器访问引擎模块,用于响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,所述门铃信号用于指示所述目标调度队列中至少一个目标工作队列元素存在待发送的目标消息;确定所述目标调度队列当前的目标调度状态,其中,所述目标调度状态根据所述目标工作队列元素对应的活跃度以及信用值得到的;基于所述目标调度状态确定所述目标调度队列对应的调度机制是否生效,所述调度机制用于指示所述目标调度队列是否被允许调度;
12.所述传输模块,用于在所述调度机制生效的情况下,执行对所述目标工作队列元
素以及所述目标消息的调度操作。
13.根据本公开实施例的另一方面,还提供了一种计算机可读存储介质,该存储介质包括存储的程序,程序运行时执行上述的步骤。
14.根据本公开实施例的另一方面,还提供了一种电子设备,其特征在于,包括处理器、通信接口、存储器、通信总线和上述的网络接口卡。
15.本公开实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述方法中的步骤。
16.本公开实施例提供的上述技术方案与现有技术相比具有如下优点:本公开实施例提供的方法,通过目标主机发送的门铃信号确定待调度的目标调度队列后,首先通过目标队列中目标工作队列元素对应的活跃度以及信用值确定目标调度队列的目标调度状态;其次,利用目标调度状态确定目标调度队列对应的调度机制是否生效;通过调度机制是否生效再决定后续是否能够对目标调度队列进行调度。以此在队列调度之前通过调度状态确定调度机制是否生效,有效保证发送队列的每次调度能够有效进行。相比现有技术无需再进行盲目调度,提高了队列调度的成功率,同时避免产生不必要的调度时间,增强了网络接口卡的服务性能。
附图说明
17.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
18.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1为本公开实施例提供的一种数据处理方法的流程图;
20.图2为本公开实施例提供的一种目标主机的示意图;
21.图3为本公开另一实施例提供的一种数据处理方法的流程图;
22.图4为本公开实施例提供的一种队列调度过程的示意图;
23.图5为本公开另一实施例提供的一种数据处理方法的流程图;
24.图6为本公开另一实施例提供的一种数据处理方法的流程图;
25.图7为本公开实施例提供的一种数据包重传的示意图;
26.图8为本公开另一实施例提供的一种网络接口卡的框图;
27.图9为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
28.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
29.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一
个实体或者操作与另一个类似的实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
30.本公开实施例提供了一种数据处理方法、数据存储设备及网络接口卡。本公开实施例所提供的方法可以应用于任意需要的电子设备,例如,可以为服务器、终端等电子设备,在此不做具体限定,为描述方便,后续简称为电子设备。
31.根据本公开实施例的一方面,提供了一种调数据处理方法的方法实施例,图1为本公开实施例提供的一种调数据处理方法的流程图,如图1所示,该方法包括:
32.步骤s11,响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,门铃信号用于指示目标调度队列中至少一个目标工作队列元素存在待发送的目标消息。
33.本公开实施例提供的方法应用于数据存储设备中的网络接口卡,该网络接口卡(rdma network interface card,缩写:rnic)基于远程直接内存访问(remote direct memory access,缩写:rdma)实现。网络接口卡与目标主机之间采用通信总线连接。
34.在目标主机中使用队列对(queue pair,缩写:qp)实现对请求方的数据(作为消息)进行发送和接收。每个qp包含一个发送队列(send queue,缩写:sq)和一个接收队列(receive queue,缩写:rq),其中,sq负责消息的发送,rq负责消息的接收。每个qp的sq和rq可以分别关联一个完成队列(completion queue,缩写:cq)。
35.本公开实施例的应用场景中,目标主机内有多个发送队列,多个发送队列中的每个发送队列包括至少一个工作队列元素,每个工作队列元素关联至少一个消息。例如:当某一个发送队列存在新的工作队列元素(即目标工作队列元素)以及目标工作队列元素所指向的存储空间中有消息待发送时,目标主机会自动触发门铃信号,并将门铃信号发送至网络接口卡。
36.如图2所示,目标主机包括多个发送队列sq1、sq2、sq3以及sq4,当sq1中存在一个目标工作队列元素(work queue element,缩写:wqe)所指向的存储空间存在待发送的目标消息的情况下,会向网络接口卡发送门铃信号,存储空间位于缓冲区。
37.在本公开实施例中,网络接口卡响应于目标主机发送的门铃信号,从主机内存中的多个发送队列中确定待调度的目标调度队列。
38.步骤s12,确定目标调度队列当前的目标调度状态,其中,目标调度状态根据目标工作队列元素对应的活跃度以及信用值得到的。
39.在本公开实施例中,网络接口卡在确定目标调度队列后,会先查询目标调度队列中目标工作队列元素对应的活跃度以及信用值,并依据活跃度和信用值确定目标调度队列当前的目标调度状态。具体的,在活跃度大于或等于预设活跃度,且信用值大于或等于预设信用值的情况下,确定目标调度队列的目标调度状态为调度就绪状态;在活跃度小于预设活跃度,和/或,信用值小于预设信用值的情况下,确定目标调度队列的目标调度状态为调度暂停状态。
40.步骤s13,基于目标调度状态确定目标调度队列对应的调度机制是否生效,调度机制用于指示目标调度队列是否被允许调度。
41.在本公开实施例中,在通过目标调度状态能够确定目标调度队列对应的调度机制是否生效之前,首先生成目标调度队列对应的目标调度信息,其中,目标调度信息包括目标调度序号和目标调度状态,目标调度序号是根据门铃信号的触发时间得到的。
42.例如:在目标调度状态为调度就绪状态,且目标调度序号小于或等于预设调度序号的情况下,确定目标调度队列对应的调度机制生效;在目标调度状态为调度就绪状态,且目标调度序号大于预设调度序号的情况下,确定目标调度队列对应的调度机制不生效。
43.步骤s14,在调度机制生效的情况下,执行对目标工作队列元素以及目标消息的调度操作。
44.在本公开实施例中,在调度机制生效的情况下,网络接口卡会从主机内存中搬运目标调度队列的目标工作队列元素以及目标消息,并执行对目标工作队列元素以及目标消息的调度操作。
45.本公开实施例中,在调度序号大于预设调度序号的情况下,确定目标调度队列是否存在优先级,如果目标调度队列存在优先级,则基于优先级,执行对目标工作队列元素以及目标消息的调度操作。如果不存在目标调度队列的优先级,则按照预设调度列表中的顺序执行对目标工作队列元素以及目标消息的调度操作。
46.本公开实施例提供的方法,通过目标主机发送的门铃信号确定待调度的目标调度队列后,首先通过目标队列中目标工作队列元素对应的活跃度以及信用值确定目标调度队列的目标调度状态;其次,利用目标调度状态确定目标调度队列对应的调度机制是否生效;通过调度机制是否生效再决定后续是否能够对目标调度队列进行调度。以此在队列调度之前通过调度状态确定调度机制是否生效,有效保证发送队列的每次调度能够有效进行。相比现有技术无需再进行盲目调度,提高了队列调度的成功率,同时避免产生不必要的调度时间,增强了网络接口卡的服务性能。
47.根据本公开实施例的一方面,提供了一种调数据处理方法的方法实施例,图3为本公开实施例提供的一种调数据处理方法的流程图,如图3所示,该方法包括:
48.步骤s21,响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,门铃信号用于指示目标调度队列中至少一个目标工作队列元素存在待发送的目标消息。详细说明参见上述实施例对应的相关描述,此处不再赘述。
49.步骤s22,确定目标调度队列当前的目标调度状态,其中,目标调度状态根据目标工作队列元素对应的活跃度以及信用值得到的。
50.在本公开实施例中,步骤s22,确定目标调度队列当前的目标调度状态,包括以下步骤a1-a3:
51.步骤a1,在预设调度列表中生成目标调度队列对应的初始调度信息,其中,初始调度信息包括目标调度序号,目标调度序号是根据门铃信号的触发时间得到的。
52.在本公开实施例中,网络接口卡在利用门铃信号确定目标调度队列后,会利用门铃信号的出发时间确定目标调度序列在预设调度列表的目标调度序号,同时生成目标调度队列的初始调度信息。例如:初始调度信息为qp1:active0、credit0、ready0。其中,active用于表示工作队列元素对应的活跃度,credit用于表示工作队列元素对应的消息是否得到
了被允许发送的消息字节数,即是否取得消息发送的授权,0为各个参数对应的初始值。
53.步骤a2,查询目标调度队列中目标工作队列元素对应的活跃度以及信用值,根据活跃度以及消息字节数确定目标调度队列的目标调度状态。
54.在本公开实施例中,网络接口卡可以从目标主机获取目标工作队列元素对应的活跃度,还可以从网络接口卡内部设置的拥塞控制中心查询目标工作队列元素的信用值。信用值用于表示目标队列元素所对应的目标消息是否得到被允许发送的消息字节数。需要说明的是,通过拥塞控制中心查询目标工作队列元素的信用值时,如果存在信用值,同时也会得到目标工作队列元素所对应的目标消息被允许发送的消息字节数。
55.在本公开实施例中,目标调度状态包括:调度就绪状态以及调度暂停状态。具体的,根据活跃度以及消息字节数确定目标调度队列的目标调度状态,包括:在活跃度大于或等于预设活跃度,且信用值大于或等于预设信用值的情况下,确定目标调度队列的目标调度状态为调度就绪状态;或,在活跃度小于预设活跃度,和/或,信用值小于预设信用值的情况下,确定目标调度队列的目标调度状态为调度暂停状态。
56.在本公开实施例中,为了便于快速确认目标调度队列的目标调度状态,先利用活跃度确定第一标识,以及利用是否存在被允许发送的消息字节数确定第二标识。然后基于预设对应关系,第一标识和第二标识确定第三标识,第三标识用于表示目标调度状态。
57.在本公开实施例中,如果查询到的活跃度大于或等于预设活跃度,则活跃度对应的第一标识为“1”,如果查询到的活跃度小于预设活跃度,则活跃度对应的第一标识为“0”。如果查询到的被允许发送的消息字节数大于或等于预设消息字节数,则被允许发送的消息字节数对应的第二标识为“1”,如果查询到的被允许发送的消息字节数小于预设消息字节数,则被允许发送的消息字节数对应的第二标识为“0”。
58.当第一标识为1,且第二标识为1的情况下,此时第三标识为1,表示目标调度状态为调度就绪状态。当第一标识为0,和/或,第二标识为0,此时第三标识为0,表示目标调度状态为暂停调度状态。
59.步骤a3,利用目标调度状态更新初始调度信息,得到目标调度信息。
60.在本公开实施例中,在得到目标调度状态后,将目标调度状态写入初始调度信息,即完成了对初始调度信息的更新。例如:将第三标识写入初始调度信息,得到的目标调度信息为:qp1:active1、credit1、ready1。
61.步骤s23,基于目标调度状态确定目标调度队列对应的调度机制是否生效,调度机制用于指示目标调度队列是否被允许调度。详细说明参见上述实施例对应的相关描述,此处不再赘述。
62.步骤s24,在调度机制生效的情况下,执行对目标工作队列元素以及目标消息的调度操作。其中,预设数量为本次调度所支持获取的最大数量。详细说明参见上述实施例对应的相关描述,此处不再赘述。
63.作为一个示例,如图4所示,目标主机中的目标调度队列sq1向网络接口卡发送门铃信号,网络接口卡中的事件管理器(event mux)发送会从拥塞控制中心(congestion control)查询信用值,并从目标主机查询工作队列元素的活跃度,然后给将信用值和活跃度写入预设调度列表,在预设调度列表中确定目标调度队列对应的目标调度状态。事件管理器(event mux)在基于目标调度信息中的目标调度状态确定目标调度队列对应的调度机
制生效的情况下,执行对目标工作队列元素以及目标消息的调度操作。
64.本公开实施例通过在预设调度列表中生成目标调度队列的目标调度信息,通过目标调度信息中的目标调度状态以及目标调度序号能够快速的判断目标调度队列是否能够进行调度,同时对于不能满足调度机制的队列还能够及时将其对应的调度信息删除,有效保证调度效率。
65.图5为本公开实施例提供的一种调数据处理方法的流程图,如图5所示,执行对工作队列元素以及待发送消息的调度操作,包括以下步骤:
66.步骤s31,从目标调度队列的至少一个目标工作队列元素中,获取不多于预设数量的第一工作队列元素,并从目标消息中确定第一工作队列元素所关联的第一消息。
67.在本公开实施例中,因为高速串行计算机扩展总线(peripheral component interconnect express,缩写:pcie)往返延迟高,又因为每次调度需要通过两次pcie传输,不做合理设计时,通讯的性能以及效果会很差。
68.基于此,本公开实施例从目标调度队列的至少一个目标工作队列元素中,获取n个工作队列元素作为第一工作队列元素,n为本次调度所支持获取的最大数量,然后从目标消息中确定第一个工作队列元素关联的第一消息,以此利用无缓存的方法获取目标工作队列元素,无需预取和缓存工作队列元素,从而提高了网络接口卡的可扩展性。
69.步骤s32,获取第一消息对应的总消息字节数,对比总消息字节数与预设消息字节数,得到对比结果,其中,预设消息字节数是根据信用值得到的。
70.在本公开实施例中,在确定待发送的第一消息后,获取第一消息对应的总消息字节数,对比总消息字节数与预设消息字节数,得到对比结果。需要说明的是,通过预设消息字节数目的是利用网络接口卡的有限内存实现消息发送的最大化。需要说明的是,由于中央处理球中有成千上万的队列,网络接口卡的内存又非常有限的。如果出现拥塞情况,无法保证每次发送队列的消息都能完整的发送,同时还会导致网络接口卡的性能降低。
71.步骤s33,基于对比结果对第一消息执行调度操作。
72.在本公开实施例中,基于对比结果对第一消息执行调度操作,包括以下步骤b1-b2:
73.步骤b1,在对比结果为总消息字节数小于或等于预设消息字节数的情况下,对第一消息进行封装,得到第一数据包;
74.步骤b2,发送第一数据包至接收方设备。
75.在本公开实施例中,在对比结果为总消息字节数小于或等于预设消息字节数的情况下,则表示目标调度队列当前待发送的消息能够完全被发送。此时,网络接口卡对待发送的第一消息进行封装,得到第一数据包,并发送第一数据包至接收方设备。
76.需要说明的是,由于第一消息中包括多条连续的消息内容,因此网络接口卡在封装第一消息的过程中,会基于多条消息内容写入多个数据包中分别发送,同时修改每个数据包的rocev2包头,具体的,网络接口卡会查询每条消息在主机内存中的存储地址,利用存储地址生成连续的包序列号,然后封装在rocev2包头,得到最终的第一数据包。以此通过将待发送消息的存储地址以包序列号的形式封装在rocev2包头,便于在远程数据存取时能够明确每个数据包对应顺序。同时在后续进行重传时,可以直接根据重传需求对待重传的数据包进行定位。
77.在本公开实施例中,基于对比结果对第一消息执行调度操作,包括以下步骤c1-c3:
78.步骤c1,在对比结果为总消息字节数大于预设消息字节数的情况下,从第一消息中获取预设字节数的待发送的第二消息。
79.步骤c2,对待发送的第二消息进行封装,得到第二数据包。
80.步骤c3,发送第二数据包至接收方设备,并将第一消息中未封装的剩余消息丢弃。
81.在本公开实施例中,在对比结果为总消息字节数大于预设消息字节数的情况下,则表示目标调度队列当前待发送的消息无法完全被发送。按照预设消息字节数从第一消息中获取第二消息,然后对第二消息进行封装,得到第二数据包。
82.需要说明的是,由于第二消息会会包括多条连续的消息内容,网络接口卡在封装第二消息的过程中,会基于多条消息内容写入多个数据包并分别发送,同时还修改每个数据包的rocev2包头,具体的,网络接口卡会查询每条消息在主机内存中的存储地址,利用存储地址生成连续的包序列号,然后封装在rocev2包头,得到最终的第二数据包。以此通过将待发送消息的存储地址以包序列号的形式封装在rocev2包头,便于在远程数据存取时能够明确每个数据包对应顺序。同时在后续进行重传时,可以直接根据重传需求对待重传的数据包进行定位。
83.作为一个示例,网络接口卡首先查询目标调度队列在主机内存的队列地址,然后基于队列地址搬运多个目标工作队列元素,从目标工作队列元素中获取n个第一工作队列元素,同时确定n个第一工作队列元素对应的第一消息,第一消息对应的总消息字节数为m。对比总消息字节数m与预设消息字节数burst_size,如果m小于或等于burst_size,则直接对第一消息进行封装,得到第一数据包并发送。如果m大于burst_size,则从总消息字节数m中按照预设消息字节数burst_size获取第二消息,对第二消息进行封装,得到第二数据包并发送。
84.需要说明的是,两个关键参数:n和burst_size。n为当前可获取工作队列元素的最大数量,burst_size为允许在每个调度迭代中获取的消息字节数。本公开实施例利用n反映pcie带宽使用之间的平衡和pcie延迟隐藏。如果n的值太小,确实能够带来更好的pcie fetch-and-drop策略中的带宽使用情况,但并不能隐藏pcie延迟,如果n的值较大的n,则会出现反向执行的情况。因此本公开实施例将n设置为8以平衡pcie带宽利用率和延迟隐藏的问题。
85.而对于burst_size,能反映pcie带宽使用和频率之间的平衡,以及线头阻塞。较小的burst_size可以实现更精细的调度粒度,从而减少线头阻塞,但会使pcie带宽饱和。而较大的burst_size与上述情况相反。基于此分析,本公开实施例设置burst_size的值为16kb,用于兼顾性能和调度粒度。
86.在本公开实施例中,在执行对目标工作队列元素以及目标工作队列元素对应目标消息的调度操作之后,如图6所示,方法还包括:
87.步骤s41,接收第三数据包,并解析第三数据包的包头得到第三数据包对应的目标包序列号。
88.在本公开实施例中,网络接口卡在接收到第三数据包后,会对第三数据包进行解析,从第三数据包的包头中提取第三数据包对应的目标包序列号。
89.步骤s42,从预设调度列表中获取第三数据包对应的第一期望包序列号,并对比目标包序列号和第一期望包序列号。
90.在本公开实施例中,网络接口卡从预设调度列表中获取第三数据包对应的第一期望包序列号,然后将第一期望包序列号与目标包序列号进行对比。需要说明的是,预设调度列表中存储有多个数据包对应的期望包序列号。
91.作为一个示例,预设调度列表中存储有期望包序列号:a-003、b-002、c-006,其中,a-003表示消息a对应的第3个数据包的期望包序列号,b-002表示消息b对应的第2个数据包的期望包序列号,c-006表示消息c对应的第6个数据包的期望包序列号。此时从第三数据包的包头获取的目标包序列号为“b-004”,此时第三数据包对应的第一期望包序列号为“b-002”。对比目标包序列号“b-004”和第一期望包序列号“b-002”。
92.步骤s43,在目标包序列号与第一期望包序列号不匹配的情况下,确认进入数据包丢失恢复状态,并基于目标包序列号以及第一期望包序列号执行重传操作。
93.在本公开实施例中,基于目标包序列号以及第一期望包序列号执行重传操作,包括以下步骤d1-d2:
94.步骤d1,发送目标包序列号以及第一期望包序列号至目标主机的中央处理器,以使中央处理器根据目标包序列号以及第一期望包序列号,从位图中获取丢失数据包对应的包序列号。
95.步骤d2,接收中央处理器发送的重传请求,并发送所述重传请求至所述第三数据包对应的发送方,其中,重传请求是基于丢失数据包对应的包序列号生成,并通过目标重传队列发送的,目标重传队列为丢失数据包所关联发送队列对应的重传队列。
96.在本公开实施例中,在目标包序列号与第一期望包序列号不匹配的情况下,则表示当前存在丢包情况,此时网络接口卡进入数据包丢失恢复状态,并发送目标包序列号以及第一期望包序列号至目标主机的中央处理器。
97.在本公开实施例中,目标主机的中央处理器根据目标包序列号以及第一期望包序列号更新第三数据包所属消息对应的位图,并从更新后的位图中查询当前丢失数据包对应的包序列号。其中位图中存储有第三数据包所属消息对应多个数据包的接收状态。然后基于丢失数据包对应的包序列号生成重传请求,同时查询丢失数据包/第三数据包所关联发送队列对应的目标重传队列,最终将重传请求发送至目标重传队列,通过目标重传队列将重传请求发出。
98.在本公开实施例中,网络接口卡接收到目标主机的中央处理器发送的重传请求后,将重传请求直接发送至第三数据包对应的发送方设备。
99.作为一个示例,假设第三数据包的目标包序号为“b-004”,第一期望包序列号“b-002”,此时更新后的位图包括:“1、0、0、1”。其中,第一个“1”表示该消息对应的第一个数据包被成功接收,第二个“0”表示该消息对应的第二个数据包未成功接收,第三个“0”表示该消息对应的第三个数据包未成功接收,第四个“1”表示该消息对应的第四个数据包被成功接收。基于此能够确定丢失数据包的包序列号为“b-002”以及“b-003”,然后查询丢失数据包关联发送队列对应的目标重传队列,将基于丢失数据包的包序列号生成的重传请求发送至目标重传队列,以使目标重传队列将重传请求发出。
100.在本公开实施例中,在发送目标包序列号以及第一期望包序列号至目标主机之
后,方法还包括以下步骤e1-e2:
101.步骤e1,接收第四数据包,在第四数据包携带的包序列号与丢失数据包对应的包序列号一致的情况下,将第四数据包发送至目标主机。
102.步骤e2,接收目标主机发送的第二期望包序列号,并将第二期望包序列号写入预设调度列表,其中,第二期望包序列号是目标主机接收到第四数据包后发送的。
103.在本公开实施例中,网络接口卡向第三数据包对应的发送方设备发送重传请求后,会监听第三数据包对应的发送方设备是否有发送第四数据包。当接收到第四数据包的情况下,解析第四数据包,得到第四数据包对应的包序列号,将第四数据包的包序列号与丢失数据包对应的包序列号进行对比。在第四数据包携带的包序列号与丢失数据包对应的包序列号一致的情况下,则确定丢失数据包已恢复,此时将第四数据包发送至目标主机的中央处理器,同时网络接口卡取消丢失恢复状态。
104.在本公开实施例中,中央处理器在接收到第四数据包后,根据第四数据包的包序列号确定已寻回丢失数据包,同时对位图进行相应的更新,然后将第二期望包序列号发送给网络接口卡,第二期望包序列号当前接收数据包对应下一个数据包的序列号。网络接口卡在接收到第二期望包序列号后,将第二期望数据包写入预设调度列表,并等待接收相应的数据包。
105.作为一个示例,数据包重传的过程如图7所示:
106.(1)网络接口卡接收到数据包后,对数据包进行解析得到数据包携带的包序列号(psn),并从预设调度列表中获取数据包对应的期望包序列号(e psn)。
107.(2)对比包序列号和期望包序列号,如果二者一致,则直接将数据包发送至目标主机的中央处理器,进行正常处理,例如存储在接收队列。
108.(3)如果二者不一致,则确定发生丢包,此时将包序列号以及期望包序列号发送至目标主机的中央处理器,中央处理器依据包序列号以及期望包序列号从位图(per qp bitmaps)确定当前丢失数据包对应的包序列号,并依据丢失数据包对应的包序列号生成重传请求,将重传请求发送至重传队列(retry q),通过重传队列将重传请求传输至网络接口卡,并由网络接口卡进行发送。
109.(4)网络接口卡在发送重传请求后,如果接收到新的数据包,判断新的数据包的包序列号是否与丢失数据包的包序列号一致,如果一致,则确定丢失数据包已寻回,此时将新的数据包发送至目标主机的中央处理器。
110.(5)中央处理器在接收到新的数据包后,会向新的数据包的包序列号向网络接口卡发送新的期望包序列号。
111.如图8所示,本公开实施例还提供了一种网络接口卡,网络接口卡包括:直接存储器访问引擎模块100以及传输模块200;
112.直接存储器访问引擎模块100,用于响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,门铃信号用于指示目标调度队列中至少一个目标工作队列元素存在待发送的目标消息;确定目标调度队列当前的目标调度状态,其中,目标调度状态根据目标工作队列元素对应的活跃度以及信用值得到的;基于目标调度状态确定目标调度队列对应的调度机制是否生效,调度机制用于指示目标调度队列是否被允许调度。
113.传输模块200,用于在调度机制生效的情况下,执行对目标工作队列元素以及目标
消息的调度操作。
114.在本公开实施例中,直接存储器访问引擎模块100,用于在活跃度大于或等于预设活跃度,且信用值大于或等于预设信用值的情况下,确定目标调度队列的目标调度状态为调度就绪状态;或,
115.直接存储器访问引擎模块100,用于在活跃度小于预设活跃度,和/或,信用值小于预设信用值的情况下,确定目标调度队列的目标调度状态为调度暂停状态。
116.在本公开实施例中,直接存储器访问引擎模块100,包括:调度器1001;
117.调度器1001,用于生成目标调度队列对应的目标调度信息,其中,目标调度信息包括目标调度序号和目标调度状态,目标调度序号是根据门铃信号的触发时间得到的。
118.在本公开实施例中,调度器1001,用于在目标调度状态为调度就绪状态,且目标调度序号小于或等于预设调度序号的情况下,确定调度机制生效,预设调度序号用于表示网络接口卡的调度上限。
119.在本公开实施例中,直接存储器访问引擎模块100,还包括:数据搬运器1002;
120.数据搬运器1002,用于从目标调度队列的至少一个目标工作队列元素中,获取不多于预设数量的第一工作队列元素,并从目标消息中确定第一工作队列元素所关联的第一消息,获取第一消息对应的总消息字节数,对比总消息字节数与预设消息字节数,得到对比结果,其中,预设消息字节数是根据信用值得到的;
121.传输模块200,用于基于对比结果对第一消息执行调度操作。
122.在本公开实施例中,传输模块200,用于在对比结果为总消息字节数小于或等于预设消息字节数的情况下,对第一消息进行封装,得到第一数据包;发送第一数据包至接收方设备。
123.在本公开实施例中,数据搬运器1002,用于在对比结果为总消息字节数大于预设消息字节数的情况下,从第一消息中,获取满足预设字节数的待发送的第二消息;
124.传输模块200,用于对待发送的第二消息进行封装,得到第二数据包;发送第二数据包至接收方设备,并将第一消息中未封装的剩余消息丢弃。
125.在本公开实施例中,传输模块200,包括:重传模块2002,用于接收第三数据包,并解析第三数据包的包头得到第三数据包对应的目标包序列号;从预设调度列表中获取第三数据包对应的第一期望包序列号,并对比目标包序列号和第一期望包序列号;在目标包序列号与第一期望包序列号不匹配的情况下,确认进入数据包丢失恢复状态,并基于目标包序列号以及第一期望包序列号执行重传操作。
126.在本公开实施例中,重传模块2002,具体用于发送目标包序列号以及第一期望包序列号至目标主机的中央处理器,以使中央处理器根据目标包序列号以及第一期望包序列号,从位图中获取丢失数据包对应的包序列号;接收中央处理器发送的重传请求,并发送重传请求至第三数据包对应的发送方,其中,重传请求是基于丢失数据包对应的包序列号生成,并通过目标重传队列发送的,目标重传队列为丢失数据包所关联发送队列对应的重传队列。
127.在本公开实施例中,重传模块2002,用于接收第四数据包,在第四数据包携带的包序列号与丢失数据包对应的包序列号一致的情况下,将第四数据包发送至目标主机;接收目标主机发送的第二期望包序列号,并将第二期望包序列号写入预设调度列表,其中,第二
期望包序列号是目标主机接收到第四数据包后发送的。
128.本公开实施例提供网络接口卡,在根据目标主机发送的门铃信号确定待调度的目标调度队列后,首先通过目标队列中目标工作队列元素对应的活跃度以及信用值确定目标调度队列的目标调度状态;其次,利用目标调度状态确定目标调度队列对应的调度机制是否生效;通过调度机制是否生效再决定后续是否能够对目标调度队列进行调度。以此在队列调度之前通过调度状态确定调度机制是否生效,有效保证发送队列的每次调度能够有效进行。相比现有技术无需再进行盲目调度,提高了队列调度的成功率,同时避免产生不必要的调度时间,增强了网络接口卡的服务性能。
129.本公开实施例还提供一种电子设备,如图9所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
130.存储器1503,用于存放计算机程序;
131.处理器1501,用于执行存储器1503上所存放的计算机程序时,实现上述实施例的步骤。
132.上述终端提到的通信总线可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
133.通信接口用于上述终端与其他设备之间的通信。
134.存储器可以包括随机存取存储器(random access memory,简称ram),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
135.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
136.在本公开提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据处理方法。
137.在本公开提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据处理方法。
138.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字
用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk)等。
139.根据本公开的一个或多个实施例,示例1提供了一种数据处理方法,包括:
140.响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,门铃信号用于指示目标调度队列中至少一个目标工作队列元素存在待发送的目标消息;
141.确定目标调度队列当前的目标调度状态,其中,目标调度状态根据目标工作队列元素对应的活跃度以及信用值得到的;
142.基于目标调度状态确定目标调度队列对应的调度机制是否生效,调度机制用于指示目标调度队列是否被允许调度;
143.在调度机制生效的情况下,执行对目标工作队列元素以及目标消息的调度操作。
144.进一步的,确定目标调度队列当前的目标调度状态,包括:
145.在活跃度大于或等于预设活跃度,且信用值大于或等于预设信用值的情况下,确定目标调度队列的目标调度状态为调度就绪状态;或,
146.在活跃度小于预设活跃度,和/或,信用值小于预设信用值的情况下,确定目标调度队列的目标调度状态为调度暂停状态。
147.进一步的,在确定目标调度状态后,方法还包括:
148.生成目标调度队列对应的目标调度信息,其中,目标调度信息包括目标调度序号和目标调度状态,目标调度序号是根据门铃信号的触发时间得到的。
149.进一步的,在目标调度状态为调度就绪状态,且目标调度序号小于或等于预设调度序号的情况下,确定调度机制生效,预设调度序号用于表示网络接口卡的调度上限。
150.进一步的,执行对目标工作队列元素以及目标消息的调度操作,包括:
151.从目标调度队列的至少一个目标工作队列元素中,获取不多于预设数量的第一工作队列元素,并从目标消息中确定第一工作队列元素所关联的第一消息;
152.获取第一消息对应的总消息字节数,对比总消息字节数与预设消息字节数,得到对比结果,其中,预设消息字节数是根据信用值得到的;
153.基于对比结果对第一消息执行调度操作。
154.进一步的,基于对比结果对第一消息执行调度操作,包括:
155.在对比结果为总消息字节数小于或等于预设消息字节数的情况下,对第一消息进行封装,得到第一数据包;
156.发送第一数据包至接收方设备。
157.进一步的,基于对比结果对第一消息执行调度操作,包括:
158.在对比结果为总消息字节数大于预设消息字节数的情况下,从第一消息中获取预设消息字节数的待发送的第二消息;
159.对待发送的第二消息进行封装,得到第二数据包;
160.发送第二数据包至接收方设备,并将第一消息中未封装的剩余消息丢弃。
161.进一步的,在执行对目标工作队列元素以及目标消息的调度操作之后,方法还包括:
162.接收第三数据包,并解析第三数据包的包头得到第三数据包对应的目标包序列号;
163.从预设调度列表中获取第三数据包对应的第一期望包序列号,并对比目标包序列号和第一期望包序列号;
164.在目标包序列号与第一期望包序列号不匹配的情况下,确认进入数据包丢失恢复状态,并基于目标包序列号以及第一期望包序列号执行重传操作。
165.进一步的,基于目标包序列号以及第一期望包序列号执行重传操作,包括:
166.发送目标包序列号以及第一期望包序列号至目标主机的中央处理器,以使中央处理器根据目标包序列号以及第一期望包序列号,从位图中获取丢失数据包对应的包序列号;
167.接收中央处理器发送的重传请求,其中,重传请求是基于丢失数据包对应的包序列号生成,并通过目标重传队列发送的,目标重传队列为丢失数据包所关联发送队列对应的重传队列。
168.进一步的,在发送目标包序列号以及第一期望包序列号至中央处理器之后,方法还包括:
169.接收第四数据包,在第四数据包携带的包序列号与丢失数据包对应的包序列号一致的情况下,将第四数据包发送至中央处理器;
170.接收中央处理器发送的第二期望包序列号,并将第二期望包序列号写入预设调度列表,其中,第二期望包序列号是中央处理器接收到第四数据包后发送的。
171.根据本公开的一个或多个实施例,示例2提供了一种网络接口卡,包括:直接存储器访问引擎模块以及传输模块;
172.直接存储器访问引擎模块,用于响应于目标主机发送的门铃信号,从主机内存中确定待调度的目标调度队列,其中,门铃信号用于指示目标调度队列中至少一个目标工作队列元素存在待发送的目标消息;确定目标调度队列当前的目标调度状态,其中,目标调度状态根据目标工作队列元素对应的活跃度以及信用值得到的;基于目标调度状态确定目标调度队列对应的调度机制是否生效,调度机制用于指示目标调度队列是否被允许调度;
173.传输模块,用于在调度机制生效的情况下,执行对目标工作队列元素以及目标消息的调度操作。
174.进一步的,直接存储器访问引擎模块,用于在活跃度大于或等于预设活跃度,且信用值大于或等于预设信用值的情况下,确定目标调度队列的目标调度状态为调度就绪状态;或,
175.直接存储器访问引擎模块,用于在活跃度小于预设活跃度,和/或,信用值小于预设信用值的情况下,确定目标调度队列的目标调度状态为调度暂停状态。
176.进一步的,直接存储器访问引擎模块,包括:调度器;
177.调度器,用于生成目标调度队列对应的目标调度信息,其中,目标调度信息包括目标调度序号和目标调度状态,目标调度序号是根据门铃信号的触发时间得到的。
178.进一步的,调度器,用于在目标调度状态为调度就绪状态,且目标调度序号小于或
等于预设调度序号的情况下,确定调度机制生效,预设调度序号用于表示网络接口卡的调度上限。
179.进一步的,直接存储器访问引擎模块,还包括:数据搬运器;
180.数据搬运器,用于从目标调度队列的至少一个目标工作队列元素中,获取不多于预设数量的第一工作队列元素,并从目标消息中确定第一工作队列元素所关联的第一消息,获取第一消息对应的总消息字节数,对比总消息字节数与预设消息字节数,得到对比结果,其中,预设消息字节数是根据信用值得到的;
181.传输模块,用于基于对比结果对第一消息执行调度操作。
182.进一步的,传输模块,用于在对比结果为总消息字节数小于或等于预设消息字节数的情况下,对第一消息进行封装,得到第一数据包;发送第一数据包至接收方设备。
183.进一步的,数据搬运器,用于在对比结果为总消息字节数大于预设消息字节数的情况下,从第一消息中,获取满足预设字节数的待发送的第二消息;
184.传输模块,用于对待发送的第二消息进行封装,得到第二数据包;发送第二数据包至接收方设备,并将第一消息中未封装的剩余消息丢弃。
185.进一步的,传输模块,包括:重传模块,用于接收第三数据包,并解析第三数据包的包头得到第三数据包对应的目标包序列号;从预设调度列表中获取第三数据包对应的第一期望包序列号,并对比目标包序列号和第一期望包序列号;在目标包序列号与第一期望包序列号不匹配的情况下,确认进入数据包丢失恢复状态,并基于目标包序列号以及第一期望包序列号执行重传操作。
186.进一步的,重传模块,具体用于发送目标包序列号以及第一期望包序列号至目标主机的中央处理器,以使中央处理器根据目标包序列号以及第一期望包序列号,从位图中获取丢失数据包对应的包序列号;接收中央处理器发送的重传请求,并发送重传请求至第三数据包对应的发送方,其中,重传请求是基于丢失数据包对应的包序列号生成,并通过目标重传队列发送的,目标重传队列为丢失数据包所关联发送队列对应的重传队列。
187.进一步的,重传模块,用于接收第四数据包,在第四数据包携带的包序列号与丢失数据包对应的包序列号一致的情况下,将第四数据包发送至目标主机;接收目标主机发送的第二期望包序列号,并将第二期望包序列号写入预设调度列表,其中,第二期望包序列号是目标主机接收到第四数据包后发送的。
188.以上所述仅为本公开的较佳实施例而已,并非用于限定本公开的保护范围。凡在本公开的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本公开的保护范围内。
189.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献