面向大规模数据流处理的GPU边缘计算集群通信系统的制作方法

文档序号:20999732发布日期:2020-06-05 22:33阅读:348来源:国知局
本发明涉及一种数据传输技术,特别涉及一种面向大规模数据流处理的gpu边缘计算集群通信系统。
背景技术
::随着物联网技术和人工智能技术的飞速发展,相应的复合应用已经在各个领域展开,特别是基于视频和传感数据流的实时分析技术应用已经成为热点。例如,大规模视频监控用于公交系统拥挤度实时分析、用于大社区范围的养老照护、工业自动化分拣应用等。对于这些基于传感的大规模应用面临诸多问题需要解决:1)传感信息的实时处理对前端传感设备的成本提出了挑战;2)视频数据的实时传输对通讯网络产生了压力;3)视频数据的存储和传输对隐私保护问题带来了应用难点(如居家养老照护隐私问题)。这些都为边缘计算技术的应用带来了机会。其关键是构建高性能价格比的边缘计算架构、模型和应用支撑模式。以小型gpu集群为中心的边缘计算模式可以有效解决局部大规模传感的汇集、传输、计算和存储的综合高性价比系统。然而面对数千个数据流的接入、集群内传输以及通信的可靠性问题都为业界带来了新的挑战,目前的相近的通信系统存在以下问题:1)大规模ai流都存在并发周期性,也就是说,数千个流按照一定的周期传输数据流单元,gpu集群按照这个周期并行处理数千个数据流单元,这样可以有效发挥gpu及gpu集群的spmd(singleprogrammultidata)的设备优势特性。然而,支持这种通信特性需求的系统还没见报导。2)外网传感节点通过流汇集节点把信息传入gpu计算集群,gpu计算集群内的节点也需要通过汇集节点传输信息到外部传感节点,增加了应用设计的复杂性。3)现有系统基于连接的的可靠数据流通信机制,限制了系统接入和并发处理数据流的规模,同时不具备灵活的迁移性,使得负载均衡的开销增大以及灵活性降低,不适合大规模的处理机制的扩展。技术实现要素:本发明是针对大规模ai流通信效率和可靠性的问题,提出了一种面向大规模数据流处理的gpu边缘计算集群通信系统,面对大规模ai流,其通过动态配置节点、流路由机制,利用前端智能传感设备固有的周期地获取数据、传输数据的特点,把数千个传感特征并发传输到汇集集群节点,再根据gpu计算节点的计算任务和计算能力的特性,把这些并发的数据流单元,传输到gpu集群中的计算节点按照spmd模式统一并行实时处理。本发明的技术方案为:一种面向大规模数据流处理的gpu边缘计算集群通信系统,包括传感节点、汇集节点、gpu计算节点;系统结构如下:传感节点是系统的末端节点,其收集其传感数据并以数据流的形式发送到汇集节点,同时可以接受来自汇集节点、或来自计算节点的控制命令;汇集节点收集来自多个不同传感节点的数据流,并按照数据流单元的处理周期聚类形成并发数据流发送到计算节点;另一方面,通过并发数据流双向传递传感节点与计算节点间的控制命令;计算节点收集来自多个汇集节点的并发数据流的当前数据流单元,形成当前spmd处理单元,并送往gpu实施大规模并行处理;计算节点以并发数据流的形式在计算节点间传递数据,同时通过逆向并发数据流向传感节点和汇集节点传输控制命令;传感节点、汇集节点、计算节点之间构建数据流链路,数据流链路是基于通信包cp构建的;一个通信包cp包括cpid,sp,rp,pti,stable,rtable,stl,rtnum,其中cpid为通信包标识符,sp为发送线程,rp为接受线程,sp和rp都是通过调用底层通信原语来实现最终通信;pti为该通信包的处理周期;stable为数据流单元发送表;rtable为数据流单元接收表;stl为数据流单元发送确认循环二维表;rtnum为重传次数计算器;在一个节点上有多个通信包cp参与多个处理周期的数据流链路;stable为二维表,二维表的每一行为一个数据流单元的发送临时缓冲区,stable包括intime,cp,dsu,sndst,rs,其中intime属性为该数据流单元转发到来或从应用到来的时间戳;dsu属性存放该数据流单元;cp为发送目标通信包;sndst为该数据流单元的发送状态,0表示还未发送,1表示已发送但还未收到确认回答,2表示已发送并且得到接收端的确认;rs为该数据流单元成功发送的可信率,其是数据流单元被重复发送的次数的函数;stl为二维表,二维表的每一行为一个数据流单元的发送临时缓冲区,stl包括stime,cp,dsu,sndst,snum,其中stime属性为该数据流单元被sp第一次发送的时间戳;cp为发送目标通信包;dsu属性存放该数据流单元;sndst为该数据流单元的发送状态,0表示还未发送,1表示已发送但还未收到确认回答,2表示已发送并且得到接收端的确认;snum为重复发送计数器,sp每发送一次该数据流单元,则该数据流单元的snum加1;rtable为二维表,二维表的每一行为一个数据流单元的接收临时缓冲区,rtable包括rtime,cp,dsu,type,rstime,其中rtime属性为该数据流接收到时刻的时间戳;cp为数据源通信包;dsu属性存放该数据流单元;type为该数据流单元的发送状态,0表示正常数据流,1表示确认回答命令包;当type=1时,说明该确认命令是对stl中命令stl.stime=rstime确认。所述面向大规模数据流处理的gpu边缘计算集群通信系统,系统数据结构包括数据流、数据流单元、处理周期生成器、并发数据流、节点地址配置表、流配置表、并发流配置表、数据流链路和全局配置目录;1)数据流为ds,包括dsid,dsus,pt,dsbw,其中dsid为数据流标识符;dsus为构成该数据流的数据流单元的集合,其按照时间形成序列;pt为该数据流的数据流单元处理的时间,包括感知、汇集、计算处理,即该数据流单元必须在pt内处理完毕;dsbw为数据流需要的通信带宽;2)数据流单元为dsu,包括dsid,timestamp,data,dsusta,dsudirect,其中dsid为该单元所隶属的数据流标识符;timestamp为该数据流的生存时间戳;data为数据流单元的数据部分,data可是某通信协议下的数据、控制命令;dsusta为该数据单元的状态,当dsusta为0时,表示该dsu为空,即数据流dsid的该timestamp周期没有数据,是空单元;dsudirect为数据流方向,当dsudirect=0表示从传感节点到计算节点,当dsudirect=1表示从计算节点到传感节点;3)处理周期生成器为pcm,包括pcid,pctime,dsid,其中pcid为处理周期id,pctime为该处理周期所用的时间,dsid为与该pcid所对应的数据流的标识符;即数据流dsid的数据流单元需要在pctime时间内处理完成,与dsu的pt所对应;4)并发数据流为pds,是同一汇集节点汇集到的相同处理周期的数据流的集合,这个汇集节点可以是针对大规模传感节点的汇集节点,也可以是嵌套在计算节点上的汇集来自多个汇集节点的pds进而形成更大规模的pds;pds包括pdsid,dss,cn,pnum,pctime,其中pdsid为pds的标识符;dss为构成该pds的数据流;cn为汇集该pds的汇集节点;pnum为组成该pds的数据流的个数;pctime为该并发数据流的数据流单元处理周期,即pds上的所有数据流的当前处理周期的pnum个dsu以spmd处理方式提交给gpu节点并行处理;5)节点地址配置表为nac,包括id,nname,ipa,type,pcp,psuc,其中id为节点标识符;nname为节点名称;ipa为节点的ip地址;type为节点的类型,type为0表示该节点为传感节点,type为1表示该节点为汇集节点,type为2表示该节点为计算节点,计算节点为配置gpu的计算机;pcp为该节点的通信处理能力;psuc为该节点通信处理成功累计平均率;6)流配置表为dsc,包括dsid,snid,dnid,dsr,其中dsid为数据流标识符,来自数据流表;snid为该数据流的源节点,来自节点地址配置表;dnid为该数据流的目标节点,来自节点地址配置表;dsr为该数据流的数据流量值;7)并发流配置表为pdsc,用来标志并发数据流在汇集节点与计算节点之间、计算节点与计算节点之间并行通信的路由结构;包括pdsid,snid,dnid,dss,dsr,其中pdsid为该并发数据流标识符,来自并发数据流表;psnid为该并发数据流的源节点,来自节点地址配置表;pdnid为该并发数据流的目标节点,来自节点地址配置表;dss为该并发数据流所包含的数据流的集合;dsr为该数据流的数据流量值;8)数据流链路为dsl,包括dslid,dslns,pt,其中dslid为链路标识符,dslns为链路节点的集合,每个链路节点dsln包括cn和cpid,其中cn为节点名称,cpid为通信包标识符;链路节点取值于流配置表dsc或者并发流配置表pdsc,并且每个数据流链路必须包括传感节点、汇集节点和计算节点;pt为这个链路的处理周期;9)全局配置目录存放数据流表、数据流单元定义、处理周期管理器表、并发数据流表、节点地址配置表、流配置表、并发流配置表、数据流链路表、通信包集合、时钟集合。所述传感节点处理:每个传感节点对应的数据流地址与数据流标识符绑定发送给全局目录系统;每个汇集节点把自己的地址与通讯支持能力发送给全局目录系统;每个计算节点把自己的地址、通讯支持能力、计算能力发送给全局目录系统;根据所有传感节点的数据流标识符得到的数据流需要的通信带宽和所有汇集节点的通讯支持能力,运用通信负载均衡原理,均匀地把每个传感节点所对应的数据流按组聚集分配给汇集节点,并将这些配置信息存入全局目录系统中的流配置表中。所述汇集节点处理:根据所有汇集节点的汇集并发数据流的总通信带宽需求和所有计算节点的通讯支持能力、计算能力运用通信和计算负载均衡原理,均匀地把每个并发数据流建立与计算节点汇集节点之间的对应关系,并将这些配置信息存入全局目录系统中的并发流配置表中;每个汇集节点和计算节点从全局目录系统中获取流配置表和并发流配置表获取信息,并按照每个数据流的处理时间进行聚类,即相同处理时间的数据流划分为并发数据流,重新配置并发数据流,把重新划分的并发数据流发往全局目录系统并更新并发数据流配置表。所述传感、汇集、计算节点从全局目录获取流配置表和并发流配置表,扫描自己的流配置表的每个数据流,获得不同的数据流的dsu处理的时间pt集合{pt1,pt2,……,ptw},并且向处理周期生成器获取w个时钟tpt1,tpt2,……,tptw,并与相应的数据流同步绑定;传感、汇集、计算节点获取时钟tpt1,tpt2,……,tptw,创建一个通信包cp;并把时钟tpt1,tpt2,……,tptw和通信包cp1,cp2,……,cpw发往全局目录系统,并存储。所述全局配置目录扫描数据流表ds,对每个数据流进行如下处理:首先、根据ds寻找与之绑定的传感节点sn;根据ds.pt查询配置在sn上的通信包集合并得到一个与之对应的通信包cp,cp.pti=ds.pt;初始化生成一个数据流链路dsl,dslid自动生成,dsl.pt=ds.pt;用cn和cp.cpi构建一个链路节点dsln(cn,cp.cpi),并且执行dsl.dslns=dsl.dslns+dsln(cn,cp.cpi);用传感节点sn查找流配置表dsc,直到找到sn.id=dsc.snid的表行dscl(dsidl,snidl,dnidl,dsrl);然后、重复地用dscl.dnidl查询并发流配置表pdsc并做如下重复处理:用dscl.dnidl查找并发流配置表pdsc(pdsid,snid,dnid,dss,dsr),直到找到dscl.dnidl=pdsc.snid的表行pdscl(pdsidl,snidl,dnidl,dss,dsrl);根据ds.pt查询配置在pdscl.snid上的通信包集合并得到一个与之对应的通信包cpc,cpc.pti=ds.pt;用pdscl.snid和cpc构建一个链路节点dsln(pdscl.snid,cpc);如果dsln在dsl.dslns中不存在,则执行dsl.dslns=dsl.dslns+dsln(pdscl.snid,cpc);根据ds.pt查询配置在pdscl.dnid上的通信包集合并得到一个与之对应的通信包cpg,这里由cpg.pti=ds.pt;用pdscl.dnid和cpg构建一个链路节点dsln(pdscl.dnid,cpg),并且执行dsl.dslns=dsl.dslns+dsln(pdscl.dnid,cpg);重复处理,直到所有数据流均被配置。所述通信包cp的sp进程如下:cp获取自己所在的数据链路dsl(dslid,dslns,pt);扫描本地应用端口,如果有发送数据dsu包,则:cp判别自己所处的节点位置;a、如果cp的sp所在节点为传感节点,则:{获取相应数据链路dsl的第二个链路节点dlsn[2].cp通信包作为通信目标包;从本地cp的stable读取dsu,获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dlsn[2].cp,dsu,sndst,snum),把(stime,dlsn[2].cp,dsu)交给s进程发送;启动计时器tt,等待对(stime,dlsn[2].cp,dsu)的确认回答:{如果在回答确认时间区间apt内未收到确认回答,则重新提交(stime,dlsn[2].cp,dsu)给s进程发送并且置snum++;如果tt>stime+cp.pt,并且还没收到回答确认,则通知本地应用该dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,则删除表行(stime,dlsn[2].cp,dsu,sndst,snum),并通知本地应用“(stime,dlsn[2].cp,dsu)发送成功”}dlsn[2].cp.rtnum=dlsn[2].cp.rtnum+snum;//重传计数器累加};b、如果sp所在节点为汇集节点,且dsudirect=0,重复读stable取做,直到stable为空,具体如下:{{从cp的stable读取dsu,获取cp的数据链路dsl的第二个链路节点dlsn[3].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dlsn[3].cp,dsu,sndst,snum),把(stime,dlsn[3].cp,dsu)交给s进程发送;}启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束,每个dsu的确认回答操作如下:{对stl的每一个行stl0(stime,dlsn[3].cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,dlsn[3].cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”}//end循环等待stl扫描stl(stime,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;};c、如果sp所在节点为汇集节点,且dsudirect=1:c-1、重复读取stable,每次读取做如下处理,直到stable为空:{从cp的stable读取一个dsu,根据dsu.dsid查询流配置表dsc(dsid,snid,dnid,dsr)得到一个表行dsc0(dsid,snid,dnid,dsr),这里有dsc0.dsid=dsu.dsid;根据dsc0.sn查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.sn在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.sn;tiqu1数据链路dsl0的第一个链路节点dsl0.dlsn[1].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dsl0.dlsn[1].cp,dsu,sndst,snum),把(stime,dsl0.dlsn[1].cp,dsu)交给s进程发送;}//end发送stable中的所有dsu;c-2、启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束,具体操作如下:{{对stl的每一个行stl0(stime,cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”}//end循环等待stl扫描stl(stime,cp,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;};d、如果sp所在节点为计算节点,且dsudirect=1,计算节点发送到汇集节点:d-1、重复读取stable,每次读取做如下处理,直到stable为空:{从cp的stable读取一个dsu,根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;提取数据链路dsl0的第二个链路节点dsl0.dlsn[2].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dsl0.dlsn[2].cp,dsu,sndst,snum),把(stime,dsl0.dlsn[2].cp,dsu)交给s进程发送;}//end发送stable中的所有dsu;d-2、启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束,具体操作如下:{{对stl的每一个行stl0(stime,cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”;}//end循环等待stl扫描stl(stime,cp,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;}。所述通信包cp上的rp进程和r进程如下:ⅰ、如果当前节点为汇集节点,则重复执行如下过程:ⅰ-1、启动当前时段计数器tt;ⅰ-2、节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;ⅰ-3、通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;判别当前通信包dsln0.cpid是否为并发数据流当前单元的目的节点,如果是则发送dsu到本地应用并且发送dsu确认信息给源节点;如果不是,则把dsu存放置stable中继续转发;ⅱ、如果当前节点为计算节点,则重复执行如下过程:ⅱ-1、启动当前时段计数器tt;ⅱ-2、节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.dnid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.dnid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.dnid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;ⅱ-3、通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;判别当前通信包dsln0.cpid是否为并发数据流当前单元的目的节点,如果是则发送dsu到本地应用并且发送dsu确认信息给源节点;如果不是,则把dsu存放置stable中继续转发;ⅲ、如果当前节点为传感节点,则重复执行如下过程:ⅲ-1、启动当前时段计数器tt;ⅲ-2、节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询流配置表dsc(dsid,snid,dnid,dsr)得到一个表行dsc0(dsid,snid,dnid,dsr),使得dsu.dsid=dsc0.dsid中;根据dsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;ⅲ-3、通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;发送dsu到本地应用并且发送dsu确认信息给源节点。本发明的有益效果在于:本发明面向大规模数据流处理的gpu边缘计算集群通信系统,1)运用统一的流配置和路由机制,屏蔽了应用程序对内网节点、汇集节点、gpu计算节点、外部传感节点的物理地址信息,只需按照功能类别和流的名字编写通信应用,大大地降低了应用的复杂度,降低了应用门槛,支持大规模流应用的普及展开;2)基于不可靠的非连接的通信机制(如ip、udp),实现了大规模并发数据流的可靠通信,采用组确认机制,克服了基于连接的可靠通信机制(如tcp)耗费了大量通信资源,大大提高了并行通信的效率,更适合大规模扩展;3)采用动态配置以及流路由机制,通过重传率驱动负载均衡,可以灵活分配传感节点、汇集节点、gpu计算节点的网络关系和网络拓扑结构,具有灵活的适应性;4)灵活的适应性使得边缘计算环境在一些资源失效的情况下,灵活地隔离或增加节点资源,达到容错效果,提高了系统的可用性。附图说明图1为本发明面向大规模数据流处理的gpu边缘计算集群通信系统运行示意图;图2为本发明由同类pti通信包构成的一条流通信链路示意图;图3为本发明通信包构成的流通信系统图;图4为本发明同一节点内实现多个pt类别应用的通信包结构示意图。具体实施方式现在是大数据时代,所用传感器分类很多,由电信号的,有视频信号的也有纯数字信号的再加解析码的等等。并且现传感器多配智能化,可按自己的固有周期自动采集数据,实时采集质量要求也越来越高,这样就产生大量数据,面对上述各种周期的各类数据,重新设计gpu边缘计算集群与之对应的通信系统,提高运行效率。1、体系结构(1)如图1所示gpu边缘计算集群通信系统运行示意图,面向大规模数据流处理的gpu边缘计算集群通信系统包括传感节点、汇集节点、gpu计算节点、全局配置目录、负载均衡系统、处理周期生成器。把数千个传感特征并发传输到汇集集群节点,再根据gpu计算节点的计算任务和计算能力的特性,把这些并发的数据流单元,传输到gpu集群中的计算节点按照spmd模式统一并行实时处理。(2)传感节点是系统的末端节点,其收集其传感数据并以数据流的形式发送到汇集节点,同时可以接受来自汇集节点、或来自计算节点的控制命令。(3)汇集节点收集来自多个不同传感节点的数据流,并按照数据流单元的处理周期聚类形成并发数据流发送到计算节点;另一方面,通过并发数据流双向传递传感节点与计算节点间的控制命令。(4)计算节点收集来自多个汇集节点的并发数据流的当前dsu(数据流单元),形成当前spmd处理单元,并送往gpu实施大规模并行处理。计算节点也可以以并发数据流的形式在计算节点间传递数据;同时通过逆向并发数据流向传感节点和汇集节点传输控制命令。(5)传感节点、汇集节点、计算节点之间构建数据流链路(如图2),这些数据流链路的是基于通信包cp构建的;一个cp可以为cp(cpid,sp,rp,pti,stable,rtable,stl,rtnum),其中cpid为通信包标识符,sp为发送线程,rp为接受线程,sp和rp都是通过调用底层通信原语(如udp协议的send和receive)来实现最终通信;pti为该通信包的处理周期(参见数据结构(3));stable为数据流单元发送表;rtable为数据流单元接收表;stl为数据流单元发送确认循环二维表;rtnum为重传次数计算器。在一个节点(传感、汇集、计算)上有多个cp参与多个处理周期的数据流链路。(6)stable为二维表stable(intime,cp,dsu,sndst,rs),二维表的每一行为一个数据流单元的发送临时缓冲区,intime属性为该数据流单元转发到来或从应用到来的时间戳;dsu属性存放该数据流单元;cp为发送目标通信包;sndst为该数据流单元的发送状态,0表示还未发送,1表示已发送但还未收到确认回答,2表示已发送并且得到接收端的确认;rs为该dsu成功发送的可信率,其是dsu被重复发送的次数的函数;(7)stl为二维表stl(stime,cp,dsu,sndst,snum,),包括stime,dsu,sndst属性,二维表的每一行为一个数据流单元的发送临时缓冲区,stime属性为该数据流单元被sp第一次发送的时间戳;cp为发送目标通信包;dsu属性存放该数据流单元;sndst为该数据流单元的发送状态,0表示还未发送,1表示已发送但还未收到确认回答,2表示已发送并且得到接收端的确认;snum为重复发送计数器,sp每发送一次该dsu,则该dsu的snum加1;(8)rtable为二维表rtable(rtime,cp,dsu,type,rstime),二维表的每一行为一个数据流单元的接收临时缓冲区,rtime属性为该数据流接收到时刻的时间戳;cp为数据源通信包;dsu属性存放该数据流单元;type为该数据流单元的发送状态,0表示正常数据流,1表示确认回答命令包;当type=1时,说明该确认命令是对stl中命令stl.stime=rstime确认。如图3所述通信包构成的流通信系统图,面向大规模数据流处理的gpu边缘计算集群通信系统建立通信包拓扑网络,系统在全局配置目录系统这个所有节点访问的公共存储环境的支持下,通过通信包拓扑网络进行流通信。2、数据结构(1)数据流(ds)为ds(dsid,dsus,pt,dsbw),其中dsid为数据流标识符;dsus为构成该数据流的数据流单元的集合,其按照时间形成序列;pt为该数据流的dsu处理的时间,包括感知、汇集、计算处理,即该dsu必须在pt内处理完毕;dsbw为数据流需要的通信带宽。数据流通常由传感节点发起,经汇集节点汇集到边缘计算集群的计算节点,或在计算集群内流动。(2)数据流单元(dsu)为dsu(dsid,timestamp,data,dsusta,dsudirect),其中dsid为该单元所隶属的数据流标识符;timestamp为该数据流的生存时间戳;data为数据流单元的数据部分,data可以是某通信协议下的数据、控制命令;dsusta为该数据单元的状态,当dsusta为0时,表示该dsu为空,即数据流dsid的该timestamp周期没有数据,是空单元。dsudirect为数据流方向,当dsudirect=0表示从传感节点到计算节点,当dsudirect=1表示从计算节点到传感节点(3)处理周期生成器(pcm)为pcm(pcid,pctime,dsid),其中pcid为处理周期id,pctime为该处理周期所用的时间,dsid为与该pcid所对应的数据流的标识符;即数据流dsid的数据流单元需要在pctime时间内处理完成,与dsu的pt所对应。(4)并发数据流pds(pdsid,dss,cn,pnum,pctime)为同一汇集节点汇集到的相同处理周期的数据流的集合,这个汇集节点可以是针对大规模传感节点的汇集节点,也可以是嵌套在计算节点上的汇集来自多个汇集节点的pds进而形成更大规模的pds;pdsid为pds的标识符,dss为构成该pds的数据流;cn为汇集该pds的汇集节点,pnum为组成该pds的数据流的个数;pctime为该并发数据流的数据流单元处理周期,即pds上的所有数据流的当前处理周期的pnum个dsu以spmd处理方式提交给gpu节点并行处理。(5)节点地址配置表nac为nac(id,nname,ipa,type,pcp,psuc),其中id为节点标识符;nname为节点名称;ipa为节点的ip地址;type为节点的类型,type为0表示该节点为传感节点,type为1表示该节点为汇集节点,type为2表示该节点为计算节点(计算节点为配置gpu的计算机),pcp为该节点的通信处理能力,psuc为该节点通信处理成功累计平均率。(6)流配置表dsc为dsc(dsid,snid,dnid,dsr),其中dsid为数据流标识符,来自数据流表;snid为该数据流的源节点,来自节点地址配置表;dnid为该数据流的目标节点,来自节点地址配置表;dsr为该数据流的数据流量值。(7)并发流配置表pdsc为pdsc(pdsid,snid,dnid,dss,dsr),其中pdsid为该并发数据流标识符,来自并发数据流表;psnid为该并发数据流的源节点,来自节点地址配置表;pdnid为该并发数据流的目标节点,来自节点地址配置表;dss为该并发数据流所包含的数据流的集合;dsr为该数据流的数据流量值。用来标志并发数据流在汇集节点与计算节点之间、计算节点与计算节点之间并行通信的路由结构。通过流配置表和并发流配置表,可以实现横贯传感节点、汇集节点、计算节点之间的数据流传输,以及控制命令的双向传输。(8)数据流链路dsl可以为dsl(dslid,dslns,pt),其中dslid为链路标识符,dslns为链路节点的集合,每个链路节点dsln(cn,cpid),其中cn为节点名称,cpid为通信包(参见体系结构(5))标识符;链路节点取值于流配置表dsc或者并发流配置表pdsc,并且每个数据流链路必须包括传感节点、汇集节点和计算节点。由于每个数据流链路起源于单个传感节点,所以可以给出起源于该传感节点的这个数据流流动时所经历的汇集节点、计算节点,同时具有计算节点经过汇集节点发给传感节点的逆向通讯能力;pt为这个链路的处理周期。(9)全局配置目录存放在一个可以被所有节点访问的公共存储环境下,其存放数据流(ds)表、数据流单元(dsu)定义、处理周期管理器(pcm)表、并发数据流(pds)表、节点地址配置表nac、流配置表dsc、并发流配置表pdsc、数据流链路dsl表、通信包集合、时钟集合等。3、算法1)数据流通信负载均衡配置过程:设有o个传感节点sn1,sn2,….,sno,p个汇集节点cn1,cn2,….,cnp,(node);(1.1)对每个传感节点sni1(1<=i1<=o),做如下工作:{sni1从全局配置目录获取分配给自己的数据流ds(dsid,dsus,pt);并把自己的ip(sni1)与数据流标识符dsid绑定发送给全局目录系统;}对每个汇集节点cni2(1<=i2<=p),做如下工作:{cni2把自己的ip(cni2)与通讯支持能力p(cni2)发送给全局目录系统;}对每个计算节点gni3(1<=i3<=q),做如下工作:{gni3把自己的ip(gni3)、通讯支持能力p(gni3)、计算能力cpower(gni3)发送给全局目录系统;}(1.2)全局目录系统汇集来自所有传感节点sni1(1<=i1<=o)、汇集节点cni2(1<=i2<=p)、计算节点gni3(1<=i3<=q)的信息;(1.3)全局目录系统根据所有传感节点sni1(1<=i1<=o)的dsid的数据流需要的通信带宽dsbw和所有汇集节点的通讯支持能力p(cni2)(1<=i2<=p),运用通信负载均衡原理,均匀地把每个传感节点所对应的数据流按组聚集分配给汇集节点。即把sni1分成p个组cni2,使得sni1与cni2(1<=i<=p)对应且∑snj.dsbw(snj∈sni1)<=p(cni2),即sni1组内的所有数据流都由汇集节点cni2汇集。全局目录系统把这些配置信息存入流配置表dsc为dsc(dsid,snid,dnid,dsr)。(1.4)全局目录系统根据所有汇集节点cni2(1<=i2<=p)的汇集的并发数据流pdsi2(pdsid,dss,cn,pnum,pctime)的总通信带宽需求pdsbwi2(1<=i2<=p)和所有计算节点的通讯支持能力p(gni3)(1<=i3<=q)、计算能力cpower(gni3)(1<=i3<=q)运用通信和计算负载均衡原理,均匀地把每个并发数据流pdsci3建立与计算节点汇集节点gni3(1<=i3<=q)之间的对应关系。全局目录系统把这些配置信息存入并发流配置表pdsc为pdsc(pdsid,snid,dnid,dsr)。(1.5)对每个汇集节点cni2(1<=i2<=p)和计算节点gni3(1<=i3<=q),做如下工作:{从全局目录获取流配置表dsc(dsid,snid,dnid,dsr)和并发流配置表pdsc为pdsc(pdsid,snid,dnid,dsr),并按照每个数据流的dsu处理的时间pt聚类,重新配置并发流,即把每个并发数据流按照pt值聚类划分成多个并发数据流(具有相同的pt),每个并发数据流具有相同的pt;把重新划分的并发数据流发往全局配置目录系统并重新更新并发数据流配置表pdsc。}(1.6)对每个传感节点sni1(1<=i1<=o)、汇集节点cni2(1<=i2<=p)和计算节点gni3(1<=i3<=q),做如下工作:{传感、汇集、计算节点从全局目录获取流配置表dsc(dsid,snid,dnid,dsr)和并发流配置表pdsc为pdsc(pdsid,snid,dnid,dsr);扫描自己的流配置表dsc(dsid,snid,dnid,dsr)的每个数据流ds(dsid,dsus,pt,dsbw),获得不同的数据流的dsu处理的时间pt集合{pt1,pt2,……,ptw},并且向处理周期生成器获取w个时钟tpt1,tpt2,……,tptw,并与相应的数据流同步绑定。一般情况下一个传感节点只配置一个数据流,因此只配置一个时钟。传感、汇集、计算节点均获取时钟tpt1,tpt2,……,tptw,创建一个通信包cp(cpid,sp,rp,pti,stable,rtable,stl);并把时钟tpt1,tpt2,……,tptw和通信包cp1,cp2,……,cpw发往全局目录系统,并存储;}因为同一汇集节点可能收到几个不同采集周期的传感节点数据,按时间聚类后,同一汇集节点的数据按时间分到了不同的通信包内,每个通信包按自己的时钟进行数据传输,如图4所示同一汇集节点内实现多个pt类别应用的通信包结构示意图。(1.7)全局配置目录扫描数据流表ds(dsid,dsus,pt,dsbw),对每个数据流做如下工作:{根据ds.dsid寻找与之绑定的传感节点sn;根据ds.pt查询配置在sn上的通信包集合并得到一个与之对应的通信包cp,这里由cp.pti=ds.pt;初始化生成一个数据流链路dsl(dslid,dslns,pt),dslid自动生成,dsl.pt=ds.pt;用cn和cp.cpi构建一个链路节点dsln(cn,cp.cpi),并且执行dsl.dslns=dsl.dslns+dsln(cn,cp.cpi);用传感节点sn查找流配置表dsc为dsc(dsid,snid,dnid,dsr),直到找到sn.id=dsc.snid的表行dscl(dsidl,snidl,dnidl,dsrl)重复地用dscl.dnidl查询并发流配置表pdsc并做:{用dscl.dnidl查找并发流配置表pdsc(pdsid,snid,dnid,dss,dsr),直到找到dscl.dnidl=pdsc.snid的表行pdscl(pdsidl,snidl,dnidl,dss,dsrl);根据ds.pt查询配置在pdscl.snid上的通信包集合并得到一个与之对应的通信包cpc,这里有cpc.pti=ds.pt;用pdscl.snid和cpc构建一个链路节点dsln(pdscl.snid,cpc);如果dsln在dsl.dslns中不存在,则执行dsl.dslns=dsl.dslns+dsln(pdscl.snid,cpc);根据ds.pt查询配置在pdscl.dnid上的通信包集合并得到一个与之对应的通信包cpg,这里由cpg.pti=ds.pt;用pdscl.dnid和cpg构建一个链路节点dsln(pdscl.dnid,cpg),并且执行dsl.dslns=dsl.dslns+dsln(pdscl.dnid,cpg);}//end重复地}//end(1.7)2)系统通讯过程如下:所有传感节点、汇集节点、计算节点从全局目录获取自己所在的数据链路ds(dslid,dslns,pt);对于传感节点sn,其获取数据链路dsl.dslns的第二个节点dsln[2](cn,cpg2)作为直接通信节点(汇集节点);对于汇集节点cn,其获取数据链路dsl.dslns的第一个节点dsln[1](sn,cpg1)作为上游直接通信节点(传感节点);其获取数据链路dsl.dslns的第三个节点dsln[3](gn,cpg3)作为下游直接通信节点(计算节点);这样链路上的数据通信过程利用通信包cpg1、cpg2、cpg3建立了通信实体;sn的数据流通过cpg1发送给cpg2,cpg2汇集成并发数据流再传递给cpg3.反之gn通过cpg3发送控制命令给cpg2,cpg2再传递给cpg1.实现了数据链路dsl所定义的具有pt处理周期的数据流的汇集、spmd处理。3)通信包cp的sp进程工作过程如下:cp获取自己所在的数据链路dsl(dslid,dslns,pt);扫描本地应用端口,如果有发送数据(命令)dsu包,则:cp判别自己所处的节点位置;3.1如果cp的sp所在节点为传感节点,则:{获取相应数据链路dsl的第二个链路节点dlsn[2].cp通信包作为通信目标包;从本地cp的stable读取dsu,获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dlsn[2].cp,dsu,sndst,snum),把(stime,dlsn[2].cp,dsu)交给s进程发送;启动计时器tt,等待对(stime,dlsn[2].cp,dsu)的确认回答:{如果在回答确认时间区间apt内未收到确认回答,则重新提交(stime,dlsn[2].cp,dsu)给s进程发送并且置snum++;如果tt>stime+cp.pt,并且还没收到回答确认,则通知本地应用该dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,则删除表行(stime,dlsn[2].cp,dsu,sndst,snum),并通知本地应用“(stime,dlsn[2].cp,dsu)发送成功”。}dlsn[2].cp.rtnum=dlsn[2].cp.rtnum+snum;//重传计数器累加}3.2如果sp所在节点为汇集节点,且dsudirect=0(汇集数据),重复读stable取做(直到stable为空):{{从cp的stable读取dsu,获取cp的数据链路dsl的第二个链路节点dlsn[3].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dlsn[3].cp,dsu,sndst,snum),把(stime,dlsn[3].cp,dsu)交给s进程发送;}启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束:{对stl的每一个行stl0(stime,dlsn[3].cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,dlsn[3].cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”。}//end循环等待stl扫描stl(stime,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;}3.3如果sp所在节点为汇集节点,且dsudirect=1(汇集反向,广播功能)(3.3.1)重复读取stable,直到stable为空(stable存放一个并发数据流的当前dsu):{从cp的stable读取一个dsu,根据dsu.dsid查询流配置表dsc(dsid,snid,dnid,dsr)得到一个表行dsc0(dsid,snid,dnid,dsr)(这里有dsc0.dsid=dsu.dsid);根据dsc0.sn查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.sn在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.sn;tiqu1数据链路dsl0的第一个链路节点dsl0.dlsn[1].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dsl0.dlsn[1].cp,dsu,sndst,snum),把(stime,dsl0.dlsn[1].cp,dsu)交给s进程发送;}//end发送stable中的所有dsu(3.3.2)启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束:{{对stl的每一个行stl0(stime,cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”。}//end循环等待stl扫描stl(stime,cp,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;}3.4如果sp所在节点为计算节点,且dsudirect=1(计算节点发送到汇集节点)(3.4.1)重复读取stable,直到stable为空(stable存放一个并发数据流的当前dsu):{从cp的stable读取一个dsu,根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;提取数据链路dsl0的第二个链路节点dsl0.dlsn[2].cp通信包;获取当前时间戳stime,置sndst=0,snum=0,构造二维表stl的一个行(stime,dsl0.dlsn[2].cp,dsu,sndst,snum),把(stime,dsl0.dlsn[2].cp,dsu)交给s进程发送;}//end发送stable中的所有dsu(3.4.2)启动计时器tt;循环等待stl表内的所有dsu的确认回答,直到stl的所有回答处理结束:{{对stl的每一个行stl0(stime,cp,dsu,sndst,snum);如果在回答确认时间区间tpt内未收到对stl0的确认回答,则重新提交(stime,cp,dsu)给s进程发送并且置stl0.snum++;如果tt>stime+cp.pt,并且还没收到确认回答,则通知本地应用stl0所承载的dsu发送失败;如果在tt<=stime+cp.pt时间内,收到确认回答,并通知本地应用“stl0所承载的dsu发送成功”。}//end循环等待stl扫描stl(stime,cp,dsu,sndst,snum)的每一行,对每一行stll做:cp.rtnum=cp.rtnum+stll.snum;//重传计数器累加清空stl;进入下一阶段发送;}4)通信包cp上的rp进程和r进程过程如下:(4.1)如果当前节点为汇集节点,则重复执行如下过程:{(4.1.1)启动当前时段计数器tt;(4.1.2)节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;(4.1.3)通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;判别当前通信包dsln0.cpid是否为并发数据流当前单元的目的节点,如果是则发送dsu到本地应用并且发送dsu确认信息给源节点;如果不是,则把dsu存放置stable中继续转发;}(4.2)如果当前节点为计算节点,则重复执行如下过程:{(4.2.1)启动当前时段计数器tt;(4.2.2)节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询并发流配置表pdsc(pdsid,snid,dnid,dss,dsr)得到一个表行pdsc0(pdsid,snid,dnid,dss,dsr),使得dsu.dsid在集合pdsc0.dss中;根据pdsc0.dnid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.dnid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.dnid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;(4.2.3)通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;判别当前通信包dsln0.cpid是否为并发数据流当前单元的目的节点,如果是则发送dsu到本地应用并且发送dsu确认信息给源节点;如果不是,则把dsu存放置stable中继续转发;}(4.3)如果当前节点为传感节点,则重复执行如下过程:{(4.3.1)启动当前时段计数器tt;(4.3.2)节点上的r进程监听网络,收到数据流单元dsu;根据dsu.dsid查询流配置表dsc(dsid,snid,dnid,dsr)得到一个表行dsc0(dsid,snid,dnid,dsr),使得dsu.dsid=dsc0.dsid中;根据dsc0.snid查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得dsc0.snid在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cn=dsc0.snid;进而得到该dsu的目的通信包dsln0.cpid;r进程把dsu发送给通信包dsln0.cpid;(4.3.3)通信包dsln0.cpid接收来自r进程的dsu,存入到rtable中;发送dsu到本地应用并且发送dsu确认信息给源节点;}5)负载均衡计算过程:pnum=0;扫描通信包集合cp1,cp2,…,cpc,对每个cpi(1<=i<=c)执行pnum=pnum+cpi.rtnum;如果pnum大于阈值thnum(可以根据实验数据获得),则启动算法数据流通信负载均衡配置过程。6)s进程工作过程:s进程收到本地sp进程的通信包(stime,cp,dsu),其中stime为时间戳,cp为通信包,dsu为数据流单元;根据通信包cp查询数据链路表dsl(dslid,dslns,pt)得到一个表行dsl0(dslid,dslns,pt),使得cp在dsl0的链路节点集合dslns中;即找到一个链路节点dsln0(cn,cpid),使得dsln0.cpid=cp;s进程查询节点地址配置表nac(id,nname,ipa,type,pcp,psuc)得到一个表行nac0(id,nname,ipa,type,pcp,psuc),使得cp=nac0.nname;s进程启动物理网络通信协议把dsu发送到节点nac0.ipa。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1