一种基于NTB硬件的多队列通信方法及系统与流程

文档序号:12176923阅读:412来源:国知局
一种基于NTB硬件的多队列通信方法及系统与流程

本发明涉及计算机系统软件设计思想领域,更具体地说,涉及一种基于NTB硬件的多队列通信方法及系统。



背景技术:

PCIe是现代计算机系统使用的主要总线协议之一,存在着非透明桥接(即NTB,Non-transparent Bridging)延伸规格。随着传统存储系统的发展,对于多控制器的互联的通信的带宽性能要求也越来越高,PCIe也伴随着协议的改进而发展起来,PCIe的NTB也渐渐成为多控制器之间通信的新的手段,由于NTB是一种新的硬件通信设备,因此,如何实现基于NTB的通信方法,完成通信任务,实现多控制器之间的通信是本领域技术人员需要解决的问题。



技术实现要素:

本发明的目的在于提供一种基于NTB硬件的多队列通信方法及系统,以实现基于NTB的通信,实现多控制器之间的通信。

为实现上述目的,本发明实施例提供了如下技术方案:

一种基于NTB硬件的多队列通信方法,包括:

发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;

所述发送端控制器按照预定封装格式对所述待发送数据进行封装,通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;

所述接收端控制器通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据。

其中,所述发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列,包括:

根据所述待发送数据的数据大小,确定所述待发送数据位于队列范围集中的目标队列范围,并将与所述目标队列范围所对应的NTB队列作为目标NTB队列;

若根据所述待发送数据的数据大小,确定所述待发送数据不位于队列范围集中,则选取与所述待发送数据的数据大小最接近的NTB队列作为目标NTB队列,并根据最接近的NTB队列的粒度对所述待发送数据执行分片操作。

其中,所述队列范围集所对应的NTB队列包括:

以4KB为粒度所对应的NTB队列,以16KB为粒度所对应的NTB队列,以256KB为粒度所对应的NTB队列和以1MB为粒度所对应的NTB队列。

其中,所述接收端控制器通过监控所述NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据,包括:

若所述接收端控制器监控到所述管理数据中的空闲下表信息发生变化,则获取已封装数据,对所述已封装数据进行解析后发送至上层应用;

所述接收端控制器更新所述管理数据中的空闲下表信息。

其中,已封装数据的封装格式依次包括:序列号信息,版本号信息,标志位信息,回复序列号信息,负载数据的长度信息,负载数据,校验数据;其中,所述标志位信息表示已封装数据的属性信息。

其中,所述接收端控制器获取已封装数据之后,还包括:

检测所述已封装数据中是否存在回复序列号;若存在,则判断是否存在需要发送至所述发送端控制器的回复数据;

若存在回复数据,则按照所述预定封装格式对包括所述回复数据及所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器;

若不存在回复数据,则间隔预设时长后,按照所述预定封装格式对包括所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器。

其中,本方案还包括:

所述发送端控制器根据当前NTB队列的数据结构判断是否能发送所述待发送数据;若能,则通过NTB队列将已封装数据发送至接收端控制器;若不能,则将所述待发送数据存入等待队列,直至当前NTB队列能发送所述待发送数据为止。

一种基于NTB硬件的多队列通信系统,包括发送端控制器和接收端控制器;

发送端控制器包括:

选取模块,用于根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;

封装模块,用于按照预定封装格式对所述待发送数据进行封装;

第一发送模块,用于通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;

所述接收端控制器通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据。

其中,所述接收端控制器,还包括:

检测模块,用于检测所述已封装数据中是否存在回复序列号;

判断模块,用于在所述已封装数据中存在回复序列号时,判断是否存在需要发送至所述发送端控制器的回复数据;

第二发送模块,用于存在回复数据时,按照所述预定封装格式对包括所述回复数据及所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器;

第三发送模块,用于不存在回复数据时,间隔预设时长后,按照所述预定封装格式对包括所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器。

其中,还包括:

所述发送端控制器根据当前NTB队列的数据结构判断是否能发送所述待发送数据;若能,则通过NTB队列将已封装数据发送至接收端控制器;若不能,则将所述待发送数据存入等待队列,直至当前NTB队列能发送所述待发送数据为止。

通过以上方案可知,本发明实施例提供的一种基于NTB硬件的多队列通信方法及系统,包括:发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;所述发送端控制器按照预定封装格式对所述待发送数据进行封装,通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;所述接收端控制器通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据;可见,通过本方案提供的通信方法,不会出现数据包丢失,数据包乱序等情况,并且由于NTB链路的可靠性,也不会存在消息序列号的循环溢出等问题,从而实现高效的消息传递。

附图说明

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

