基于指针链表的消息发送方法及装置与流程

文档序号:26003962发布日期:2021-07-23 21:21阅读:131来源:国知局
基于指针链表的消息发送方法及装置与流程

本发明涉及芯片信息发送技术领域,尤其涉及一种基于指针链表的消息发送方法及装置。



背景技术:

nic芯片主要用于高性能计算系统和高速数据中心,是cpu连接高速网络的接口,实现节点间消息的发送和接收。

当前集成电路的飞速发展导致cpu处理器芯片的计算能力大幅提升,而互连网络的通信带宽提升一直依赖于高速信号传输速率的提高,远远落后于cpu处理器的通信需求。为提高cpu处理器的通信带宽,现代nic芯片多采用多端口机制,即一个nic芯片上配置多个网络端口,通过多网络端口并发,提高单个nic芯片的通信带宽。多网络端口结构设计的优点是通过同时使用多个网络传输通道来提高消息传输带宽,但是多个网络端口在传输消息时是相互独立的,这样就会带来消息顺序无法保证的问题。

例如,节点a按照顺序向b发送消息1和消息2两个消息,a使用了通道1发送消息1,通道2发送消息2,由于通道1中发生阻塞,导致两个消息到达b的顺序变为消息2先于消息1到达。这样节点b接收到消息的顺序于节点a发出的消息不一致,节点a收到消息完成的顺序与消息发送顺序也不一致,这可能会导致通信语义发生变化,进而导致程序运行结果错误。如果采用简单的阻塞方式,即节点a先发送消息1,等消息完全结束后再发送消息2,虽然可以保证消息1和消息2之间的顺序,但是由于消息1和消息2之间完全串行执行,会降低消息传输的效率。尤其是当节点a的消息1后边还有需要发送给其他节点的消息时,发送给节点b的消息不应该阻塞发送给其他节点的消息处理,这样也会大大降低消息传输的效率。

因此,解决多端口互连网络系统消息序的问题对提高通信性能保证正确的通信语义是目前亟待解决的问题。



技术实现要素:

针对现有技术中存在的问题,本发明实施例提供一种基于指针链表的消息发送方法及装置。

本发明实施例提供一种基于指针链表的消息发送方法,包括:

检测到相同异步信息发送队列时,向所述相同异步信息发送队列中添加指针链表;

获取所述相同异步信息发送队列中的当前发送包,根据预设的发送顺序为所述当前发送包分配序号,并获取所述当前发送包对应的描述符,根据所述描述符分配对应的悬挂缓冲编号;

根据所述悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;

检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为所述新描述符,并将所述尾指针的位置修改为所述新描述符;

接收到所有描述符对应的应答包时,完成相同异步信息发送。

在其中一个实施例中,所述方法还包括:

检测所述当前尾指针对应的描述符的状态;

当所述当前尾指针对应的描述符处于发包状态时,将所述新描述符置为暂停状态;

当所述当前尾指针对应的描述符处于等待应答状态时,将所述新描述符置为发包状态。

在其中一个实施例中,所述方法还包括:

当检测到所述相同异步信息发送过程中存在应答包丢失情况时,获取存在所述应答包丢失情况的丢失描述符的下一描述符;

获取所述下一描述符的应答包,并根据所述下一描述符的应答包从所述头指针开始,至所述丢失描述符之前的所有描述符全部完成,并将所述头指针更新至所述丢失描述符的下一描述符。

在其中一个实施例中,所述方法还包括:

当检测到所述相同异步信息发送过程中存在应答包未响应的情况时,获取存在未响应情况的未响应描述符,将所述未响应描述符调度为重发状态;

获取所述未响应描述符的下一描述符,将所述未响应描述符的下一描述符修改为等待发包状态,并将所述头指针更新至所述未响应描述符。

在其中一个实施例中,所述方法还包括:

