一种基于pcie的主机通讯方法和主机的制作方法

文档序号:6397377阅读:565来源:国知局
专利名称:一种基于pcie的主机通讯方法和主机的制作方法
技术领域
本发明涉及主机通讯技术,具体涉及一种基于PCIE的主机通讯方法和主机。
背景技术
实现两主机系统之间通讯有很多种方法,可以通过TCP/IP协议、IB协议等。主机系统之间最常用的通信方式是使用TCP/IP协议,设置网卡IP地址,使用IP地址实现数据传输,但由于TCP/IP为互联网通信协议,封装了很多层协议包,传输性能比不高。适合于长距离、不可靠的传输环境,不适用于本地系统之间高速互联通信。IB (Inf iniBand)协议适用于本地服务器之间互联通信,但其成本高,系统复杂,布局繁琐。适用于大规模的主机系统之间通信,不适用于少量主机系统之间的通信。PCI Express (PCIE)是外设部件外连标准,用于替代PCI总线标准,具有高速率,低延迟的特性,可用于高速数据的传输。但是相关技术中还没有一种基于PCIE协议的主机之间通信的方法。

发明内容
有待于此,本发明要解决的技术问题是提供一种基于PCIE的主机通讯方法和主机,以提供另一种实现两主机系统之间内部互连通信方式。为了解决上述问题,本发明实施例采用如下技术方案一种基于PCIE的主机通讯方法,本端主机的PCIE设备包括中断寄存器、暂存寄存器和基址寄存器,该方法包括如下步骤步骤A、通过读取本端主机的PCIE设备的配置空间,在本端主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在本端主机的内存虚拟地址空间为所述中断寄存器和所述暂存寄存器映射出一段相应的虚拟内存;在本端主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存,映射出的所有虚拟内存形成内存映射窗口,所述基址寄存器中存储有与所述基址寄存器相应的虚拟内存对应的空间地址;对对端主机进行同样的配置,将本端主机与对端主机通过PCIE总线进行互连;步骤B、本端主机根据与所述配置空间对应的虚拟内存和与所述暂存寄存器相应的虚拟内存将要发送的数据缓存在所述暂存寄存器中;步骤C、本端主机将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到对端主机的相应地址、对端主机的暂存寄存器通过与对端主机的PCIE设备的配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存;本端主机发送的数据达到预定量或者发送完所有的数据时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断;步骤D、对端主机接收到所述中断后,开始将缓存的数据写入自身的内存映射窗口对应的区域中。
可选地,所述步骤B之前,该方法还包括将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包,所述K为将要分成的包的个数;所述步骤B包括本端主机将根据与所述配置空间对应的虚拟内存和与所述暂存寄存器映相应的虚拟内存缓存在所述暂存寄存器中的缓存数据以所述固定大小为单位顺序分成K个包;所述步骤C包括本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断。可选地,本端主机和对端主机的内存映射窗口对应的区域均包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,发送队列和接收队列均为循环队列。可选地,该方法还包括将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包之前,在本端主机的内存映射窗口对应的区域中设置以下变量发送端最大传输序号TxPktSn ;本端主机将缓存在所述暂存寄存器中的缓存数据以所述固定大为单位顺序分成K个包的步骤还包括本端主机在顺序分成的K个包的头部顺序加上包序号PktSn ;本端主机发送的包的个数达到预定个数或者发完最后一个包时,该方法还包括将TxPktSn设置为相应的值。可选地,本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断的步骤包括本端主机初始化所述PktSn和与自身内存映射窗口对应的区域的偏移offset为O ;本端主机从自身内存映射窗口对应区域的发送队列的PktSn处开始发送包,将包写入到所述offset处,每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于本端主机的内存映射窗口大小时,置Offset=O ;当发送的包的个数达到预定个数或者发完最后一个包时,本端主机写TxPktSn,并由本端主机的中断寄存器向对端主机发送中断,该中断中包含该TxPktSn。可选地,该方法还包括当本端主机接收到对端主机发送的中断时,读取该中断中所包含的RxPktSn,并从该RxPktSn处开始重新发送包。可选地,该方法还包括将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包之前,在对端主机的内存映射窗口对应的区域中设置以下变量接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint ;
对端主机每次中断接收完成之后都写RxPktSn。可选地,对端主机接收到所述中断后,开始将缓存的包写入自身的内存映射窗口对应的区域中的步骤包括 步骤a、对端主机接收本端主机发送的中断,从该中断中读取TxPktSn,确定应该接收的包数为TXPktSn-RXPktSn,并将缓存的包写入自身的内存映射窗口对应的区域的接收队列中;步骤b、对端主机查询自身内存映射窗口对应区域的offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I,将所述接收队列的索引RxPoint加I,RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于本端内存映射窗口大小,则置offset为O,之后执行步骤c ;步骤C、对端主机的中断寄存器向本端主机发送中断,该中断中包含RxPktSn,本端主机从RxPktSn处开始发送包;如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则执行步骤d ;步骤d、等待一段时间再重复执行所述步骤B,重复次数达到预定次数时,认为传输失败,发中断给本端主机,该中断中包含RxPktSn,以通知本端主机从RxPktSn处重新发送包;如果RxPktn=TxPktSn,说明本次中断需要接收的包已经接收完毕。—种基于PCIE的主机,所述主机包括映射模块、PCIE设备和发送模块,其中,所述PCIE设备包括中断寄存器、暂存寄存器、基址寄存器和PCIE总线接口,其中所述映射模块设置成通过读取所述主机的PCIE设备的配置空间,在所述主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在所述主机的内存虚拟地址空间为所述中断寄存器和所述暂存寄存器映射出一段相应的虚拟内存;在所述主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存;映射出的所有虚拟内存形成内存映射窗口 ;所述PCIE总线接口设置成和与所述主机有同样配置的其它主机的PCIE设备通过PCIE总线进行互连;所述基址寄存器设置成存储与所述基址寄存器相应的虚拟内存对应的空间地址;所述暂存寄存器设置成根据与所述配置空间对应的虚拟内存和与所述暂存寄存器相应的虚拟内存缓存要发送的数据缓存;所述发送模块设置成将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到所互连主机的相应地址;所述中断寄存器设置成所述发送模块发送的数据达到预定量或者发送完所有的数据时,通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断。可选地,所述主机还包括接收模块,其中所述接收模块设置成接收所互连主机发来的数据;所述暂存寄存器还设置成通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存。可选地,所述主机还包括数据写入模块,其中所述接收模块还设置成接收所互连主机发来的中断;所述数据写入模块设置成所述接收模块接收到所述中断后,开始将缓存的数据写入所述内存映射窗口对应的区域中。可选地,该主机还包括分割模块,其设置成将所述内存映射窗口对应的区域按照固定大小为单位顺序分成K个包,所述K为将要分成的包的个数;将缓存在所述暂存寄存器中的缓存数据按照所述固定大小为单位顺序分成K个包;所述发送模块设置成按照以下方式将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到所互连主机的相应地址以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将包发送到所互连主机的相应地址;所述中断寄存器设置成按照以下方式通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断所述发送模块发送的包的个数达到预定个数或者发完最后一个包时,通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断。可选地,其中,所述主机的内存映射窗口对应的区域包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,所述发送队列和所述接收队列均为循环队列。可选地,所述主机还包括变量处理模块,其中所述变量处理模块设置成在所述内存映射窗口对应的区域中设置以下变量发送端最大传输序号TxPktSn。可选地,所述变量处理模块还设置成当所述发送模块发送了预定个包以后或者传送完最后一个包后,将TxPktSn设置为相应的值,以使得所互连主机通过读取TxPktSn来得知所述发送模块已经发送的包的个数;所述变量处理模块还设置成在将缓存数据顺序分成的K个包的头部顺序加上包序号PktSn。可选地,所述变量处理模块还设置成初始化所述PktSn和所述内存映射窗口对应的区域的偏移offset为O ;所述发送模块还设置成从所述内存映射窗口对应的区域的发送队列的PktSn处开始发送包,将包写入到所述offset处;所述变量处理模块还设置成每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于所述内存映射窗口大小时,置Offset=O ;当发送模块发送的包的个数达到预定个数或者发完最后一个包时,写TxPktSn ;所述中断寄存器还设置成当发送模块发送的包的个数达到预定个数或者发完最后一个包时,向所互连主机发送中断,该中断中包含所述发送模块已经发送的包的个数;所述发送模块还设置成当接收到所互连主机发送的中断时,读取中断中所包含的RxPktSn,并从RxPktSn处开始重新发送包。可选地,所述主机的内存映射窗口对应的区域包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,所述发送队列和所述接收队列均为循环队列。可选地,所述主机还包括变量处理模块,其中所述变量处理模块设置成在所述内存映射窗口对应的区域中设置以下变量接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint。可选地,所述暂存寄存器设置成按照以下方式通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的包进行缓存;所述数据写入模块设置成按照以下方式将缓存的数据写入所述内存映射窗口对应的区域中所述接收模块接收到所互连主机发送的中断时,将所述暂存寄存器缓存的包写入所述主机内存映射窗口对应的区域的接收队列中;所述变量处理模块还设置成每次中断接收完成之后都写RxPktSn ;当所述接收模块接收到所互连主机发送的中断时,从该中断中读取TxPktSn,确定应该接收的包数为TxPktSn-RxPktSn ;查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I,接收队列的索引RxPoint加I, RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于内存映射窗口大小,贝丨J置offset为O ;如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则等待一段时间再重复所述查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι的步骤,重复次数达到预定次数时,认为传输失败;如果RxPktn=TxPktSn,认为本次中断需要接收的包已经接收完毕;所述中断寄存器还设置成传输完成后或传输失败时,发中断给所互连的主机,该中断中包含RxPktSn。本发明实施例的基于PCIE的主机和主机之间的通讯方法,产生了以下有益的技术效果实现了直接利用地址总线以内存地址映射实现两个主机之间的通信,因此高效地完成两个主机之间互连通信;并且主机提供了 PCIE接口,具有很好的扩展性;另外,因为采用PCIE总线传输,没有经过外部链路实现传输,省掉了中间处理流程,实现简单。


