- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于QDR-IV SRAM实现高性能网络系统设计
在过去40年里,随着制造工艺的进步,各种专用存储设备不断推向市场,满足着不同系统的存储需求。众多的选择,意味着系统架构师和设计者可以同时考虑多种方案,根据应用选择合适的存储子系统。尤其是在网络应用方面,架构师面临着不断增加的网络流量所带来的挑战。
据估计,2015年到2020年期间,网络流量的年均复合增长率(CAGR)将达到22%,这一增长主要来自于无线设备的爆炸式增长以及不断增加的视频用量。由于数据包处理的随机性,网络传输的关键—路由器和交换机的性能将和所使用的存储子系统的随机存取性能(以随机存取速率(RTR)衡量)直接相关。本文将会介绍四倍数据传输率(QDR—IV)静态随机存储器如何用于解决网络设计中的性能瓶颈,还介绍了在使用200~400Gbps速率下以太网线卡的统计计数器和转发表进行查找时,如何充分发挥QDR-IV SRAM的性能优势来优化设计。
交换机线卡中的存储子系统
图1为一个典型400Gbps数据层线卡的功能模块、芯片组和存储子系统。
图1:交换机/路由器的数据层线卡
媒介接入控制器(MAC):在共享媒介网络(如以太网)中,媒介接入控制器具有提供寻址和控制信道访问的作用,从而可以使网络节点之间进行联系。MAC连接着 过载缓冲器(OS buffer),使系统设计者能超载与线卡带宽有关的前端(如:100G线卡上的120G前端)。过载缓冲可在一段特定的时间内储存"超额"的数据。该缓冲器需要有在几毫秒时间内转存几个G数据的能力,因此,单位比特成本是最主要的决定标准,也是SDRAM(同步动态随机存储器)最为适合的原因。
网络处理器(NPU)具有多种功能,包括解析数据以确认协议、验证数据包的完整性、基于目标地址查找下一跳地址等。此外,网络处理器收集数据流中数据包的统计信息,用于计费和网络管理等。以下是连接到NPU的存储子系统:
?分类查找——检查传入包的特点,确定是否接收该传入数据包。此查找功能用于源端口、目标端口、源地址、目标地址和所用的协议。对每个数据包均进行查找(基于一个长字符串)。此查找功能的首选存储器是TCAM(三态内容寻址存储器)。通过TCAM可使用二进位和"无关"状态进行搜索,这使得它能基于模式匹配来进行更广泛的搜索。
?转发查找——FIB(转发信息库)表保存了路由中下一跳可能的目标地址。此查找是一个迭代过程,因此会对存储器进行多次访问。每个数据包需要2~8次随机存储器访问,转换为高随机存取速率。QDR-IV SRAM是高随机存取速率的理想选择。
统计&流量状态——路由器对每个数据包和数据流(相关数据包组成的流)进行统计。此统计通过计数器的形式实现。每个应用会有很多这类计数器。计数器用来保存前缀、流和数据包分类。因此,刷新计数器需要高性能的存储器才能满足多重的读—修改—写操作。线卡中的统计和流量状态可共用一个存储器。考虑到对高随机存取速率的需要,QDR-IV SRAM在这方面也是最佳选择。
流量管理器(TM)——流量管理器以数据包的粒度为基础判断是否允许使用共享介质带宽,并在带宽过载时处理拥塞。服务质量(QoS)由流量管理器负责,因此数据包根据层次体系分成不同的等级。这方面关键的存储子系统为:
?数据包缓存——数据包缓存保存将传至交换机结构的数据包。缓存的密度取决于线卡速率和往返时延(RTT)(最高可达250ms)。数据包缓存的选择更多地取决于密度和成本,而非性能。这方面适合选择SDRAM。不过,为了克服DRAM(动态随机存取存储器)本身的限制,客户可采用一种由SRAM和DRAM组成的层次结构,其中快速的SRAM用来作为头/尾高速缓存,弥补速度较慢但容量较大的DRAM的不足。QDR(四倍数据速率)可作为一种高效的头/尾高速缓存用于这种结构中。
?调度器数据库——调度指决定何时将数据包发送到交换机结构的过程,此决定基于数据包的目的和所需的服务质量(QoS)或服务等级(CoS)。数据包被分为几种等级,分别与不同层次的服务相关(服务提供商的收益部分)。通常来说,调度程序需要对每个数据包进行一次读加写操作。虽然调度器对时延周期不敏感,以纳秒(nanosecond)为单位的绝对时延期仍然非常重要。调度器需要在一个最小尺寸数据包的到达时间内完成一个队列/出队列(读/写)动作。因此,读/写潜伏期较长的存储器无疑不适合此应用。
SDRAM用于大的数据包缓存,而SRAM则用于头—尾高速缓存。传送至线卡的数据包保存在一个尾高速缓存中,然后转移到较慢但容量大的DRAM中。同样,准备确定发送时间的数据包,也成块地从DRAM中转移到SRAM头高速缓存中。
通过QDR SRAM可对头 — 尾高速缓存的调度器数据库进行高效寻址。 表1显示了一个路由器中不同存储子系统的随机存取速率要求,单位为百万次存取/秒(MT/s)。R是数据包速率,单位为百万数据包/秒(Mpps)。
表1:路由器不同功能所需的存储器RTR要求
QDR-IV SRAM概述
QDR-IV SRAM配备了一个同步接口,可在一个时钟周期内完成两次写操作或两次读操作,或一次读写结合的操作。QDR—IV有两个双向数据端口A和B,每个均可以用于读或写操作。这一特点带来了额外的灵活性,架构师可将之用于读/写并不一定平衡的应用中。每个端口在两个时钟沿均可进行数据传输(DDR(双倍数据速率)操作),工作模式为突发式,每个时钟周期的突发长度为两个字(每个字为X18或X36)。地址总线为通用型,同样支持双倍数据速率,其上升沿和下降沿能分别为端口A和端口B提供地址。QDR—IV支持嵌入式ECC(错误检查和纠正),可从根本上消除软错误,提高存储器陈列的稳定性。
QDR-IV SRAM有两种规格,即QDR-IV HP和 QDR-IV XP。HP的频率最高可运行在667 MHz,而XP存储器则可高达1066 MHz。下表列出了两种QDR—IV的关键结构特点。两种存储器均有72和144 Mbs两种密度可选,并且支持密度或性能的宽度和深度扩展。
表2:QDR-IV SRAM的主要功能
QDR-IV HP 和XP的主要区别是内存条(bank)的使用。QDR-IV XP可通过将存储器空间分成8个内存条来增加性能,用3个地址的最低有效位(LSB)表示。要求的存储方案是在同一周期内存取不同的内存条。从一个周期到另一周期,所有的内存条均可存取,系统设计师可通过规划系统架构来相应地分配记忆库地址,充分发挥极速存储器的RTR性能。
以下例子展示了两种应用,一种使用QDR-IV HP来进行转发表查找,而另一种将QDR-IV XP用于统计计数器,线路速率均为400Gbps。
400Gbps线速下的转发表查找
如前所述,转发表查找需要任何地方均为2R到8R的存取,此处R为包速率,单位为百万数据包/秒(Mpps)。在400Gbps的线速下,R=600,要求RTR为1200到4800MT/s。以符合以下转发表要求的400Gbps二层交换机为例:
1M x 144位条目
每个数据包查找1个目标地址(DA)(读取)
每个数据包查找1个源地址(SA)(读取)
1次源地址登记(写)或60 Mpps下的CPU访问
基于以上:
密度要求:1M x 144位 => 144 Mb
读访问速度(目标地址+源地址) = 600 +600 = 1200 Mpps
写入更新速率 = 60Mpps
由于数据总线为读写共用,当读操作后续为写操作时,总线需要调转方向。因此,QDR—IV高性能SRAM每次从读到写的切换需要4个周期。因时延的缘故,从写到读不会出现这种情况,读取有5个时延周期,而写入仅有3个时延周期。因总线转向而导致的带宽损失可通过在写入查找表前,最多4次刷新先进先出(FIFO)队列来尽可能地减少。因此需要FIFO中带有一个最新条目的4排高速缓存,如果地址匹配的话此缓存可提供源地址或目标地址查找。每次写入更新的内部整理自检为:
= 4个写入周期 + 4个总线转向周期/4个周期
= 2
用于写入更新的RTR = 写入的内部整理自检* 写入的更新率
= 2 * 60 = 120Mpps速率。
整体RTR要求 = 600+600+120 = 1320MT/s
以下是使用两个72Mb, X36 QDR-IV HP的存储子系统(运行频率为667Mhz)。这两个QDR存储组成带宽扩展模式,以便每个时钟周期在端口【A0、A1】和端口【B0、B1】支持144bits的数据。调度器在目标地址、源地址读取请求和表写入请求(一次性4次写入)之间做出判断,并将它们发送到端口【A0、A1】或端口【B0、B1】。有足够的带宽来满足所有的请求。通过附加QDR-IV HP存储器进行深度和宽度扩展,还能支持更多的表条目,或支持每条目更多位数。
图2:使用QDR-IV HP的转发表查找
400Gbps的统计计数器
如前所述,统计计数器需要任何地方均为2R到16R的存取,此处R为包速率,单位为百万数据包/秒(Mpps)。在400Gbps的线速下,R=600,要求RTR为1200到9600MT/s。以符合以下统计计数器要求的路由器为例:
上行为1百万计数器对
下行为1百万计数器对
每计数器对72bits
每秒8亿次更新
密度要求:2 M x 72 = 144 Mb
要求的RTR = 1600 MT/s(由于读取—修改—写入操作的原因,为2x数据包更新速率)
一个工作在800Mhz的极速X36 QDR—IV存储器即可满足此要求。SRAM的每个存储位置存储两个计数器,每个36 bits,总共200万个计数器。一个典型的计数器对是"总收到的数据包数"和"总字节数",能很容易地保存在SRAM的地址单元内。端口A用于读取操作,端口B用于写入操作,因此无需总线转向时间。
由于传入包的随机性,计数器更新访问的地址也是随机的。QDR-IV XP分为8个内存条,在一个周期内同一源地址不能有两次访问。因此,为避免出现访问内存条的冲突,存储控制器会发送控制流到统计更新逻辑单元。图3显示的是基于FPGA的内存控制器实例。在FPGA中,QDR—IV的每个800 Mhz端口都分成4个通道,每个通道都运行在200 MHz。
图3:基于FPGA的QDR—IV存储控制器
当端口A和B之间出现访问内存条的冲突时,存储控制器将发出"忙碌"(Busy)信号,并将违反的存取操作顺延至下一个时钟周期。如出现"忙碌"信号,系统将不再响应更新率请求。这一问题可通过系统地将计数器分配到它们的存储器阵列地址来解决。QDR—IV有8个内存条,由3个存储地址LSB(最低有效位)表示。对于当前的例子而言,QDR—IV地址的LSB A【0】被映射到上行(入端口)(A【0】=1】)和下行(出端口)(A【0】=0】),以便形成用于调度的奇数和偶数地址。以下图4是假定上行和下午计数器均不超过4亿次更新/秒的情况下,如何实现用于统计更新功能的存储子系统。
图4:基于极速性能QDR—IV的统计计数器解决方案
传入的数据包,以及对应的计数器,自动分为几类。这些计数器类别需要分配不同的内存条,以便避免内存条冲突,并充分发挥QDR-IV XP存储器的性能。根据整体系统架构的不同,分类如下:
1、 基于上行或下行的计数器分类
2、 如果多个NPU(网络处理器)连入同一个统计计数器FPGA,则每个NPU需分配一个不同的内存条
3、 基于以太网连接的计数器分类和内存条分配
4、 基于虚拟通道(VL)或服务等级(CoS)的计数器分类和存储器阵列库分配
5、 基于流的计数器分类和适当的内存条分配
6、 用于定制方案的其它数据包/计数器分类法
结论
QDR-IV SRAM的高随机存取速率使其非常适合高性能要求的网络应用。本文介绍了使用QDR-IV HP和QDR-IV XP用于转发表查找和统计计数器应用实例。系统架构师和设计师可以参照这些例子开始自己的设计,并根据具体的应用需要进行改动。QDR-IV HP和QDR-IV XP均得到了Altera公司和Xilinx公司的存储控制器IP的支持,使存储子系统支持100G到400G的线卡。