当检测到所述相同异步信息发送过程中出现超时重传现象时,从所述头指针对应的描述符至所述尾指针对应的描述符,依次判断是否存在描述符处于发包状态;

当所述描述符都处于等待应答状态时,进行信息重传;

当存在描述符处于发包状态,等待处于所述描述符的发包状态结束,然后进行信息重传。

在其中一个实施例中,所述方法还包括:

根据所述悬挂缓冲的条目数调整所述指针链表的大小。

本发明实施例提供一种基于指针链表的消息发送装置,包括:

检测模块,用于检测到相同异步信息发送队列时,向所述相同异步信息发送队列中添加指针链表;

获取模块,用于获取所述相同异步信息发送队列中的当前发送包,根据预设的发送顺序为所述当前发送包分配序号,并获取所述当前发送包对应的描述符,根据所述描述符分配对应的悬挂缓冲编号;

指针确定模块,用于根据所述悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;

修改模块,用于检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为所述新描述符,并将所述尾指针的位置修改为所述新描述符;

接收模块,用于接收到所有描述符对应的应答包时,完成相同异步信息发送。

在其中一个实施例中,所述装置还包括:

第二检测模块,用于检测所述当前尾指针对应的描述符的状态;

第一状态模块,用于当所述当前尾指针对应的描述符处于发包状态时,将所述新描述符置为暂停状态;

第二状态模块,用于当所述当前尾指针对应的描述符处于等待应答状态时,将所述新描述符置为发包状态。

本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述基于指针链表的消息发送方法的步骤。

本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述基于指针链表的消息发送方法的步骤。

本发明实施例提供的基于指针链表的消息发送方法及装置,检测到相同异步信息发送队列时,向相同异步信息发送队列中添加指针链表;获取相同异步信息发送队列中的当前发送包,根据预设的发送顺序为当前发送包分配序号,并获取当前发送包对应的描述符,根据描述符分配对应的悬挂缓冲编号;根据悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为新描述符,并将尾指针的位置修改为新描述符;接收到所有描述符对应的应答包时,完成相同异步信息发送。这样既能够保证节点间采用多端口发送的消息顺序正确,又能够充分发挥消息的并发性,提高消息引擎的处理效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中基于指针链表的消息发送方法的流程图;

图2为本发明实施例中基于指针链表的消息发送装置的结构图;

图3为本发明实施例中电子设备结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的定制家具信息化管控信息流的流转方法的流程示意图,如图1所示,本发明实施例提供了一种定制家具信息化管控信息流的流转方法,包括:

步骤s101,检测到相同异步信息发送队列时,向所述相同异步信息发送队列中添加指针链表。

具体地,在检测到nic芯片存在相同异步消息发送队列的消息非阻塞发送时,向相同异步信息发送队列中添加指针链表,通过指针链表来管理同一个队列有多个描述符发往相同目标的情况。

步骤s102,获取所述相同异步信息发送队列中的当前发送包,根据预设的发送顺序为所述当前发送包分配序号,并获取所述当前发送包对应的描述符,根据所述描述符分配对应的悬挂缓冲编号。

具体地,获取相同异步信息发送队列中的当前发送包,并根据预设的发送顺序为当前发送包分配序号,比如3个发送包按照1、2、3的顺序发送,则为当前发送包分配1、2、3的顺序编号,并获取当前发送包对应的描述符,描述符为与发送包对应的文件描述符(文件描述符是一个索引值,指向内核为每一个发送包对应的记录表),并根据描述符分配对应的悬挂缓冲(描述符缓存),并为悬挂缓冲分配悬挂缓冲编号,具体的编号分配可以是根据发送包的编号进行分配,得到对应的描述符1、2、3。另外,指针链表的大小根据悬挂缓冲的条目数调整。

步骤s103,根据所述悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针。

具体地,根据当前发送包,即当前悬挂缓冲编号中的头部和尾部对应的确定指针链表的头指针和尾指针,保证当前发送包能够按照预设的发送顺序发送。