图1为本发明实施例的基于PCIE的主机通讯方法;图2为本发明实施例的两个主机之间的互连示意图;图3为本发明实施例的主机结构示意图。
具体实施例方式下面将结合附图及实施例对本发明的技术方案进行更详细的说明。需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。PCIE的基本结构一般都包含有根节点、桥设备、端点设备。PCIE设备都有自己的空间地址,可以将这些地址映射到主机系统内存空间当中去,实现系统与PCIE设备交互。这样,当两个PCIE设备相互关联之后,以PC1-E设备空间作为交互区域,可以实现两个主机系统之间内存地址的相互映射。另外,非透明桥可以连接两端独立的主机系统,其中,非透明桥扮演了一个在本地系统和远端系统之间高性能,低开销的通信的网关的角色。两个系统之间PCIE设备相互关联可以使用很多种方法,当然也可以采用非透明桥的方式。采用非透明桥的连接方式时,非透明桥“装扮”成一个端点设备阻止总线继续向下遍历设备。当本地主机枚举设备时,发现非透明桥设备就将非透明桥设备当成一个逻辑的端点设备,并分配内存空间。相应的,对端主机枚举端点设备时,发现非透明桥设备,也将非透明桥当成一个端点设备,并分配内存空间。这样非透明桥设备在两端主机中分别被当成一个端点设备,并在两端主机系统内存空间中都有自己的内存空间。基于上述考虑,本发明实施例提供了一种基于PCIE的主机通讯方法和装置。本发明实施例的一种基于PCIE的主机通讯方法,如图1所示,包括如下步骤步骤101、通过读取本端主机的PCIE设备的配置空间,在本端主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在本端主机的内存虚拟地址空间为所述中断寄存器和暂存寄存器映射出一段相应的虚拟内存;在本端主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存,映射出的所有虚拟内存形成内存映射窗口,所述基址寄存器中存储有与所述基址寄存器相应的虚拟内存对应的空间地址。其中,所述配置空间中包括配置口、各个寄存器的地址信息等。在对数据进行缓存时,需要用到所述配置空间对应的虚拟内存,在此不再赘述。对对端主机进行同样的配置,将本端主机与对端主机通过PCIE总线进行互连。步骤101的所述操作具体如图2所示。步骤102、本端主机根据与所述配置空间对应的虚拟内存和与所述暂存寄存器相应的虚拟内存将要发送的数据缓存在所述暂存寄存器中;步骤103、本端主机将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到对端主机的相应地址、对端主机的暂存寄存器通过与对端主机的PCIE设备的配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存;本端主机发送的数据达到预定量或者发送完所有的数据时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断;步骤104、对端主机接收到所述中断后,开始将缓存的数据写入自身的内存映射窗口对应的区域中。可选地,所述步骤102之前,该方法还包括将本端主机的内存映射窗口对应的区域按照固定大小S为单位顺序分成K个包,该包为基本的通信包单元。可选地,所述步骤102包括本端主机将缓存在所述暂存寄存器中的I/O缓存数据按照固定大小S为单位顺序分成K个包。可选地,所述步骤103包括本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断。该步骤中,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址的技术术语已知技术,在此不再赘述。可选地,本端主机和对端主机的内存映射窗口对应的区域均包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的包,接收队列用于存储接收到的包。这两个队列一般是循环队列。可选地,该方法还包括本端主机将缓存在所述暂存寄存器中的I/O缓存数据按照固定大小S为单位顺序分成K个包之前,在本端主机的内存映射窗口对应的区域中设置以下变量发送端最大传输序号TxPktSn。可选地,本端主机将缓存在所述暂存寄存器中的I/O缓存数据按照固定大小S为单位顺序分成K个包的步骤包括本端主机在顺序分成的K个包的头部顺序加上包序号PktSn0可选地,该方法还包括当本端主机发送了预定个包以后或者传送完最后一个包后,将TxPktSn设置为相应的值,以使得对端主机通过读取TxPktSn来得知本端主机已经发送的包的个数。可选地,本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断的步骤可以包括以下步骤步骤201、本端主机初始化所述PktSn和与自身内存映射窗口对应的区域的偏移offset 为 O ;步骤202、本端主机从自身内存映射窗口对应区域的发送队列的PktSn处开始发送包,将包写入到所述offset处,每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于本端主机的内存映射窗口大小时,置offset=0。步骤203、当发送的包的个数达到预定个数或者发完最后一个包时,写TxPktSn,并由本端主机的中断寄存器向对端主机发送中断,该中断中包含本端主机已经发送的包的个数。步骤204、当本端主机接收到对端主机发送的中断时,读取中断中所包含的RxPktSn,并从RxPktSn处开始重新发送包。可选地,该方法还包括将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包之前,在对端主机的内存映射窗口对应的区域中设置以下变量接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint。对端主机每次中断接收完成之后都写RxPktSn,本端主机通过读取RxPktSn来判断对端主机接收情况;RxPoint作为接收队列的索引,用于本端主机判断接收队列是否已满。可选地,对端主机接收到所述中断后,开始将缓存的包写入自身的内存映射窗口对应的区域中的可以包括以下步骤
步骤301、对端主机的暂存寄存器通过对应的虚拟内存将接收到的包进行缓存;步骤302、对端主机接收本端主机发送的中断,从该中断中读取TxPktSn,确定应该接收的包数为TXPktSn-RXPktSn,并将缓存的包写入自身的内存映射窗口对应的区域的接收队列中;步骤303,对端主机查询自身内存映射窗口对应区域的offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I,将所述接收队列的索引RxPoint加I,RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于本端内存映射窗口大小,则置offset为O,之后执行步骤304 ;步骤304、对端主机的中断寄存器向本端主机发送中断,该中断中包含RxPktSn,本端主机从RxPktSn处开始发送包。如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则执行步骤305 ;步骤305、等待一段时间再重复执行步骤302,重复次数达到预定次数时,认为传输失败,发中断给本端主机,该中断中包含RxPktSn,以通知本端主机从RxPktSn处重新发送包。如果RxPktn=TxPktSn,说明本次中断需要接收的包已经接收完毕。本发明实施例的一种基于PCIE的主机,如图3所示,包括映射模块21、PCIE设备22和发送模块23,其中,PCIE设备包括中断寄存器221、暂存寄存器222、基址寄存器223和PCIE总线接口 224,其中映射模块21设置成通过读取所述主机的PCIE设备的配置空间,在所述主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在所述主机的内存虚拟地址空间为所述中断寄存器和暂存寄存器映射出一段相应的虚拟内存;在所述主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存;映射出的所有虚拟内存形成内存映射窗口 ;其中,所述配置空间中包括配置口、各个寄存器的地址信息等。PCIE总线接口 224设置成和与所述主机有同样配置的其他主机的PCIE设备通过PCIE总线进行互连。基址寄存器223设置成存储与所述基址寄存器223相应的虚拟内存对应的空间地址;暂存寄存器222设置成根据与所述配置空间对应的虚拟内存和与所述暂存寄存器222相应的虚拟内存缓存要发送的数据缓存;发送模块23设置成将所述基址寄存器223中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器222中的数据发送到所互连主机的相应地址;中断寄存器221设置成所述发送模块23发送的数据达到预定量或者发送完所有的数据时,通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断。可选地,所述主机还包括接收模块24,接收模块24设置成接收所互连主机发来的数据;相应的,暂存寄存器222还设置成通过与所述配置空间对应的虚拟内存和与该暂存寄存器222对应的虚拟内存将接收到的数据进行缓存。可选地,所述主机还包括数据写入模块25,其中接收模块24还设置成接收所互连主机发来的中断;数据写入模块25设置成接收模块24接收到所述中断后,开始将缓存的数据写入所述内存映射窗口对应的区域中。可选地,该主机还包括分割模块26,其设置成将所述主机的内存映射窗口对应的区域按照固定大小S为单位顺序分成K个包;将缓存在暂存寄存器222中的I/O缓存数据按照固定大小S为单位顺序分成K个包。发送模块23设置成按照以下方式将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到所互连主机的相应地址以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将包发送到所互连主机的相应地址。中断寄存器221设置成按照以下方式通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断发送模块23发送的包的个数达到预定个数或者发完最后一个包时,通过中断寄存器221相应的虚拟内存向所互连的主机发送中断。其中,所述主机的内存映射窗口对应的区域均包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据。这两个队列一般是循环队列。所述主机还包括变量处理模块27,其中变量处理模块27设置成在所述主机的内存映射窗口对应的区域中设置以下变量发送端最大传输序号TxPktSn。变量处理模块27还设置成当发送模块23发送了预定个包以后或者传送完最后一个包后,将TxPktSn设置为相应的值,以使得所述第二主机通过读取TxPktSn来得知所述主机已经发送的包的个数。变量处理模块27还设置成在将I/O缓存数据顺序分成的K个包的头部顺序加上包序号PktSn。变量处理模块27还设置成初始化所述PktSn和所述主机的内存映射窗口对应的区域的偏移offset为O ;发送模块23还设置成从所述主机内存映射窗口对应的区域的发送队列的PktSn处开始发送包,将包写入到所述offset处。所述变量处理模块27还设置成每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于所述主机的内存映射窗口大小时,置Offset=O ;当发送模块23发送的包的个数达到预定个数或者发完最后一个包时,写TxPktSn。中断寄存器221还设置成当发送模块23发送的包的个数达到预定个数或者发完最后一个包时,写TxPktSn,向所述第二主机发送中断,该中断中包含所述主机已经发送的包的个数。所述发送模块23还设置成当所述主机接收到所述第二主机发送的中断时,读取中断中所包含的RxPktSn,并从RxPktSn处开始重新发送包。可选地,变量处理模块27还设置成在所述内存映射窗口对应的区域中设置以下变量接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint。变量处理模块27还设置成每次中断接收完成之后都写RxPktSn,使得第三主机通过读取RxPktSn来判断所述主机接收情况。暂存寄存器222设置成按照以下方式通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的包进行缓存;数据写入模块25设置成按照以下方式将缓存的数据写入所述内存映射窗口对应的区域中接收模块24接收到所互连主机发送的中断时,将所述暂存寄存器222缓存的包写入所述主机内存映射窗口对应的区域的接收队列中;变量处理模块27还设置成每次中断接收完成之后都写RxPktSn ;当所述主机接收到所互连主机发送的中断时,从该中断中读取TxPktSn,确定应该接收的包数为TxPktSn-RxPktSn ;查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I,接收队列的索引RxPoint加I, RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于内存映射窗口大小,则置offset为O ;如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则等待一段时间再重复所述查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι的步骤,重复次数达到预定次数时,认为传输失败;如果RxPktn=TxPktSn,说明本次中断需要接收的包已经接收完毕。中断寄存器221还设置成传输完成后或传输失败时,发中断给所互连主机,该中断中包含RxPktSn,以通知所述第三主机从RxPktSn处重新发送包。本发明实施例的基于PCIE的主机和主机之间的通讯方法,产生了以下有益的技术效果实现了直接利用地址总线以内存地址映射实现两个主机之间的通信,因此高效完成两个主机之间互连通信;并且主机提供了 PCIE接口,具有很好的扩展性;另外,因为采用PCIE总线传输,没有经过外部链路实现传输,省掉了中间处理流程,实现简单。本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。
权利要求
1.一种基于PCIE的主机通讯方法,其特征在于,本端主机的PCIE设备包括中断寄存器、暂存寄存器和基址寄存器,该方法包括如下步骤: 步骤A、通过读取本端主机的PCIE设备的配置空间,在本端主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在本端主机的内存虚拟地址空间为所述中断寄存器和所述暂存寄存器映射出一段相应的虚拟内存;在本端主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存,映射出的所有虚拟内存形成内存映射窗口,所述基址寄存器中存储有与所述基址寄存器相应的虚拟内存对应的空间地址;对对端主机进行同样的配置,将本端主机与对端主机通过PCIE总线进行互连; 步骤B、本端主机根据与所述配置空间对应的虚拟内存和与所述暂存寄存器相应的虚拟内存将要发送的数据缓存在所述暂存寄存器中; 步骤C、本端主机将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到对端主机的相应地址、对端主机的暂存寄存器通过与对端主机的PCIE设备的配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存;本端主机发送的数据达到预定量或者发送完所有的数据时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断; 步骤D、对端主机接收到所述中断后,开始将缓存的数据写入自身的内存映射窗口对应的区域中。
2.如权利要求1所述的主机通讯方法,其特征在于: 所述步骤B之前,该方法还包括:将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包,所述K为将要分成的包的个数; 所述步骤B包括:本端主机将根据与所述配置空间对应的虚拟内存和与所述暂存寄存器映相应的虚拟内存缓存在所述暂存`寄存器中的缓存数据以所述固定大小为单位顺序分成K个包; 所述步骤C包括:本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断。
3.如权利要求2所述的主机通讯方法,其特征在于: 本端主机和对端主机的内存映射窗口对应的区域均包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,发送队列和接收队列均为循环队列。
4.如权利要求3所述的主机通讯方法,其特征在于: 该方法还包括:将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包之前,在本端主机的内存映射窗口对应的区域中设置以下变量:发送端最大传输序号TxPktSn ; 本端主机将缓存在所述暂存寄存器中的缓存数据以所述固定大为单位顺序分成K个包的步骤还包括:本端主机在顺序分成的K个包的头部顺序加上包序号PktSn ;本端主机发送的包的个数达到预定个数或者发完最后一个包时,该方法还包括:将TxPktSn设置为相应的值。
5.如权利要求4所述的主机通讯方法,其特征在于,本端主机以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成对端主机的对应空间地址,将包发送到对端主机的相应地址,对端主机的暂存寄存器通过与所述配置空间对应的虚拟内存和与所述暂存寄存器对应的虚拟内存将接收到的包进行缓存;本端主机发送的包的个数达到预定个数或者发完最后一个包时,由本端主机的中断寄存器通过相应的虚拟内存向对端主机发送中断的步骤包括: 本端主机初始化所述PktSn和与自身内存映射窗口对应的区域的偏移offset为O ; 本端主机从自身内存映射窗口对应区域的发送队列的PktSn处开始发送包,将包写入到所述offset处,每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于本端主机的内存映射窗口大小时,置Qffset=O ; 当发送的包的个数达到预定个数或者发完最后一个包时,本端主机写TxPktSn,并由本端主机的中断寄存器向对端主机发送中断,该中断中包含该TxPktSn。
6.如权利要求5所述的主机通讯方法,其特征在于,该方法还包括: 当本端主机接收到对端主机发送的中断时,读取该中断中所包含的RxPktSn,并从该RxPktSn处开始重新发送包。
7.如权利要求3所述的主机通讯方法,其特征在于,该方法还包括: 将本端主机的内存映射窗口对应的区域以固定大小为单位顺序分成K个包之前,在对端主机的内存映射窗口对应的区域中设置以下变量:接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint ; 对端主机每次中断接收完成之后都写RxPktSn。
8.如权利要求7所述的主机通讯方法,其特征在于,对端主机接收到所述中断后,开始将缓存的包写入自身的内存映射窗口对应的区域中的步骤包括: 步骤a、对端主机接收本端主机发送的中断,从该中断中读取TxPktSn,确定应该接收的包数为:TxPktSn-RxPktSn,并将缓存的包写入自身的内存映射窗口对应的区域的接收队列中; 步骤b、对端主机查询自身内存映射窗口对应区域的offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I,将所述接收队列的索引RxPoint加I,RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于本端内存映射窗口大小,则置offset为O,之后执行步骤c ; 步骤c、对端主机的中断寄存器向本端主机发送中断,该中断中包含RxPktSn,本端主机从RxPktSn处开始发送包; 如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则执行步骤d ; 步骤d、等待一段时间再重复执行所述步骤B,重复次数达到预定次数时,认为传输失败,发中断给本端主机,该中断中包含RxPktSn,以通知本端主机从RxPktSn处重新发送包; 如果RxPktn=TxPktSn,说 明本次中断需要接收的包已经接收完毕。
9.一种基于PCIE的主机,其特征在于,所述主机包括映射模块、PCIE设备和发送模块,其中,所述PCIE设备包括中断寄存器、暂存寄存器、基址寄存器和PCIE总线接口,其中: 所述映射模块设置成:通过读取所述主机的PCIE设备的配置空间,在所述主机的内存虚拟地址空间为所述PCIE设备映射出一段与所述配置空间对应的虚拟内存;在所述主机的内存虚拟地址空间为所述中断寄存器和所述暂存寄存器映射出一段相应的虚拟内存;在所述主机的内存虚拟地址空间为所述基址寄存器映射出一段与所述基址寄存器相应的虚拟内存;映射出的所有虚拟内存形成内存映射窗口 ; 所述PCIE总线接口设置成:和与所述主机有同样配置的其它主机的PCIE设备通过PCIE总线进行互连; 所述基址寄存器设置成:存储与所述基址寄存器相应的虚拟内存对应的空间地址;所述暂存寄存器设置成:根据与所述配置空间对应的虚拟内存和与所述暂存寄存器相应的虚拟内存缓存要发送的数据缓存; 所述发送模块设置成:将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到所互连主机的相应地址; 所述中断寄存器设置成:所述发送模块发送的数据达到预定量或者发送完所有的数据时,通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断。
10.如权利要求9所述 的主机,其特征在于,所述主机还包括接收模块,其中: 所述接收模块设置成:接收所互连主机发来的数据; 所述暂存寄存器还设置成:通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存。
11.如权利要求10所述的主机,其特征在于,所述主机还包括数据写入模块,其中: 所述接收模块还设置成:接收所互连主机发来的中断; 所述数据写入模块设置成:所述接收模块接收到所述中断后,开始将缓存的数据写入所述内存映射窗口对应的区域中。
12.如权利要求9-11中任一项所述的主机,其特征在于, 该主机还包括分割模块,其设置成:将所述内存映射窗口对应的区域按照固定大小为单位顺序分成K个包,所述K为将要分成的包的个数;将缓存在所述暂存寄存器中的缓存数据按照所述固定大小为单位顺序分成K个包; 所述发送模块设置成按照以下方式将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将缓存在所述暂存寄存器中的数据发送到所互连主机的相应地址:以包为单位进行数据发送,将所述基址寄存器中存储的空间地址翻译成所互连主机的对应空间地址,将包发送到所互连主机的相应地址; 所述中断寄存器设置成按照以下方式通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断:所述发送模块发送的包的个数达到预定个数或者发完最后一个包时,通过所述中断寄存器相应的虚拟内存向所互连的主机发送中断。
13.如权利要求12所述的主机,其特征在于, 其中,所述主机的内存映射窗口对应的区域包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,所述发送队列和所述接收队列均为循环队列。
14.如权利要求13所述的主机,其特征在于,所述主机还包括变量处理模块,其中: 所述变量处理模块设置成:在所述内存映射窗口对应的区域中设置以下变量:发送端最大传输序号TxPktSn。
15.如权利要求14所述的主机,其特征在于: 所述变量处理模块还设置成:当所述发送模块发送了预定个包以后或者传送完最后一个包后,将TxPktSn设置为相应的值,以使得所互连主机通过读取TxPktSn来得知所述发送模块已经发送的包的个数; 所述变量处理模块还设置成:在将缓存数据顺序分成的K个包的头部顺序加上包序号PktSn。
16.如权利要求15所述的主机,其特征在于: 所述变量处理模块还设置成:初始化所述PktSn和所述内存映射窗口对应的区域的偏移 offset 为 O ; 所述发送模块还设置成:从所述内存映射窗口对应的区域的发送队列的PktSn处开始发送包,将包写入到所述offset处; 所述变量处理模块还设置成:每执行一次写操作所述PktSn加一,所述offset加包大小,当offset大于等于所述内存映射窗口大小时,置Offset=O ;当发送模块发送的包的个数达到预定个数或者发完最后一个包时,写TxPktSn ; 所述中断寄存器还设置成:当发送模块发送的包的个数达到预定个数或者发完最后一个包时,向所互连主机发送中断,该中断中包含所述发送模块已经发送的包的个数; 所述发送模块还设置成:当接收到所互连主机发送的中断时,读取中断中所包含的RxPktSn,并从RxPktSn处开始重新发送包。
17.如权利要求11所述的主机,其特征在于,其中,所述主机的内存映射窗口对应的区域包括两个逻辑上的队列,一个为发送队列,另外一个为接收队列,发送队列用于存储要发送的数据,接收队列用于存储接收到的数据,所述发送队列和所述接收队列均为循环队列。
18.如权利要求17所述的主机,其特征在于,所述主机还包括变量处理模块,其中: 所述变量处理模块设置成:在所述内存映射窗口对应的区域中设置以下变量:接收端最新接收的包的序号RxPktSn和接收队列的索引RxPoint。
19.如权利要求18所述的主机,其特征在于, 所述暂存寄存器设置成按照以下方式通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的数据进行缓存:通过与所述配置空间对应的虚拟内存和与该暂存寄存器对应的虚拟内存将接收到的包进行缓存; 所述数据写入模块设置成按照以下方式将缓存的数据写入所述内存映射窗口对应的区域中:所述接收模块接收到所互连主机发送的中断时,将所述暂存寄存器缓存的包写入所述主机内存映射窗口对应的区域的接收队列中; 所述变量处理模块还设置成:每次中断接收完成之后都写RxPktSn;当所述接收模块接收到所互连主机发送的中断时,从该中断中读取TxPktSn,确定应该接收的包数为:TxPktSn-RxPktSn ;查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι,且offset加一个包大小处的包序号是否等于RxPktSN+2,如果是,则说明包传输完毕,将RxPktSn加I ,接收队列的索引RxPoint加I, RxPoint从RxPktSn开始递增,一直递增到TxPktSn, Offset加包大小,如果offset大于等于内存映射窗口大小,贝丨J置offset为O ;如果offset处的包序号不等于RxPktSN+Ι,或offset加一个包大小处的包序号不等于RxPktSN+2,则等待一段时间再重复所述查询所述主机的内存映射窗口对应的区域offset处的包序号是否等于RxPktSN+Ι的步骤,重复次数达到预定次数时,认为传输失败;如果RxPktn=TxPktSn,认为本次中断需要接收的包已经接收完毕; 所述中断寄存器还设置成:传输完成后或传输失败时,发中断给所互连的主机,该中断中包含RxPktSn。
全文摘要
一种基于PCIE的主机通讯方法和主机,该方法和主机实现了直接利用地址总线以内存地址映射实现两个主机之间的通信,因此高效地完成两个主机之间互连通信;并且主机提供了PCIE接口,具有很好的扩展性;另外,因为采用PCIE总线传输,没有经过外部链路实现传输,省掉了中间处理流程,实现简单。
文档编号G06F13/24GK103077148SQ20131000152
公开日2013年5月1日 申请日期2013年1月4日 优先权日2013年1月4日
发明者王少锋, 吴庆民 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1