一种基于队列的通信方法及装置制造方法

文档序号:8005533阅读:181来源:国知局
一种基于队列的通信方法及装置制造方法
【专利摘要】本发明实施例提供一种基于队列的通信方法及装置,与发送节点相连的适配器包括仲裁器、预取器、高速缓冲存储器和发送引擎,所述方法包括:所述预取器接收所述仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取;所述预取器判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。如此,就可显著提高利用QP通信的节点的数据传输性能。
【专利说明】一种基于队列的通信方法及装置

【技术领域】
[0001]本发明涉及通信【技术领域】,具体涉及一种基于队列的通信方法及装置。

【背景技术】
[0002]在节点利用基于队列的通信机制QP (Queue Pair)进行数据传输时,会先为该QP在内存建立三个队列:发送队列SQ (Send Queue)、接收队列RQ (Receive Queue)、完成队列CQ (Complet1n Queue),然后再通过节点连接的适配器adapter进行数据传输。
[0003]下面结合图1所示的adapter的发送场景示意图对数据发送过程进行简单介绍。
[0004]首先,仲裁器arbiter确定当前处理的QP的身份标识,并由发送引擎send queueprocess engine判断高速缓冲存储器cache中是否保存有该QP的上下文,如果有,则直接从cache内读取;如果没有,则暂停当前的处理过程,先进行cache替换,即通过访问内存的方式获取当前处理的QP的上下文。
[0005]需要说明的是,QP的上下文中保存有该QP对应的三个队列在内存的位置、工作队列元素WQE (Work Queue Element)的个数等信息,占用的存储量较大(一个上下文大概512字节),适配器中无法保存所有QP的上下文。一般情况下,QP的上下文被保存在内存,但为了提高适配器对QP上下文的访问速度,可将常用QP上下文保存在适配器的cache内。
[0006]其次,在发送引擎获取到QP的上下文之后,即能获知该QP的发送队列SQ在内存中的位置,进而可读取出SQ队列的首个WQE,并将其对应的数据发送至接收节点。
[0007]对于接收节点来说,可结合图2所示的adapter的接收场景示意图对数据接收过程进行简单介绍。
[0008]首先,接收引擎receive queue process engine接收到发送节点发送的数据之后,判断cache中是否保存有该数据对应的QP的上下文,如果有,则直接从cache内读取;如果没有,同样要暂停当前的处理过程,进行cache替换,从内存中获取QP的上下文。
[0009]其次,在接收引擎获取到QP的上下文之后,即能获知该QP的接收队列RQ在内存中的位置,进而可读取出RQ队列的首个WQE,将接收到的数据保存到WQE指示的缓冲区,完成数据接收过程。
[0010]由上述发送和接收过程的介绍可知,因为cache中只保存了一些常用QP的上下文,这就可能出现无法在cache中找到QP上下文的情况,而一旦cache不命中,就需要花费较大的代价进行cache替换,就会降低利用QP通信的节点的数据传输性能。


【发明内容】