步骤s104,检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为所述新描述符,并将所述尾指针的位置修改为所述新描述符。

具体地,当检测到新描述符进行悬挂缓冲时,说明存在新的发送包需要发送,则对新的报送宝对应的新描述符进行发送顺序的处理,包括:修改当前尾指针对应的描述符的next为新描述符,并将尾指针的位置修改为新描述符,其中,描述符的next指的是描述符的指向,比如描述符1的next为描述符2,在描述符1接收到与描述符1对应的应答包时,根据描述符1的next,对应发送描述符2。

另外,当检测到新描述符进行悬挂缓冲时,还可以调整新描述符的状态,具体为:检测当前尾指针对应的描述符的状态,当当前尾指针对应的描述符处于发包状态时,说明新描述符之前的描述符还未发包完毕,则将新描述符置为暂停状态,当当前尾指针对应的描述符处于等待应答状态时,说明新描述符之前的描述符已经发包完毕,则将新描述符置为发包状态。

步骤s105,接收到所有描述符对应的应答包时,完成相同异步信息发送。

具体地,当接收到所有描述符(包括当前描述符和新描述符)对应的应答包时,并根据所有描述符对应的应答包进行确认,确认保证了应答包按照预定的顺序进行发明,也说明需要传输的信息已经传输完毕,完成相同异步信息发送的步骤。

本发明实施例提供的一种基于指针链表的消息发送方法,检测到相同异步信息发送队列时,向相同异步信息发送队列中添加指针链表;获取相同异步信息发送队列中的当前发送包,根据预设的发送顺序为当前发送包分配序号,并获取当前发送包对应的描述符,根据描述符分配对应的悬挂缓冲编号;根据悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为新描述符,并将尾指针的位置修改为新描述符;接收到所有描述符对应的应答包时,完成相同异步信息发送。这样既能够保证节点间采用多端口发送的消息顺序正确,又能够充分发挥消息的并发性,提高消息引擎的处理效率。

在上述实施例的基础上,所述基于指针链表的消息发送方法,还包括:

当检测到所述相同异步信息发送过程中存在应答包丢失情况时,获取存在所述应答包丢失情况的丢失描述符的下一描述符;

获取所述下一描述符的应答包,并根据所述下一描述符的应答包从所述头指针开始,至所述丢失描述符之前的所有描述符全部完成,并将所述头指针更新至所述丢失描述符的下一描述符。

本发明实施例中,在发送包的相同异步信息发送过程中,可能会出现某个描述符对应的应答包丢失的情况,其中,应答包丢失的情况可以是检测到应答包的回复顺序与对应的描述符发送顺序不同时,说明出现应答包丢失的情况,获取应答包丢失情况的丢失描述符的下一描述符,获取下一描述符的应答包,根据响应的合并确认原则,将下一描述符之前的描述符(包含丢失描述符)全部完成,即已经完成发送,然后将头指针更新至丢失描述符的下一描述符。

另外,在发送包的相同异步信息发送过程中,也可能会出现,比如应答包中包含对描述符的重传指令,,则应答包对应的描述符为重传描述符,获取存在重传指令的重传描述符,将重传描述符调度为重发状态,获取重传描述符的下一描述符,将重传描述符的下一描述符修改为等待发包状态,重新发送,并将头指针更新至重传描述符。

另外,在发送包的相同异步信息发送过程中,也可能会出现超时重传的情况,如果发生超时重传,需要从头指针所在的描述符开始判断是否有描述符处于发包状态,如果都是等待应答状态则可以开始重传,否则将自己的状态置位暂停等待发包状态。重传结束检查后继描述符是否处于等待发包状态,如是要调度后继描述符开始发包。

本发明实施例对相同异步信息发送过程中,可能出现的应答包丢失、应答包未响应、超时重传的情况进行对应的处理,保证节点间采用多端口发送的消息顺序正确。

