星载交换机高性能队列管理器的设计与实现
扫描二维码
随时随地手机看文章
星载交换机是以卫星为核心的天基信息系统的关键子系统,是制约天基信息系统发展的关键技术之一,而星载交换机的核心是高性能的交换芯片。由于太空剧烈变化的环境温度和各种离子的影响,使得宇航级电子器件的性能指标远高于地面设备电子器件,而可选用作为宇航级电子器件的范围又远低于地面设备器件的选用范围,同时星载设备对可靠性的要求远高于地面设备。这就要求星载交换机在技术体制、电路结构、数据包队列管理方式、调度算法等都与地面的交换机有很大不同,这些问题均有待于进行深入研究。
对于以卫星为核心的天基信息系统,利用地面高性能IP交换机仍然存在较大问题,使其在天基信息系统中的使用受到了限制。
(1)功耗:星上设备对功耗有严格的控制,地面高性能骨干IP交换机的功耗通常在数百瓦到几千瓦,这对于星载设备来说是难以承受的。
(2)系统可靠性:星上设备对系统可靠性要求极高,需要在不同层面上考虑冗余备份问题。
(3)系统重量与体积:星上载荷的重量是卫星系统的重要指标,星载高性能交换机在体积和重量上与地面设备相比必须大幅度减轻。
(4)系统硬件结构优化:IP交换机系统的硬件复杂度和集成度非常高,但由于空间温度环境、空间粒子流等的影响,元器件选择上存在很大制约,地面设备中广泛使用的SDRAM、DDR、高性能CPU等器件都无法直接使用,这要求系统硬件结构和算法的复杂度必须降低,使之在可用宇航级元器件(如低速SRAM、处理器和存储器)的基础上实现较高的交换能力。
(5)系统软件结构优化:IP路由器系统的软件复杂度非常高,由于在天基信息系统中高性能网络处理器无法直接使用,所以部分传统上采用软件实现的功能和算法要采用硬件固化的方法来实现。这就需要简化复杂的IP协议栈。
基于以上分析,地面高性能IP交换机在天基信息系统中的使用受到了很大限制。由于星上存储器容量不能像地面那样宽裕,队列长度受限,而卫星空中接口的往返传播时延又大于地面,为了更好地设计流量控制,需要在星载交换机结构中使用一个复杂度低且有效的队列管理器,减少对缓存区容量的要求,保证低时延,降低掉包率,达到用户的QoS要求,提高吞吐量。
1基本概念
在星载交换机中,为了实现IP数据包快速转发,一般采用基于定长信元的体制,IP数据包在进入交换结构前,被分割成许多固定长度的分组(下文统称为信元)。交换结构的缓存方式主要有输入缓存、输出缓存和共享缓存。对于一个N×N交换结构,输出缓存中存储器的访问速度是线路速率的(N+1)倍;采用共享缓存方式是线路速率的2×N倍;而对于输入缓存方式,存储器的访问速度是线路速率的两倍,与交换机的端口数目无关。为了增大交换机的容量,支持更高的线路速率,在星载交换机中有必要研究输入缓存的方式。
对于输入缓存中存在的队头阻塞HOL(HeadofLineblocking)问题,采用虚拟输出排队(VOQ)技术可改善该问题,使吞吐量达到100%。VOQ要获得高的性能,关键问题是要设计一个匹配输入和空闲输出端口的高效、公平的调度算法,也就是二部图的匹配问题。
采用虚拟输出排队机制的输入排队交换结构模型如图1所示。在每个输入端口的缓存区中,设置N个(N为交换机端口数目)FIFO队列,每个FIFO队列对应一个输出端口。也就是说,将输入端口为i,输出端口为j的分组缓存到虚拟输出队列VOQi,j中,在调度器的控制下,将匹配的VOQi,j中的分组调度出去。
2队列管理器结构
队列管理器由输入控制接口电路、多队列请求处理电路、多端口请求处理电路、缓冲区接口控制电路、调度器等模块组成。队列管理器的基本结构如图2所示。
输入控制接口电路将接收到的IP数据包切割成许多长度为64B的信元,并做必要的标识,以便进行IP数据包的重组。每个信元都包含一个信头,信头结构包括目的输出端口、优先级和可以扩展的标识。多队列请求处理电路根据信元的输出端口和优先级将信元流分成多个VOQ队列,多端口请求处理电路在调度器的控制下将信元从信元缓冲区读出。
设星载交换机有K个输出端口,信元有N个优先级。信元缓冲区(SRAM)的地址空间被划分成K个私有区和1个共享区。私有区k(1≤k≤K)只能被去往第k个输出端口的信元占用,而共享区可以被去往任何输出端口的信元占用。设置K个私有FIFO(PFIFO1,PFIFO2,…,PFIFOK)和1个共享FIFO(SFIFO)。私有区k(1≤k≤K)的全部可用地址被记录在(PFIFOK)中,共享区的全部可用地址被记录在SFIFO中。
每个输出端口均维持N个逻辑队列,第n(1≤n≤N)个逻辑队列对应于第n种优先级信元。每个逻辑队列由两部分组成;第一部分位于私有区,第二部分位于共享区。逻辑队列可能只存在第一部分,而不存在第二部分。在信元缓冲区中一共形成N×K个逻辑队列。
在电路模块中,设置N×K组寄存器,每个逻辑队列分别使用一组寄存器来控制信元的写入与读出,每组寄存器包括:header、tailer、depth3个寄存器。其中header为队首寄存器,记录每条逻辑队列的队首地址;tailer为队尾寄存器,记录每条逻辑队列的队尾地址;depth为深度寄存器,记录每条逻辑队列的信元个数。每条逻辑队列中上(前)一个信元和下(后)一个信元的存储地址分别由前向地址指针pre_addr、后向地址指针nxt_addr记录。
图3中给出了前向地址指针pre_addr、后向地址指针nxt_addr以及信元存储地址之间关系的一个示例。图中所示的逻辑队列的队首地址由header记录,队尾地址由tailer记录。该逻辑队列中信元的存储地址依次是4(队首),7026,3900,5732,5733,7025,1(队尾)。
在本队列管理器设计中,交换机的端口数目和信元的优先级可以根据星载交换机的设计要求和交换容量进行动态地扩展,私有区和共享区的存储容量也可以根据流量管理的要求进行动态地扩展。前向地址指针pre_addr、后向地址指针nxt_addr利用FPGA内置RAM实现;PFIFO1、PFIFO2,…,PFIFOK和SFIFO利用FPGA内置FIFO实现;队首寄存器header和队尾寄存器tailer利用寄存器实现。[!--empirenews.page--]
3队列管理器工作方法
当系统复位后,队列管理器对地址空间进行初始化,将可用的地址指针写入到地址空间。信元存储空间分为两部分,一部分为共享存储空间,另一部分为K个针对每个端口固定分配的信元空间,以确保每个端口都有可用的存储空间。当一个信元到达时,如果固定分配的空间和共享空间剩余容量之和不能满足该信元时,则拒绝该信元。队列管理器只需要知道到达信元的输出端口和优先级,就可以确定其进入哪个逻辑队列。信元的写入和读出采用状态机进行控制。
当有新的信元(n,k)到达时,其中n为优先级,1≤n≤N;k为输出端口,1≤k≤K。信元写入控制流程如图4所示。最后根据wr_addr,将信元写入缓冲区。如果发生队列挤占,则被挤占的逻辑队列需要被更新,如果仅有一个信元,则header和tailer都被置0;反之,用前一个信元的地址来更新tailer。写入信元的逻辑队列需要被更新:如果该逻辑队列没有信元,则header和tailer都被置为wr_addr;反之,将tailer的内容记录在pre_addr的第wr_addr个地址中,将wr_addr记录在nxt_addr的第tailer个地址中,tailer的内容被更新为wr_addr。
当有信元读出时,各输出端口采用轮询的方式,信元读出控制流程如图5所示。读出信元的逻辑队列需要被更新:如果仅有一个信元,则header和tailer都被置0;反之,用下一个信元的地址来更新header,tailer不变。
4仿真结果
本设计采用XilinxVertex-5FPGA实现,开发环境是Xilinx集成开发环境ISE13.1,电路核心模块用VerilogHDL编程实现,仿真工具采用ModelSimSE。星载交换机有16个输出端口,信元有4个优先级,PFIFOk为256,SFIFO为4096。仿真验证结果表明电路功能符合设计要求。
4.1寄存器读写指针时序仿真
由仿真时序图6可以看出,初始状态时,PFIFO0、PFIFO2、…、PFIFO15和SFIFO都为空,队列管理器将空闲指针依次写入PFIFO0、PFIFO2、…、PFIFO15中,当它们都为满时,最后写入SFIFO中。
由仿真时序图7可以看出,队列管理器首先从PFIFO0中读出可用指针,当其为空时,就从SFIFO中读出,然后依次从PFIFO0、PFIFO2、…、PFIFO15中读出可用指针。当它们都为空时,则从SFIFO中读出,直到no_ptr=1,说明地址空间无可用指针。
4.2信元的读写时序仿真
由仿真时序图8可以看出,队列管理器根据信头中的输出端口和优先级,依次将信元写入信元存储器,信元存储器形成64个逻辑队列,然后在调度器的控制下,依次将信元从相应的逻辑队列中读出。
在卫星通信中,业务种类繁多且突发性强,用户对服务质量(QoS)要求较高,而卫星网络拓扑结构变化快,传播时延大,这就要求星载交换机具有较小的交换时延和丢包率。本文设计了一种高性能队列管理器,通过硬件仿真验证,其基本能够满足星载交换机的各种性能指标要求,本队列管理器采用动态扩展的设计方式,灵活度较大,但也存在许多不足之处,如组播信元的处理考虑不足、可能存在队头阻塞问题及IP包的管理问题,有可能由于一个信元的丢失导致整个IP包无法接受,这些都是今后进一步的研究工作。