图1为本发明实施例公开的一种基于NTB硬件的多队列通信方法流程示意图;

图2为本发明实施例公开的一种映射窗口数据结构示意图;

图3为本发明实施例公开的一种数据包格式示意图;

图4为本发明实施例公开的一种通信传递流程示意图;

图5为本发明实施例公开的一种基于NTB硬件的多队列通信系统结构示意图。

具体实施方式

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

本发明实施例公开了一种基于NTB硬件的多队列通信方法及系统,以实现基于NTB的通信,实现多控制器之间的通信。

需要说明的是,NTB硬件的特点是可以直接访问远端内存的地址空间,也就是说假设节点A和节点B使用NTB相连,节点A可以直接访问节点B的内存空间,NTB会映射出一个地址窗口,这个窗口是节点B的内存的一部分地址空间,可能是4GB,也可能是2GB,可以根据实际的环境进行对应调节,但是对于这个映射窗口的所使用的数据结构是没有明确要求的,但是作为通信方法,会具体的说明数据结构,同时存放在这个数据结构中的通信消息的格式也是很关键的,通信方法也会对具体消息的通信格式进行说明。

参见图1,本发明实施例提供的一种基于NTB硬件的多队列通信方法,包括:

S101、发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;

其中,所述发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列,包括:

根据所述待发送数据的数据大小,确定所述待发送数据位于队列范围集中的目标队列范围,并将与所述目标队列范围所对应的NTB队列作为目标NTB队列;

若根据所述待发送数据的数据大小,确定所述待发送数据不位于队列范围集中,则选取与所述待发送数据的数据大小最接近的NTB队列作为目标NTB队列,并根据最接近的NTB队列的粒度对所述待发送数据执行分片操作。

具体的,所述队列范围集所对应的NTB队列包括:

以4KB为粒度所对应的NTB队列,以16KB为粒度所对应的NTB队列,以256KB为粒度所对应的NTB队列和以1MB为粒度所对应的NTB队列。

具体的,NTB的映射出一个地址窗口可以形成队列,通过队列的粒度及数据的封装格式将待发送数据发送至接收端控制器,每个队列的粒度可以相同,也可以不同,但是为了适当的减少分片消息,同时也提高传输效率,在本方案中增加消息队列,并且每一个队列有一个粒度,参见图2,在本方案中设置4个队列,粒度分别为4KB,16KB,256KB和1MB,这样在选取发送的队列时,根据待发送数据的大小进行选择,原则上选择不用分片可以直接发送数据的队列,例如0~4KB的数据选择粒度为4KB的队列,4KB~16KB的数据选择粒度为16KB的队列,16KB~256KB的数据选择粒度为256KB的队列,256KB~1MB的数据选择粒度为1MB的队列,而对于大于1MB的应用数据则仍然采取分片的方法进行消息的传递,需要对应用数据进行分片,之后进行消息封装,之后进行传递。而每个队列第一个4KB作为控制页,会存放一些管理的数据,比如空闲的首下标、占用首下标,一个队列是优先队列,另一个队列是普通队列。

其中,已封装数据的封装格式依次包括:序列号信息,版本号信息,标志位信息,回复序列号信息,负载数据的长度信息,负载数据,校验数据;其中,所述标志位信息表示已封装数据的属性信息。

具体的,在本方案中按照参照图3所示的封装格式进行封装,生成已封装数据的消息包,一个消息包的组成分为以下几个部分:

1)序列号,表示此消息的具体序列号,这个号码最初是随机生成的,但不能是零,零有特殊的含义,占用4个字节;

2)版本号,表示此消息的版本号,占用4个字节,主要表示数据包的格式版本,版本决定了数据包的具体格式,也就是决定如何进行数据包的解析。序列号和版本号是固定的,也就是说一个消息的前8个字节是固定的,也是不变,在本系列中,无论版本是几,前八个字节都会是序列号和版本号;

3)标志位,表示消息的一些传输数据的属性信息,例如:是否带有回复序列号、是否有应用数据、是否存在校验方法,校验方法是什么,占用4个字节,但是目前的flags只使用低2个字节,高两个字节是预留的,目前全部设置为零。具体的标志位的值与语义如表1所示:

表1

4)回复序列号,又称确认号,NM_REPLY置上才存在,是本端确认接收到对端传递过来的消息序列号,占用4个字节;

5)负载数据的长度,NM_DATA置上才存在,表示应用数据的长度,占用4个字节;

6)负载数据,又称应用数据,NM_DATA置上才存在,是传递应用的数据的主体;

7)校验数据,NM_ECHECK置上才存在,具体的大小,取决于NM_CRC和NM_MD5,如果是NM_CRC,则4个字节;如果是NM_MD5,则是16字节。

