用于交换机的数据调度方法和装置与流程

文档序号:17071430发布日期:2019-03-08 23:21阅读:279来源:国知局
本发明涉及网络通信领域,具体而言,涉及一种用于交换机的数据调度方法和装置。
背景技术
::以太网是当今现有局域网采用的最通用的通信协议标准,具有传输速度高、低能耗、开放性高和支持设备多等多方面的优势。近些年来,以太网一直将其影响力扩展到工业控制网络领域,标准以太网以尽力而为的方式传输帧,无法确保工业控制任务中对数据传输的确定性和实时性要求。工业以太网是一套集成工业控制网络和标准以太网的解决方案,具有通信速度快、应用广泛、开发和生产成本低、易于集成的特点,被广泛应用于航空、铁路交通、工业制造等领域。实时以太网交换机是工业网络中一种重要的工业网络设备,与终端的设备相互连接构成了整个以太网拓扑结构。实时以太网交换机是一种典型的嵌入式系统应用,嵌入式系统的资源通常受限,实时以太网交换机在进行实时数据的传输过程中,通常使用片上存储器,在嵌入式系统中,片上存储器的资源更加的稀缺。传统的实时以太网交换机调度器大多基于per-portmemory(每个端口有独立的存储资源)的模式,端口之间的存储资源不能共享,当交换机端口的数量非常大时,若某一时刻数据集中在其中特定的几个输入端口,则其他输入端口的存储资源将处于空闲的状态,这会造成大量的资源浪费,不能被充分利用,从而影响实时以太网交换机的性能。因此,研究一种充分利用嵌入式系统片上存储资源的交换机调度方案具有重要的意义。技术实现要素:本发明提供一种用于交换机的数据调度方法和装置,用以克服现有技术中存在的至少一个问题。为达到上述目的,本发明提供了一种用于交换机的数据调度方法,包括:通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中,其中,所述交换机的所有输入端口共享所述缓存;根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送。可选的,所述通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中包括:当输入端口收到数据流时,根据预先接收到的接收调度表判断所述数据流是否非法;若判断结果为否,则通过第一交叉开关矩阵将所述数据流写入到对应位置的缓存中。可选的,所述根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送包括:从预先接收的发送调度表中查询所述数据流的发送时间;当到达所述发送时间时,通过第二交叉开关矩阵从所述缓存中取出所述数据流并通过输出端口进行发送。可选的,所述数据流为实时数据流tt。可选的,所述缓存划分为多个帧池,所述实时数据流共享所有所述帧池,来自同一个输入端口的非实时数据流be保持在同一个帧池中。可选的,上述调度方法还包括:若判断结果为所述数据流非法时,丢弃所述数据流。可选的,所述当输入端口收到数据流时,根据预先接收到的接收调度表判断所述数据流是否非法包括:获取所述接收调度表的调度周期和调度条目;获取所述到达时间中的开始时刻与结束时刻;根据全局时间将所述开始时刻与所述结束时刻转化为到达绝对时间;将所述到达绝对时间、所述帧长度与接收调度表中的所述调度周期和所述调度条目下的预存信息进行匹配以判断所述数据流是否非法。可选的,所述按照接收调度表将所述数据流保存至缓存中包括:确定所述数据流的输入端口;基于所述输入端口由接收调度表中确定所述缓存中的指定位置;将所述数据流储存至所述指定位置。可选的,所述当到达所述发送时间时,通过第二交叉开关矩阵从所述缓存中取出所述数据流并通过输出端口进行发送包括:根据全局时间将所述发送时间转化为发送绝对时间;根据所述发送绝对时间通过第二交叉开关矩阵从所述缓存中取出所述数据流并通过输出端口进行发送。根据本说明书实施例的第二方面,还提供一种用于交换机的数据调度装置,包括:接收缓存单元,被配置为通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中,其中,所述交换机的所有输入端口共享所述缓存;调取发送单元,被配置为根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送。与现有技术相比,本说明书实施例具有下述增益效果:由于本发明通过双crossbar使用共享缓存的机制,实现了一种内存高效利用的实时以太网交换机,相较于传统的per-portmemory的模式,在进行实时数据的调度过程中,能够充分利用嵌入式系统片上存储器的资源,当实时数据的数量持续增大,本发明硬件引擎的调度时间远低于传统交换机的调度时间。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明一个实施例的用于交换机的数据调度方法流程图;图2为本发明一个实施例的schedule-engine模块结构示意图;图3为本发明一个实施例的check_receive_window状态转移图;图4为本发明一个实施例的check_send_window状态转移图;图5为本发明一个实施例的tt-buffer模块接收帧状态机和发送帧状态机示意图;图6为本发明一个实施例的schedule_table_controller状态转移图;、图7为input-buffers+voqs架构和本发明一个实施例采用的架构的端口可访问缓存比较示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明一个实施例的用于交换机的数据调度方法流程图;如图1所示,该数据调度方法包括:s110,通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中,其中,所述交换机的所有输入端口共享所述缓存。一种实施方式中,所述通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中包括:当输入端口收到数据流时,根据预先接收到的接收调度表判断所述数据流是否非法;若判断结果为否,则通过第一交叉开关矩阵将所述数据流写入到对应位置的缓存中。在具体实施时,所述数据流可以为实时数据流tt。所述缓存可以划分为多个帧池,所述实时数据流共享所有所述帧池,来自同一个输入端口的非实时数据流be保持在同一个帧池中。一种实施方式中,上述调度方法还包括:若判断结果为所述数据流非法时,丢弃所述数据流。一种实施方式中,所述当输入端口收到数据流时,根据预先接收到的接收调度表判断所述数据流是否非法包括:获取所述接收调度表的调度周期和调度条目;获取所述到达时间中的开始时刻与结束时刻;根据全局时间将所述开始时刻与所述结束时刻转化为到达绝对时间;将所述到达绝对时间、所述帧长度与接收调度表中的所述调度周期和所述调度条目下的预存信息进行匹配以判断所述数据流是否非法。s120,根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送。一种实施方式中,所述根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送包括:从预先接收的发送调度表中查询所述数据流的发送时间;当到达所述发送时间时,通过第二交叉开关矩阵从所述缓存中取出所述数据流并通过输出端口进行发送。一种实施方式中,所述按照接收调度表将所述数据流保存至缓存中包括:确定所述数据流的输入端口;基于所述输入端口由接收调度表中确定所述缓存中的指定位置;将所述数据流储存至所述指定位置。本说明书实施例的发明点至少体现在以下方面:本说明书实施例提供了一种基于双crossbar结构的交换机硬件调度方案,实时数据(time-triggerd,tt)的调度基于时间触发的机制,交换机的每个端口中通过上位机下发实时数据的调度表,交换机调度引擎按照调度表对实时数据进行调度,满足其实时性和确定性需求。交换机中的所有端口共享同一块缓存,当输入端口收到数据流,根据输入端口的接收调度表检查实时流是否非法,通过crossbar将流写入到对应位置的缓存中,输出端口根据发送调度表中实时流的发送时间,通过crossbar从存储该流的缓存中取出流并进行发送。另一方面,非实时数据流(be)和tt使用同一个共享缓存,在本发明中,将整个共享缓存划分成多个帧池,其中tt流量共享所有的帧池,同一个输入端口的be流量放在同一个帧池中,相当于在对be流量进行调度时,仍然遵从于传统的per-portmemory模式。与上述方法实施例相适应,本说明书实施例还提供了用于交换机的数据调度装置实施例,该调度装置包括:接收缓存单元,被配置为通过输入端口接收数据流,按照接收调度表将所述数据流保存至缓存中,其中,所述交换机的所有输入端口共享所述缓存;调取发送单元,被配置为根据发送调度表中所述数据流的发送时间,将所述数据流从所述缓存中取出并通过输出端口进行发送。参照图2,一种实现方式中,提供了一种双crossbar结构的交换机硬件调度引擎的fpga实现方案,包括以下几个模块:schedule-table-ram模块(对应图2中s-t-r模块)、check-receive-window模块(对应图2中c-r-w模块)、check-send-window模块(对应图2中c-s-w模块)、cross-bar模块(对应图2中c-b模块)、tt-buffer模块(对应图2中t-b模块)、schedule-table-controller模块(对应图2中s-t-c模块),其中,以下分别进行详细介绍:schedule-table-ram模块用于存储实时数据的发送调度表和接收调度表;check-receive-window模块(对应上述接收缓存单元)负责检测实时数据是否按照接收调度表规定的到达时间到来;check-send-window模块(对应上述的调取发送单元)负责按照发送调度表中的发送时间将实时数据发送出去;cross-bar模块负责check-receive-window到tt-buffer模块和tt-buffer模块到check-send-window之间的传输;tt-buffer模块负责存储来自check-receive-window模块的数据帧,并响应check-send-window模块的请求,将对应buffer中的数据通过cross-bar传输给check-send-window。schedule-table-controller模块负责调度表的下载,接收上位机的命令将调度表的内容写入到schedule-table-ram模块中。与现有技术相比,本说明书实施例具有下述增益效果:由于本发明通过双crossbar使用共享缓存的机制,实现了一种内存高效利用的实时以太网交换机,相较于传统的per-portmemory的模式,在进行实时数据的调度过程中,能够充分利用嵌入式系统片上存储器的资源,当实时数据的数量持续增大,本发明硬件引擎的调度时间远低于传统交换机的调度时间。以下结合表和附图对本实施例的一个具体实施例进行详细阐述。表1接收调度表格式表2发送调度表格式macro-periodsizeperiodoutput-pointflow-lengthflow-idbuffer-id……实时数据的调度表分为接收调度表(表1)和发送调度表(表2),该调度表基于时间触发的原理生成,其中接收调度表放在输入端口,发送调度表放在输出端口。在每个调度表的第一行记录所有流的宏周期(也就是所有流的周期的最小公倍数)和流表的大小,接下来每一行表示一个流的信息,在接收调度表和发送调度表中,相同的列名表示相同的意义。period表示流的处理周期,flow-length表示流的有效负载字节大小,flow-id是流的唯一标识,buffer-id是流要存入的共享缓存的地址,input-window-start和input-window-end表示流相对于宏周期中第一个窗口的最早接收流时间和最晚接收流时间,窗口大小根据时间同步的精度、网络的抖动以及队列调度策略来设置,output-point表示该流在宏周期中第一次发送的时间。图2是本发明一个实施例的一种双crossbar结构的交换机硬件调度引擎示例图,硬件调度引擎按照表1和表2对实时数据进行调度,其中scheduleengine是整体的交换机硬件的调度引擎。在这里处理的每一个实时数据帧都有明确的达到时间、发送时间、flow-id和帧长度,因此当一个tt帧被传递到该模块时,check-receive-window会从schedule-table-ram中读取它计划到达的时间、flow-id、帧长度以及存储该帧的位置buffer-id,如果它的这些信息与计划信息一致,就控制cross-bar将数据送往存储该帧的buffer-id对应的buffer,否则就丢掉该帧。check-send-window从schedule-table-ram中获取计划发送的时间、发送的flow-id、发送的帧长度以及从哪个tt-buffer发送的信息,当发送时间到达时,check-send-window控制cross-bar从tt-buffer中读取一帧并在满足长度、flow-id一致的情况下,将该帧传递给下一个模块发送出去。schedule-table-ram中的信息通过schedule-table-controller下发下去,同时schedule-table-controller也能获取schedule-table-ram中的信息传回给上位机。下面具体介绍每个硬件模块的实施过程:check-receive-window模块检测实时数据是否在调度表规定的接收窗口内到来。如果实时数据符合调度表的时间窗口,则将实时数据传输到调度表对应的buffer中。check-receive-window工作的前提是调度表可用,一旦调度表可用,它读取调度表的表头,获取调度表的周期和条目数量;然后读取调度表的条目,获取当前实时数据的input-window-start,input-window-end,flow-id,flow-length,buffer-id和下一个条目的input-window-start;check-receive-window根据全局时间将调度表中的input-window-start,input-window-end转化为绝对时间。最后,将实时数据帧到达的时间与时间窗口、flow-id,flow-length进行匹配。如果匹配成功就切换调度条目,继续传输数据。如果匹配失败,表明当前帧无效。图3是check-receive-window模块的状态转移图,其状态机设计如下:1)s0_sd状态:初始状态。跳转到s(1-7)_sd状态。2)s(1-7)_sd状态:读取调度表的参数,包括接收窗口开始时间、接收窗口结束时间、flowid、帧长度和要发往的buffer编号,跳转到st_wait_sd状态。3)st_wait_sd状态:等待帧的到来,如果有帧到来,跳转到st_rev_para状态;如果帧的接收时间窗口结束时也没有帧到来,跳转到st_end_sd状态;否则保持在该状态。14)st_rev_para状态:获取帧的参数,包括帧的flow-id和帧长度,跳转到st_rev_data状态。5)st_rev_data状态:接收数据,将到来的数据帧传输到crossbar中,跳转到st_goodfra状态。6)st_goodfra状态:判断帧的参数是否合法,如果参数合法,则跳转到st_end_sd状态,否则跳转到st_wait_sd状态。7)st_end_sd状态:结束状态。跳转到s0_sd状态。check-send-window模块按照调度表中的发送时间点将实时数据从be-buffer中发送出去。当调度表条目的指定时间点到来时,该模块负责向调度表条目中指定的buffer获取数据,并将从buffer中传来的数据发送出去并且获得下一个实时数据发送时间点。check-send-window的工作前提是发送调度表可用;一旦发送调度表可用,它读取调度表的表头,获取调度表的周期和条目数量;然后读取调度表条目,获取将要发送数据的发送时间点(output-piont),flow-id,flow-length,buffer-id;check-send-window根据全局时间,将调度表中的发送时间点以及下一帧的发送时间点转化为绝对时间。最后根据发送时间点从指定的buffer中获取数据,发送该帧,保存下一帧的发送时间点。图4是check-send-window模块的状态转移图,其状态机设计如下:1)st_send_idle状态:初始状态。跳转到s(1-5)_sd状态。2)s(1-5)_sd状态:读取调度表的参数,包括数据帧的发送时间、flow-id、帧长度和源tt-buffer编号,跳转到s6_sd状态。3)s6_sd状态:等待全局时间到达数据帧发送时间点,当到达发送时间点时,跳转到s7_sd状态,否则保持在该状态。4)s7_sd状态:向指定编号的tt-buffer请求数据,跳转到s8_sd状态。5)s8_sd状态:等待tt-buffer相应数据请求,如果超过规定时间没有收到tt-buffer的响应,跳转到st_end_sd状态;如果在规定时间内收到tt-buffer的响应,跳转到s9_sd状态。6)s9_sd状态:检测帧头信息,如果帧头信息中的flowid与表中的flowid相匹配,跳转到s10_sd状态;否则,跳转到st_end_sd状态。7)s10_sd状态:发送数据帧到mac模块,跳转到st_end_sd状态。8)st_end_sd状态:结束状态。跳转到st_end_idle状态。cross-bar被称为交叉开关矩阵或纵横式交换矩阵。本发明实施例可以应用在24口的实时以太网交换机上,所以该模块可以利用24*24的crossbar结构实现从check_recive_window模块到tt-buffer模块和tt-buffer模块到check_send_window模块的非阻塞并行传输cross-bar在交换的输入和交换的输出间具有一个特征矩阵。如果交换具有m个输入和n个输出,那么该crossbarswitch就是一个带有mxn个交叉点的矩阵。一个特定的crossbar是一个单层、非阻塞的交换。crossbar的集合能够用于实现多层和/或阻塞的交换。在schedule_engine模块完成一个24x24个交叉点的矩阵。tt-bufer模块存储来自check_recieve_window模块的数据帧,收到读信号将数据发送到check_send_window模块。图5是tt-buffer模块接收帧的状态机和发送帧状态机图,其状态机设计如下:1.接收帧状态机1)idle状态:初始状态,当接受到数据有效信号时,跳转到rev_data状态,否则保持在该状态。2)rev_data状态:接收数据帧,并将数据帧存储到ram中,接收结束后,跳转到end状态。3)end状态:终止状态。跳转到idle状态。2.发送帧状态机1)idle状态:初始状态。当接受到数据请求信号时,跳转到send_header状态,否则保持在该状态。2)send_header状态:发送数据帧的帧头,帧头包括数据帧的flow_id和帧长度信息,跳转到send_data状态。3)send_data状态:发送数据帧,发送结束后跳转到end状态。4)end状态:终止状态。跳转到idle状态。schedule-table-controller模块完成调度表的下载功能。它接收上位机的命令将调度表的内容逐条写入到schedule-table-ram中,并且将命令执行结果返回给上位机。该模块解析scheduletable表相关命令,通过状态机完成下表命令和读取命令的解析,下表命令包括下receivewindow表命令和sendwindow表命令,读表命令包括读receivewindow表命令和读sendwindow表命令。接收到下表命令后,把表的内容放在寄存器里,当把一条消息的数据接收完并确定数据正确后再把寄存器里面的数据存储到ram中。该模块按照功能进行划分,可分为schedule-table-receive-cmd,schedule-table-deal-cmd,schedule-table-send-cmd,schedule_table_out_arbiter4个子模块。schedule-table-receive-cmd模块负责调度表相关命令的接收操作。该模块根据命令字类型,收集完整的命令内容,并对命令进行crc校验,之后将收集的完整命令传递到schedule-table-deal-cmd模块中进行处理。schedule-table-deal-cmd模块负责对调度表相关命令进行处理。对于r,r,s,s命令字,它将调度表表项写入到对应的schedule-table-ram中。对于a,a,b,b命令,它从对应的schedule-table-ram存储空间中读出对应表项的内容。对于e命令,将调度表使能信号置1。对于crc错误和命令字错误的情况,不执行任何操作。schedule-table-send-cmd模块负责返回命令执行的结果。schedule-table-out-arbiter模块维护调度表下载模块的可读写状态。初始化时,调度表下载模块的可读写状态为wr_en(可写)。当有命令输入时,调度表下载模块的可读写状态变为disable(不可读写)。当命令执行结束之后,调度表下载模块的可读写状态变为wr_rd_en(可读可写)。当执行结果被读取完毕后,调度表下载模块的可读写状态为wr_en(可写)。除此之外,schedule-table-controller模块具有容错处理功能,通过返回码告诉上位机消息错误类型:返回码:指令执行成功:值为0x00,即00000000未知指令错误:值为0xfd,即11111101通过状态字告诉上位机当前是否可读还是可写。状态字:32’h00000020表示可写;32’h00000001表示可读。图6是schedule-table-controller模块的状态转移图,其状态机设计如下:1)st_idle状态:初始状态。若接收到命令请求时,跳转到rev_cmd状态,否则保持该状态。2)rev_cmd状态:接收命令状态。根据命令字接收完整的命令,并且判断命令是否正确。如果收集完整的命令后判断命令正确,跳转到deal_cmd状态;否则跳转到st_end状态。3)deal_cmd状态:处理命令状态。根据命令字判断命令需要的操作,如果是读指令,跳转到rd_ram状态;如果是写命令,跳转到wr_ram状态;如果是状态指令,跳转到return状态。4)rd_ram状态:将命令请求的内容从ram读取出来,跳转到return状态。5)wr_ram状态:将命令的内容写在相应的ram中,跳转到return状态。6)return状态:返回命令执行的结果,跳转到st_end状态。7)st_end状态:终止状态。跳转到st_idle状态。图7是本发明一个实施例的采用架构和传统的input-buffers+voqs架构,关于每个端口能访问的缓存数量的比较,可以看出传统的per-memory模式,随着端口数量的增加,每个端口仍然只能使用本端口的缓存。在本发明所提出的架构中,随着端口数量的增加,每个端口能够访问的缓存数量增多,能够更好的利用交换机的片上存储器资源,提高数据的转发性能,提供一种内存高效的调度策略。与现有技术相比,本说明书实施例具有下述增益效果:由于本发明通过双crossbar使用共享缓存的机制,实现了一种内存高效利用的实时以太网交换机,相较于传统的per-portmemory的模式,在进行实时数据的调度过程中,能够充分利用嵌入式系统片上存储器的资源,当实时数据的数量持续增大,本发明硬件引擎的调度时间远低于传统交换机的调度时间。本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1