[0011]本发明实施例的基于队列的通信方法及装置,通过预处理的方式提高利用QP通信的节点的数据传输性能。
[0012]为此,本发明实施例提供如下技术方案:
[0013]第一方面,本发明实施例提供了一种基于队列的通信方法,与发送节点相连的适配器包括仲裁器、预取器、高速缓冲存储器和发送引擎,所述方法包括:
[0014]所述预取器接收所述仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取;
[0015]所述预取器判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
[0016]在第一方面的第一种可能的实现方式中,所述方法还包括:
[0017]在所述从所述发送节点的内存中读取所述待处理队列的上下文之后,
[0018]所述预取器从所述待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识,并将所述配对队列的身份标识通过所述发送引擎发送给接收节点。
[0019]第二方面,本发明实施例提供了一种基于队列的通信方法,与接收节点相连的适配器包括预取器、高速缓冲存储器和接收引擎,所述方法包括:
[0020]所述预取器接收所述接收引擎转发的配对队列的身份标识;
[0021]所述预取器判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,如果未保存,则从所述接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0022]在第二方面的第一种可能的实现方式中,如果所述接收节点接收到至少两个发送节点发送的配对队列的身份标识,则
[0023]所述预取器接收所述接收引擎转发的配对队列的身份标识,包括:
[0024]所述预取器接收至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列。
[0025]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:
[0026]所述预取器依序从所述等候队列中提取预设个数的配对队列;
[0027]所述预取器判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,包括:
[0028]所述预取器判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文。
[0029]第三方面,本发明实施例提供了一种基于队列的通信装置,所述装置包括:
[0030]接收单元,用于接收仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取;
[0031]判断单元,用于判断高速缓冲存储器中是否保存有所述待处理队列的上下文;
[0032]读取单元,用于在所述高速缓冲存储器中未保存所述待处理队列的上下文时,从发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
[0033]在第三方面的第一种可能的实现方式中,所述装置还包括:
[0034]提取单元,用于从所述读取单元读取的待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识;
[0035]发送单元,用于将所述提取单元提取的配对队列的身份标识通过所述发送引擎发送给接收节点。
[0036]第四方面,本发明实施例提供了一种基于队列的通信装置,所述装置包括:
[0037]接收单元,用于接收接收引擎转发的配对队列的身份标识;
[0038]判断单元,用于判断高速缓冲存储器中是否保存有所述配对队列的上下文;
[0039]读取单元,用于在所述高速缓冲存储器中未保存所述配对队列的上下文时,从接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0040]在第四方面的第一种可能的实现方式中,如果所述接收节点接收到至少两个发送节点发送的配对队列的身份标识,则
[0041]所述接收单元,具体用于接收至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列。
[0042]结合第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
[0043]提取单元,用于依序从所述等候队列中提取预设个数的配对队列;
[0044]所述判断单元,具体用于判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文。
[0045]本发明实施例的基于队列的通信方法及装置,预先将可能会出现cache缺失的队列的上下文准备好,这样,就无需在处理该队列时再实时进行开销较大的cache替换;另夕卜,还能有效保证数据传输的连续性,避免传输过程中出现暂停现象,如此就可显著提高利用QP通信的节点的数据传输性能。

【专利附图】