S102、所述发送端控制器按照预定封装格式对所述待发送数据进行封装,通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;

具体的,通过NTB队列发送数据之后,需要修改NTB窗口的剩余空闲的下标和数量,以使接收端控制器及时发现发送端控制器已经发送数据。需要说明的是,首次发送消息包的话,确认号的位置上写0,表示这是第一个,不确认任何消息包。

S103、所述接收端控制器通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据。

其中,所述接收端控制器通过监控所述NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据,包括:

若所述接收端控制器监控到所述管理数据中的空闲下表信息发生变化,则获取已封装数据,对所述已封装数据进行解析后发送至上层应用;

所述接收端控制器更新所述管理数据中的空闲下表信息。

具体的,接收端控制器的接收线程定时先查看NTB队列控制页的管理数据的空闲的下标,发现是否有新的消息;若有,就将消息取回来,之后将消息进行对应的解析,交给上层应用处理,并修改对应占用的首下标,处理完后,会去处理另一个优先级低的队列的消息;接收端对已封装数据的解析是根据已封装数据的数据包格式中不同部分的设置进行解析。

基于上述技术方案,所述接收端控制器获取已封装数据之后,还包括:

检测所述已封装数据中是否存在回复序列号;若存在,则判断是否存在需要发送至所述发送端控制器的回复数据;

若存在回复数据,则按照所述预定封装格式对包括所述回复数据及所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器;

若不存在回复数据,则间隔预设时长后,按照所述预定封装格式对包括所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器。

具体的,在本方案中,若已封装数据中存在回复序列号,则将待确认的序列号放到待确认发送的数组中,如果有回复数据,即有消息传递到对端就直接将序列号放入到消息包中,如果没有要发送的消息,则等待一段时间(这个时间一般是1ms)后就自动形成确认消息包发送给对端,发送方式与发送端控制器发送数据的方式一致。

基于上述技术方案,本方案还包括:

所述发送端控制器根据当前NTB队列的数据结构判断是否能发送所述待发送数据;若能,则通过NTB队列将已封装数据发送至接收端控制器;若不能,则将所述待发送数据存入等待队列,直至当前NTB队列能发送所述待发送数据为止。

需要说明的是,将待发送数据分片之后,根据当前的NTB窗口的队列数据结构来看是否可以传递所有的分片,如果不能,则放入等待队列,等待发送。

参见图4,在本方案中发送端的上层应用将待发送数据发送至通讯核心层后,通信核心层对待发送数据进行分片和封装,已封装数据通过通信设备层次发送至接收端的通信设备层次,通过接收端的通信核心层对已封装数据的解析,将解析后的数据传递至接收端的应用层。

下面对本发明实施例提供的多队列通信系统进行介绍,下文描述的多队列通信系统与上文描述的多队列通信方法可以相互参照。

参见图5,本发明实施例提供的一种基于NTB硬件的多队列通信系统,包括发送端控制器100和接收端控制器200;

发送端控制器100包括:

选取模块101,用于根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;

封装模块102,用于按照预定封装格式对所述待发送数据进行封装;

第一发送模块103,用于通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;

所述接收端控制器200通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据。

基于上述技术方案,所述接收端控制器,还包括:

检测模块,用于检测所述已封装数据中是否存在回复序列号;

判断模块,用于在所述已封装数据中存在回复序列号时,判断是否存在需要发送至所述发送端控制器的回复数据;

第二发送模块,用于存在回复数据时,按照所述预定封装格式对包括所述回复数据及所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器;

第三发送模块,用于不存在回复数据时,间隔预设时长后,按照所述预定封装格式对包括所述回复序列号的消息包进行封装,并通过NTB队列发送至发送端控制器。

基于上述技术方案,还包括:

所述发送端控制器根据当前NTB队列的数据结构判断是否能发送所述待发送数据;若能,则通过NTB队列将已封装数据发送至接收端控制器;若不能,则将所述待发送数据存入等待队列,直至当前NTB队列能发送所述待发送数据为止。

本发明实施例提供的一种基于NTB硬件的多队列通信方法及系统,包括:发送端控制器根据待发送数据的数据大小及预定的队列选取规则,选取对应的目标NTB队列;所述发送端控制器按照预定封装格式对所述待发送数据进行封装,通过所述目标NTB队列将已封装数据发送至接收端控制器,并修改所述目标NTB队列控制页的管理数据;所述接收端控制器通过监控所述目标NTB队列控制页的管理数据,获取所述发送端控制器发送的已封装数据;可见,通过本方案提供的通信方法,不会出现数据包丢失,数据包乱序等情况,并且由于NTB链路的可靠性,也不会存在消息序列号的循环溢出等问题,从而实现高效的消息传递。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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