图2为本发明实施例提供的一种基于指针链表的消息发送装置,包括:检测模块s201、获取模块s202、指针确定模块s203、修改模块s204、接收模块s205,其中:

检测模块s201,用于检测到相同异步信息发送队列时,向所述相同异步信息发送队列中添加指针链表。

获取模块s202,用于获取所述相同异步信息发送队列中的当前发送包,根据预设的发送顺序为所述当前发送包分配序号,并获取所述当前发送包对应的描述符,根据所述描述符分配对应的悬挂缓冲编号。

指针确定模块s203,用于根据所述悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针。

修改模块s204,用于检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为所述新描述符,并将所述尾指针的位置修改为所述新描述符。

接收模块s205,用于接收到所有描述符对应的应答包时,完成相同异步信息发送。

在一个实施例中,装置还可以包括:

第二检测模块,用于检测所述当前尾指针对应的描述符的状态。

第一状态模块,用于当所述当前尾指针对应的描述符处于发包状态时,将所述新描述符置为暂停状态。

第二状态模块,用于当所述当前尾指针对应的描述符处于等待应答状态时,将所述新描述符置为发包状态。

在一个实施例中,装置还可以包括:

第三检测模块,用于当检测到所述相同异步信息发送过程中存在应答包丢失情况时,获取存在所述应答包丢失情况的丢失描述符的下一描述符。

第二获取模块,用于获取所述下一描述符的应答包,并根据所述下一描述符的应答包从所述头指针开始,至所述丢失描述符的所有描述符全部完成,并将所述头指针更新至所述丢失描述符的下一描述符。

在一个实施例中,装置还可以包括:

第四检测模块,用于当检测到所述相同异步信息发送过程中存在应答包未响应的情况时,获取存在未响应情况的未响应描述符,将所述未响应描述符调度为重发状态。

第三获取模块,用于获取所述未响应描述符的下一描述符,将所述未响应描述符的下一描述符修改为等待发包状态,并将所述头指针更新至所述未响应描述符。

在一个实施例中,装置还可以包括:

第五检测模块,用于当检测到所述相同异步信息发送过程中出现超时重传现象时,从所述头指针对应的描述符至所述尾指针对应的描述符,依次判断是否存在描述符处于发包状态。

重传模块,用于当所述描述符都处于等待应答状态时,进行信息重传。

等待模块,用于当存在描述符处于发包状态,等待处于所述描述符的发包状态结束,然后进行信息重传。

关于基于指针链表的消息发送装置的具体限定可以参见上文中对于定制家具信息化管控信息流的流转方法的限定,在此不再赘述。上述基于指针链表的消息发送装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302、通信接口(communicationsinterface)303和通信总线304,其中,处理器301,存储器302,通信接口303通过通信总线304完成相互间的通信。处理器301可以调用存储器302中的逻辑指令,以执行如下方法:检测到相同异步信息发送队列时,向相同异步信息发送队列中添加指针链表;获取相同异步信息发送队列中的当前发送包,根据预设的发送顺序为当前发送包分配序号,并获取当前发送包对应的描述符,根据描述符分配对应的悬挂缓冲编号;根据悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为新描述符,并将尾指针的位置修改为新描述符;接收到所有描述符对应的应答包时,完成相同异步信息发送。

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

另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的传输方法,例如包括:检测到相同异步信息发送队列时,向相同异步信息发送队列中添加指针链表;获取相同异步信息发送队列中的当前发送包,根据预设的发送顺序为当前发送包分配序号,并获取当前发送包对应的描述符,根据描述符分配对应的悬挂缓冲编号;根据悬挂缓冲编号中的头部和尾部确定所述指针链表的头指针和尾指针;检测到新描述符进行悬挂缓冲时,修改当前尾指针对应的描述符的next为新描述符,并将尾指针的位置修改为新描述符;接收到所有描述符对应的应答包时,完成相同异步信息发送。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1