【附图说明】
[0046]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其它的附图。
[0047]图1是现有技术中适配器的发送场景示意图;
[0048]图2是现有技术中适配器的接收场景示意图;
[0049]图3是两个节点利用QP机制通/[目时在内存中建立的二个队列的不意图;
[0050]图4是本发明中与发送节点相连的适配器的结构示意图;
[0051]图5是本发明发送方的基于队列的通信方法实施例1的流程图;
[0052]图6是本发明发送方的基于队列的通信方法实施例2的流程图;
[0053]图7是本发明中与接收节点相连的适配器的结构示意图;
[0054]图8是本发明接收方的基于队列的通信方法实施例1的流程图;
[0055]图9是本发明接收方的基于队列的通信方法实施例2的流程图;
[0056]图10是本发明中准备预设个数的配对队列的上下文的流程图;
[0057]图1la是本发明中发送节点与适配器的结构示意图;
[0058]图1lb是本发明中接收节点与适配器的结构示意图;
[0059]图12是本发明发送方的基于队列的通信装置实施例1的示意图;
[0060]图13是本发明发送方的基于队列的通信装置实施例2的示意图;
[0061]图14是本发明接收方的基于队列的通信装置实施例1的示意图;
[0062]图15是本发明接收方的基于队列的通信装置实施例2的示意图;
[0063]图16是本发明发送方的通信装置的硬件构成示意图;
[0064]图17是本发明接收方的通信装置的硬件构成示意图。

【具体实施方式】
[0065]为了使本【技术领域】的人员更好地理解本发明方案,下面结合附图和实施方式对本发明实施例作进一步的详细说明。
[0066]下面先对本发明的应用场景进行解释说明。
[0067]本发明实施例主要针对的是队列通信机制,对于一个Queue Pair来说,其对应有发送队列SQ、接收队列RQ、完成队列CQ三个队列。参见图3,示出了两个节点利用QP机制通信时在内存中建立的三个队列的示意图,假设在当前的通信过程中,节点I为数据发送方,节点2为数据接收方,数据传输过程可大致描述为:
[0068]1.节点I的软件层在内存中准备需要传输的数据。
[0069]对应地,节点2的软件层则在内存中准备接收数据存放的缓冲区。
[0070]2.节点I的软件层创建传输的工作队列元素WQE (Work Queue Element),并将WQE按序插入到SQ中,然后配置SQ对应的QP的上下文(主要是配置WQE的数目,一般情况下,WQE数目不为零就表示还有数据需要发送,WQE数目为零则表示无数据发送)。需要说明的是,每个WQE记录了一个或多个需要发送的数据缓冲区,具体可包括每个数据缓冲区的起始虚拟地址和大小。
[0071]对应地,节点2的软件层创建接收的工作队列元素WQE,并将WQE按序插入到RQ中。需要说明的是,RQ中的每个WQE指向一个或多个接收缓冲区,具体可包括每个接收缓冲区的起始虚拟地址和大小。
[0072]3.与节点I相连的适配器adapter处理SQ队列的首个WQE,从WQE指明的数据缓冲区取出数据并发送至节点2。
[0073]对应地,与节点2相连的adapter —旦接收到数据,便取出RQ队列的首个WQE,将接收到的数据保存到WQE指明的缓冲区中。
[0074]4.当节点I的adapter处理好一个SQ的WQE时,即会生成一个完成队列元素CQE(Complet1n Queue Element),用以指示一个发送的完成,并将该CQE插入到节点I的CQ中。
[0075]对应地,当节点2的adapter接收好一个数据包时,也会生成一个CQE插入到节点2的CQ中,以此来指示一个接收的完成。
[0076]如【背景技术】所作介绍,现有技术在按照上述方式进行数据传输时,可能会出现cache不命中导致的传输性能下降的问题,本发明实施例即是为了解决这一问题而提出,下面进行解释说明。
[0077]参见图4,示出了本发明与发送节点相连的适配器的结构示意图,所述适配器包括仲裁器101、预取器102、高速缓冲存储器103和发送引擎104。其中,
[0078]所述仲裁器,用于获取当前处理队列的身份标识与待处理队列的身份标识,并将所述当前处理队列的身份标识发送至所述发送引擎,将所述待处理队列的身份标识发送至所述预取器;
[0079]所述发送引擎,用于从所述高速缓冲存储器中读取所述当前处理队列的上下文,并根据所述上下文从所述发送节点的内存中读取当前发送的数据,将所述当前发送的数据发送至接收节点;
[0080]所述预取器,用于判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用;
[0081]所述预取器,还用于从所述待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识,并将所述配对队列的身份标识发送至所述发送引擎;
[0082]所述发送引擎,还用于将所述配对队列的身份标识发送给所述接收节点。
[0083]下面结合图5所示的实施例1的流程图,对本发明实施例的通信过程进行解释说明,所述方法可包括:
[0084]步骤201,所述预取器接收所述仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取。
[0085]为了解决cache不命中对数据传输性能造成的影响,仲裁器在向发送引擎发送当前处理队列的身份标识时,还可提前获取下一个需要处理的队列的身份标识,并将其作为待处理队列,将其身份标识发送至预取器。这样,在发送引擎正常处理发送当前处理队列的数据的同时,预取器还能提前为发送引擎准备好待处理队列的上下文,这样,在发送引擎处理完当前处理队列的数据之后,即可直接利用准备好的待处理队列的上下文处理发送待处理队列的数据,避免发送引擎获取待处理队列上下文时出现cache不命中的情况,就能解决由此引起的传输性能下降问题。
[0086]一般情况下,在发送节点的软件层向SQ添加完WQE,并配置完上下文之后,上下文即会通知适配器其当前有数据要发送,如此仲裁器就知晓了其要处理哪个QP。
[0087]以发送节点具有3个QP为例,且身份标识分别为QP1、QP2、QP3,若软件层向QP2对应的SQ中插入了一个WQE,并配置上下文中的WQE数目加1,则QP2的上下文即会向适配器发送指令;接着,软件层又向QPl对应的SQ中插入了一个WQE,同时配置上下文中的WQE数目加1,此时QPl的上下文亦会向适配器发送指令;最后,软件层向QP3对应的SQ中插入了一个WQE,并配置上下文中的WQE数目加1,同样地QP3的上下文也会向适配器发送指令。按照顺序处理原则,适配器就知晓了发送节点的3个QP的处理顺序为QP2、QP1、QP3,这样,仲裁器即可明确知晓:若当前队列为QP2,待处理队列就是QPl ;若当前队列为QP1,待处理队列就是QP3 ;若当前队列为QP3,待处理队列就是QP2。
[0088]需要说明的是,本步骤中提及的仲裁器在获取当前处理队列的身份标识时获取待处理队列的身份标识,是相对现有技术获取当前队列身份标识并等待发送引擎发送当前处理队列的数据之后,再获取待处理队列的身份标识而言,也就是说,仲裁器并不是绝对意义上的同时获取到当前处理队列和待处理队列的身份标识。
[0089]步骤202,所述预取器判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则执行步骤203 ;否则不作处理,结束流程。
[0090]步骤203,所述预取器从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
[0091]因为cache中保存的是部分常用QP的上下文,而所有QP的上下文是保存在发送节点的内存中的,因此在cache中查找队列的上下文就存在以下两种结果:
[0092]一是,待处理队列的上下文保存在cache中,可通过访问cache的方式获得,称为“cache命中”,对应这种结果,适配器此时已为发送引擎准备好待处理队列的上下文,无需预取器执行任何动作;
[0093]二是,待处理队列的上下文未保存在cache中,无法通过访问cache的方式获得,称为“cache不命中”或“cache缺失”,对应这种结果,就需要本发明实施例的预取器通过cache替换的方式,提前为发送引擎准备好待处理队列的上下文。
[0094]这样,在步骤201接收到待处理队列的身份标识后,预取器即可先从cache中查找具有该身份标识的队列的上下文,并以此判断其查找结果是上述两种情况中的哪种。
[0095]如果是第一种,预取器则无需做任何处理。因为,在发送引擎接收到仲裁器发送的待处理队列的身份标识之后,可以直接访问cache获取待处理队列的上下文,并根据上下文进行数据发送。
[0096]如果是第二种,预取器则需要访问发送节点的内存进行cache替换,也即从发送节点的内存中查找具有待处理队列的身份标识的队列的上下文,并保存至cache中,供发送引擎在需要时使用。
[0097]本发明实施例通过这种预处理或预测的方式,预先将可能会出现cache缺失的队列的上下文准备好,这样,一方面发送引擎就无需在处理该队列时再实时进行开销较大的cache替换;另一方面还能有效保证数据传输的连续性,避免传输过程中出现暂停现象,如此,就显著提高了本发明实施例的发送节点的数据传输性能。
[0098]参见图6,示出了本发明实施例通信方法实施例2的流程图,可包括:
[0099]步骤301,所述预取器接收所述仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取。
[0100]步骤302,所述预取器判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则执行步骤303 ;否则不作处理,结束流程。
[0101]步骤303,所述预取器从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
[0102]步骤301?303与步骤201?203相同,此处不再赘述。
[0103]步骤304,所述预取器从所述待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识,并将所述配对队列的身份标识通过所述发送引擎发送给接收节点。
[0104]对于接收节点来说,其只有在接收到发送节点发的数据之后,才知道要从cache中读取哪个队列的上下文,若此时出现cache缺失,会导致接收操作的停止,致使数据传输性能下降更为明显。为了解决这一问题,预取器还可从待处理队列的上下文中提取配对队列的身份标识,并将该身份标识发送至发送引擎,由发送引擎通过优先级较高的控制信道将配对队列的身份标识发送至接收节点,从而使接收节点相连的适配器也通过预处理的方式,预先为接收引擎准备好配对队列的上下文。如此方案,既可使发送节点提前准备好待处理队列的上下文,供发送引擎在发送待处理队列的数据时使用;亦可使接收节点提前准备好配对队列的上下文,供接收引擎在接收配对队列的数据时使用(如果从发送节点的角度来说,此处可理解为,供接收引擎在接收发送节点发送的待处理队列的数据时使用)。
[0105]需要说明的是,QP在发送节点和接收节点处是成对出现的,二者的身份标识可能一致,如某个队列在发送节点处的身份标识为QP1,该队列的配对队列在接收节点处的身份标识也为QPl。或者,二者的身份标识也可能不一致,如某个队列在发送节点处的身份标识为QP4,而其配对队列在接收节点处的身份标识为QP8。这种配对关系保存在QP的上下文中,为了使接收节点相连的适配器能准确找到QP数据的接收缓冲区,预取器优选还要从QP的上下文中提取出QP的配对队列的身份标识,发送给接收节点相连的适配器。
[0106]综上所述可知,本实施例中获取队列的上下文主要是出于以下两个目的:
[0107]第一个是,上下文中保存有QP的三个队列在内存的位置。这样发送引擎就可据此访问这三个队列,对于发送节点来说,发送引擎主要是访问发送队列SQ,进而根据SQ的首个WQE读取到要发送的数据,进行数据发送。如此,就可解决发送节点因cache缺失导致的传输性能下降问题。
[0108]第二个是,上下文中保存有QP的配对队列的身份标识。为了使接收节点相连的适配器能准确找到QP数据的接收缓冲区,还应将QP的配对队列的身份标识发送给接收节点相连的适配器,进而使适配器内的预取器预先准备好配对队列的上下文,供接收引擎在需要时使用。如此,就可解决接收节点因cache缺失导致的传输性能下降问题。
[0109]另外,需要说明的是,若步骤302判定cache中保存有待处理队列的上下文,预取器则不需要进行cache替换,但此时接收节点相连的适配器的cache内可能保存有配对队列的上下文,也可能未保存,因此,在判定发送节点相连的适配器的cache内保存有待处理队列的上下文时,预取器亦可从中提取出配对队列的身份标识,将其发送给接收节点,供接收节点相连的适配器内的预取器预先准备好配对队列的上下文,本发明实施例对此可不做限定。
[0110]参见图7,示出了本发明与接收节点相连的适配器的结构示意图,所述适配器包括预取器401、高速缓冲存储器402和接收引擎403。其中,
[0111]所述接收引擎,用于接收发送节点发送的数据,并从所述高速缓冲存储器中读取所述数据对应的队列的上下文,并根据所述上下文将所述数据保存至所述接收节点的内存;
[0112]所述接收引擎,还用于接收所述发送节点发送的配对队列的身份标识,并将所述配对队列的身份标识转发给所述预取器;
[0113]所述预取器,用于接收所述接收引擎转发的配对队列的身份标识,并判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,如果未保存,则从所述接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0114]下面结合图8所示的实施例1的流程图,对本发明实施例的通信过程进行解释说明,所述方法可包括:
[0115]步骤501,所述预取器接收所述接收引擎转发的配对队列的身份标识。
[0116]为了解决接收节点因cache缺失导致的传输性能下降问题,与发送节点相连的适配器在处理当前队列的数据发送时,还会提前获取到下一个要处理队列的身份标识(即待处理队列的身份标识),并找到该待处理队列在接收节点处的配对队列的身份标识,将其发送给与接收节点相连的适配器,以使适配器能提前准备好配对队列的上下文。这样,在适配器需要处理配对队列时,cache中已保存有该队列的上下文,就不会出现cache缺失现象。
[0117]本步骤即是适配器接收配对队列身份标识的过程。与发送节点相连的适配器的发送引擎通过控制信道将配对队列的身份标识发送给接收节点的适配器,由适配器的接收引擎接收后,转发给预取器,以使预取器提前准备具有该身份标识的配对队列的上下文。
[0118]需要说明的是,接收节点当前可能只与一个发送节点相通信,此时预取器接收的就是一个发送节点发送的配对队列的身份标识;或者,接收节点还可同时与至少两个发送节点相通信,那么,预取器接收的就是这至少两个发送节点发送的至少两个配对队列的身份标识。对应这种情况,为了保证接收节点与每个发送节点的正常通信,预取器会按照顺序处理原则,依序将接收到的配对队列的身份标识保存至一个先进先出的等候队列,以逐个准备每个配对队列的上下文。
[0119]步骤502,所述预取器判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,如果未保存,则执行步骤503 ;否则不作处理,结束流程。
[0120]步骤503,所述预取器从所述接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0121]如上文在图5所示实施例的步骤202、203处所做介绍。接收节点的内存中保存着所有QP的上下文,适配器的cache内只保存有部分常用QP的上下文,因此,在预取器判断cache中是否保存配对队列的上下文时,也存在以下两种判断结果:
[0122]一是,cache中保存有配对队列的上下文,也就是说,适配器已为接收引擎准备好配对队列的上下文,无需预取器执行任何动作;
[0123]二是,cache中未保持配对队列的上下文,也即出现cache缺失现象,此时就需要本发明实施例的预取器通过cache替换的方式,提前为接收引擎准备好配对队列的上下文。
[0124]本发明实施例通过这种预处理或预测的方式,预先将可能会出现cache缺失的队列的上下文准备好,这样,一方面接收引擎就无需在接收到配对队列的数据之后再实时访问cache并进行开销较大的cache替换;另一方面还能有效保证数据传输的连续性,避免传输过程中出现停止现象,如此,就显著提高了本发明实施例的接收节点的数据传输性能。
[0125]参见图9,示出了本发明实施例通信方法实施例2的流程图,可包括:
[0126]步骤601,所述预取器接收所述至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列。
[0127]本步骤与步骤501相同,但主要针对的是一个接收节点与至少两个发送节点相通信的情况而言,此处不再赘述。
[0128]步骤602,所述预取器依序从所述等候队列中提取预设个数的配对队列。
[0129]发送节点按照一定顺序向接收节点发送配对队列的身份标识之后,在后续发送配对队列的数据时却不一定严格按照发送身份标识的顺序进行,为了进一步提高本发明实施例接收节点的数据传输性能,预取器可预先多准备几个配对队列的上下文,供接收引擎使用。如此,就需要预取器从等候队列中提取出预设个数的配对队列进行处理,如提取处理等候队列的前3个配对队列。
[0130]下面结合具体示例对本步骤进行举例说明。如接收节点目前与5个发送节点相通信,且接收节点接收这5个发送节点发送的配对队列的身份标识的顺序为:
[0131]发送节点I发送的配对队列TQP1、发送节点2发送的配对队列TQP2、发送节点3发送的配对队列TQP3、发送节点4发送的配对队列TQP4、发送节点5发送的配对队列TQP5。
[0132]受实际通信过程的影响,假设发送节点发送配对队列的数据的顺序为:
[0133]发送节点3发送的配对队列TQP3的数据、发送节点2发送的配对队列TQP2的数据、发送节点4发送的配对队列TQP4的数据、发送节点I发送的配对队列TQPl的数据、发送节点5发送的配对队列TQP5的数据。
[0134]此时,如果预取器仍按照顺序逐一的准备等候队列中配对队列的上下文,针对某些队列仍可能会出现cache缺失现象。如,按照配对队列身份标识的接收顺序,预取器应先准备TQPl的上下文,并在接收引擎处理TQPl的数据时,准备TQP2的上下文;然而参见配对队列数据的接收顺序可知,接收引擎先接收的是TQP3的数据,而此时预取器尚未准备好TQP3的上下文,因此,在接收引擎访问cache时,仍会出现cache缺失现象。
[0135]为了解决上述问题,进一步提高数据传输性能,预取器可成批准备好预设个数的配对队列的上下文,供接收引擎使用。如预设个数为3,则预取器从等候队列中提取出的配对队列就是TQP1、TQP2、TQP3,对应的就可提前准备好这3个队列的上下文,这样,在接收引擎在接收到TQP3的数据之后,就可访问cache获得TQP3的上下文,进行正常连续的数据接收。
[0136]步骤603,所述预取器判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文,如果未保存,则执行步骤604 ;否则不作处理,结束流程。
[0137]步骤604,所述预取器从所述接收节点的内存中读取所述高速缓冲存储器未保存的配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0138]因为本实施例中要提前准备预设个数的配对队列的上下文,因此步骤603判断cache中是否保存有提取出的预设个数的配对队列的上下文,指的是cache中保存所有提取出的配对队列的上下文时,就不需要预取器执行任何动作;若cache未保存部分或全部提取出的配对队列的上下文,就需要预取器进行cache替换,提前将这些cache未保存的上下文准备好。
[0139]作为本实施例中提前准备预设个数的配对队列的上下文的一种实现方式,可参见图10所示流程图,包括:
[0140]步骤701,所述预取器从所述预设个数的配对队列中选取一个作为当前配对队列;
[0141]步骤702,所述预取器判断所述高速缓冲存储器中是否保存有所述当前配对队列的上下文,如果未保存,则执行步骤703,否则返回执行所述步骤701。
[0142]步骤703,所述预取器从所述接收节点的内存中读取所述当前配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述当前配对队列的数据时使用;然后返回执行所述步骤701,直至判断完所有提取出的配对队列。
[0143]在从预设个数的配对队列中选取一个作为当前配对队列时,可按配对队列在后续队列的先后顺序选择,如上述示例中,可先选TQPl作为当前处理队列,然后在下一轮判断过程中选取TQP2作为当前处理队列,最后选取TQP3作为当前处理队列。此外,还可按照其它方式选取,如先处理奇数位再处理偶数位的配对队列TQP1、TQP3、TQP2,或者,随机从中选取当前配对队列TQP3、TQP1、TQP2,本发明对此可不做限定。
[0144]以上就从接收节点和发送节点两方介绍了本发明方案的具体实现过程,下面再结合图1 la、I Ib对本发明实施例的通信过程进行解释说明。
[0145]参见图11a,示出了发送节点(图中主要体现的是节点的CPU及内存MEM,其中QP的上下文context保存在MEM中)与适配器adapter的结构示意图。
[0146]1.仲裁器arbiter在向发送引擎发送当前处理周期需要处理的QP身份标识(以QP4为例)之外,还会向预取器发送即将处理的QP的身份标识(不妨称为next_qp,以next_qp=QP3 为例)。
[0147]2.预取器接收到next_qp之后,首先查询cache中是否保存有next_qp的上下文(即qp conteXt3),若有则不作处理,等待接收仲裁器发送的新的待处理队列的身份标识(结合图1la所示示例,新的待处理队列即为QPl);若没有,预取器就需要从内存中将qpcontext3 预取到 cache 中。
[0148]3.预取器从qp context3中查到next_qp对应的目的节点(即数据发送过程的接收节点),以及在目的节点中与next_qp配对的配对队列的身份标识,不妨称为next_tqp(结合图1la所示示例,next_tqp=TQP7,并将next_tqp传递给发送引擎。
[0149]4.发送引擎接收到预取器发送的neXt_tqp之后,通过控制信息通道(专用于传递优先级最高的控制帧的通道,一般为QP0,即QPO —般只用来发送优先级最高的控制帧,不做其它用途),将next_tqp传递给目的节点。
[0150]5.当发送引擎处理完当前处理队列QP4的数据之后,仲裁器即会将QP3作为当前处理队列发送给发送引擎,发送引擎即可访问cache,从中读取QP3的上下文qp context3(可能是cache本来就保存有,也可能是预取器按上述步骤准备好的),并通过qp context3保存的内容获知QP3的发送队列SQ在内存的什么位置,进而从中获取当前发送的WQE (这一信号走向未在图中示出),并通过数据信道将其发送给目的节点。
[0151]参见图11b,示出了接收节点(图中主要体现的是节点的CPU及内存MEM,其中QP的上下文context保存在MEM中)与适配器adapter的结构示意图。
[0152]6.作为接收方的adapter,当接收到特殊控制通道传递过来的信息next_tqp之后,即将next_tqp传递给预取器。
[0153]因预取器可能会接收到多个next_tqp,因此在预取器中设置有一个先入先出的等候队列,用于保存接收到的next_tqp。
[0154]7.预取器从等候队列中取出前η项next_tcip,在cache中查找这些next_tcip对应的context,如果全部查找到,预取器则不作处理;如果存在未查找到的,预取器就需要从内存中将未查找到的next_tqp context预取到cache中。
[0155]8.当接收引擎接收到发送节点发送的next_tqp的数据时,如接收到TQP7的数据,则会访问cache从中读取TQP7的上下文(TQP是相对发送节点的QP3而言,在接收节点处其实际上就是QP7,反过来,发送节点处的QP3此时则被定义为TQP3)qp context7 (可能是cache本来就保存有,也可能是预取器按上述步骤准备好的),并通过qp context7保存的内容获知QP7的接收队列RQ在内存的什么位置,进而从中获取到用于指明数据保存缓冲区的WQE (这一信号走向未在图中示出),将接收到的数据保存到指定缓冲区,完成数据接收。
[0156]综上所述,对于发送方而言,在其处理完当前QP之后,需要处理下一个QP时,该QP的上下文已经保存在cache中了,于是发送引擎可以直接访问cache获得QP context并进行数据传送。对于接收方而言,当接收到新的数据时,由于新的数据对应的QP context也已经保存在cache中了,所以接收引擎也可以直接访问cache获得QP context并进行数据接收。
[0157]相应地,本发明实施例还提供了一种基于队列的通信装置,也即上文中提及的预取器。
[0158]参见图12,示出了本发明实施例发送方的基于队列的通信装置实施例1的示意图,所述装置包括:
[0159]接收单元801,用于接收仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取;
[0160]判断单元802,用于判断高速缓冲存储器中是否保存有所述待处理队列的上下文;
[0161]读取单元803,用于在所述高速缓冲存储器中未保存所述待处理队列的上下文时,从发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
[0162]参见图13,示出了本发明实施例发送方的基于队列的通信装置实施例2的示意图,所述装置包括:
[0163]接收单元901,用于接收仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取;
[0164]判断单元902,用于判断高速缓冲存储器中是否保存有所述待处理队列的上下文;
[0165]读取单元903,用于在所述高速缓冲存储器中未保存所述待处理队列的上下文时,从发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用;
[0166]提取单元904,用于从所述读取单元读取的待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识;
[0167]发送单元905,用于将所述提取单元提取的配对队列的身份标识通过所述发送引擎发送给接收节点。
[0168]参见图14,示出了本发明实施例接收方的基于队列的通信装置实施例1的示意图,所述装置包括:
[0169]接收单元1001,用于接收接收引擎转发的配对队列的身份标识;
[0170]判断单元1002,用于判断高速缓冲存储器中是否保存有所述配对队列的上下文;
[0171]读取单元1003,用于在所述高速缓冲存储器中未保存所述配对队列的上下文时,从接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0172]如果所述接收节点接收到至少两个发送节点发送的配对队列的身份标识,则参见图15,示出了本发明实施例接收方的基于队列的通信装置实施例2的示意图,所述装置包括:
[0173]接收单元1101,具体用于接收所述至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列;
[0174]提取单元1102,用于依序从所述等候队列中提取预设个数的配对队列;
[0175]判断单元1103,具体用于判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文。
[0176]读取单元1104,用于在所述高速缓冲存储器中未保存所述提取出的预设个数的配对队列的上下文时,从接收节点的内存中读取所述未保存的配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
[0177]进一步地,本发明实施例还提供了通信装置的硬件构成。可包括至少一个处理器(例如CPU),至少一个网络接口或者其它通信接口,存储器,和至少一个通信总线,用于实现这些装置之间的连接通信。处理器用于执行存储器中存储的可执行模块,例如计算机程序。存储器可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口(可以是有线或者无线)实现该系统网关与至少一个其它网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
[0178]参见图16,在一些实施方式中,存储器中存储了程序指令,程序指令可以被处理器执行,其中,程序指令包括接收单元801、判断单元802、读取单元803,各单元的具体实现可参见图12所揭示的相应单元。
[0179]参见图17,在一些实施方式中,存储器中存储了程序指令,程序指令可以被处理器执行,其中,程序指令包括接收单元1001、判断单元1002、读取单元1003,各单元的具体实现可参见图14所揭示的相应单元。
[0180]本发明方案可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序单元。一般地,程序单元包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明方案,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序单元可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0181]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0182]以上对本发明实施例进行了详细介绍,本文中应用了【具体实施方式】对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及设备;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种基于队列的通信方法,其特征在于,与发送节点相连的适配器包括仲裁器、预取器、高速缓冲存储器和发送引擎,所述方法包括: 所述预取器接收所述仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取; 所述预取器判断所述高速缓冲存储器中是否保存有所述待处理队列的上下文,如果未保存,则从所述发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 在所述从所述发送节点的内存中读取所述待处理队列的上下文之后, 所述预取器从所述待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识,并将所述配对队列的身份标识通过所述发送引擎发送给接收节点。
3.一种基于队列的通信方法,其特征在于,与接收节点相连的适配器包括预取器、高速缓冲存储器和接收引擎,所述方法包括: 所述预取器接收所述接收引擎转发的配对队列的身份标识; 所述预取器判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,如果未保存,则从所述接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
4.根据权利要求3所述的方法,其特征在于,如果所述接收节点接收到至少两个发送节点发送的配对队列的身份标识,则 所述预取器接收所述接收引擎转发的配对队列的身份标识,包括: 所述预取器接收至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括: 所述预取器依序从所述等候队列中提取预设个数的配对队列; 所述预取器判断所述高速缓冲存储器中是否保存有所述配对队列的上下文,包括:所述预取器判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文。
6.一种基于队列的通信装置,其特征在于,所述装置包括: 接收单元,用于接收仲裁器发送的待处理队列的身份标识,所述待处理队列的身份标识由所述仲裁器在获取当前处理队列的身份标识时获取; 判断单元,用于判断高速缓冲存储器中是否保存有所述待处理队列的上下文; 读取单元,用于在所述高速缓冲存储器中未保存所述待处理队列的上下文时,从发送节点的内存中读取所述待处理队列的上下文,并保存至所述高速缓冲存储器中,供所述发送引擎发送所述待处理队列的数据时使用。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括: 提取单元,用于从所述读取单元读取的待处理队列的上下文中提取该待处理队列对应的配对队列的身份标识; 发送单元,用于将所述提取单元提取的配对队列的身份标识通过所述发送引擎发送给接收节点。
8.一种基于队列的通信装置,其特征在于,所述装置包括: 接收单元,用于接收接收引擎转发的配对队列的身份标识; 判断单元,用于判断高速缓冲存储器中是否保存有所述配对队列的上下文; 读取单元,用于在所述高速缓冲存储器中未保存所述配对队列的上下文时,从接收节点的内存中读取所述配对队列的上下文,并保存至所述高速缓冲存储器中,供所述接收引擎接收所述配对队列的数据时使用。
9.根据权利要求8所述的装置,其特征在于,如果所述接收节点接收到至少两个发送节点发送的配对队列的身份标识,则 所述接收单元,具体用于接收至少两个配对队列的身份标识,并按接收顺序将所述至少两个配对队列的身份标识保存到等候队列。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括: 提取单元,用于依序从所述等候队列中提取预设个数的配对队列; 所述判断单元,具体用于判断所述高速缓冲存储器中是否保存有提取出的预设个数的配对队列的上下文。
【文档编号】H04L12/861GK104426797SQ201310378798
【公开日】2015年3月18日 申请日期:2013年8月27日 优先权日:2013年8月27日
【发明者】张广飞, 张柳航, 常轶松, 侯锐 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1