分享

千兆以太网交换芯片BCM5690及其在交换整机中的应用

 Taylor 2008-08-24
   摘要:BCM5690是BroadCOM公司推出的集成有12个千兆端口和1个万兆端口的多层交换芯片。文章比较全面地介绍了该芯片的结构和功能特性,给出了他的访问控制方式和数据流程,同时给出了用BCM5690设计交换整机的硬件结构和软件实现方法。
    关键词:千兆以太网;BCM5690;堆叠;数据流程
现在,万兆芯片技术不断取得新的发展,尤其在“真”万兆的问题上,只有拥有更先进的芯片,设备厂商才能够在芯片功能和特性的基础上研发自身的交换机体系架构。虽然Broadcom、Intel、Marvell、美国国家半导体(NS)、英飞凌(Infineon)和意法半导体(STMicro electronics)都推出了最新的千兆以太网芯片产品。但万兆芯片的发展无疑会从硬件和架构层面来加快万兆产品的发展速度。
为此, BroadCOM公司研发了BCM5690(12+1)单芯片交换方案。该集成电路芯片整合了12个千兆端口和1个万兆端口,是一款功能比较强大和全面的三层千兆以太网交换芯片。文中将周详介绍BCM5690芯片的功能特性连同基于该芯片的交换机实现方法。

1 BCM5690芯片简介
1.1 BCM5690芯片结构
BCM5690是芯片提供有12个GE接口(千兆端口)和1个HiGig接口(内联端口),并具备堆叠功能。器件的端口采用PCI接口进行管理。其结构框图如图1所示。

    由图1能够看出:BCM5690芯片由以下一些主要功能模块组成:
(1)GIGA接口控制器GPIC:用于提供GE口和交换逻辑之间的接口。
(2)内联端口(HiGig)控制器IPIC:主要提供HiGig口和内部交换逻辑之间的接口,有时也被用于多片BCM5690之间的堆叠操作。
(3) CPU管理接口CMIC:主要提供CPU和BCM5690设备不同功能块之间的接口,同时也用于诸如MIIM、I2C和灯的处理等功能。该模块通过PCI接口和CPU相联,可使CPU访问和控制BCM5690,而DMA引擎则支持数据从CPU传向BCM5690或从BCM5690传向CPU。
(4) 地址解析逻辑ARL:该逻辑功能模块可在数据包的基础上确定该数据包的转发策略。他利用二层表(L2_TABLE)、二层组播表L2MC TABLE 、三层表(L3_TABLE)、三层最长前缀匹配表(DEF_IP_HI和DEF_IP_LO)、三层接口表L3-INTF 、IP组播表(L3_IPMC)、VLAN表(VLAN)连同spanning tree Group表(VLAN_STAG)来决定如何转发数据包。
(5) 公共缓冲池CBPCBP实际上是1MB共享的包缓冲区。CBP由8192(8K)个单元组成,每个单元128字节。设备里的每个数据包消耗一至多个单元。
(6)内存管理单元MMU:BCM5690有一个单独的内存管理单元。每个MMU和设备的功能块(GPIC、IPIC等)相关联。MMU负责数据包的缓冲和调度。他首先接收数据包,然后再将数据包缓冲,并在发送时加以调度,同时他还管理交换单元的流控特性。概括来说,就是缓冲逻辑、调度逻辑、流控逻辑。缓冲逻辑从CP-BUS接收包并存放在CBP,同样也从CBP获取包并将他们发送到CP-BUS上去。包的发送顺序由调度逻辑根据包的优先级别确定。流控逻辑包括Head-of-LineHOL 阻塞预防和Backpressure两种方式。

    这些功能模块之间可通过两条内部总线联系起来:CP-Bus(图1粗黑线所示)、S-Channel Bus图1细黑线所示 。其中CP-Bus用于芯片内数据包的高速传输,他支持任何端口的同时线速转发。而S-Channel Bus则有两个作用:第一是用于MMU到其他功能块的流控;第二是通过CMIC利用软件控制来访问内部寄存器和表。
1.2 BCM5690芯片特性及功能介绍
Broadcom公司XGS系列芯片的重要特性是具备堆叠功能,该功能能够将多个交换芯片组合在一起,以形成一个更大规模的系统,或将多个带交换芯片的系统组合在一起形成一个完整的系统设备。这种功能最多能够实现30个设备的堆叠。
BCM5690能够通过Hi-Gig和GIGA来扩展系统容量。他有四种模式,其中cascade模式通过Hi-Gig口单向互联来形成(环行组网);而全双工堆叠模式则通过BCM5690的Hi-Gig口双向地和BCM567X相连来扩展容量(环形组网);第三是chassis模式,该模式是将Hi-Gig通过背板互连形成(星形组网)。可实现冗余备份和逐级交换,不需中转,且效率比环行组网高;最后是SL形式的堆叠,他通过GIGA口来互连BCM5690。图2所示为BCM5690的逻辑框图。
BCM5690是一款千兆以太网交换芯片,他支持二层交换、三层路由连同第2~7层数据包的分类和过滤等。
地址解析逻辑是BCM5690集成电路芯片的中央部件GPIC的入口逻辑用他来决定单个包的转发方向。
BCM5690集成电路芯片中的快速过滤处理器(FFP)是个通过第2~7层数据包进行分类和过滤的引擎。每个GE口各有一个FFP来负责包的分类和更新。FFP能够通过配置寄存器GIMASK和GIR-ULE来改变符合条件的数据包特性其中GIMASK用于配置匹配选项,GIRULE用于产生操作命令。对于每个数据包来说,最多能够改变16个匹配特性。假如同时有多个特性符合匹配条件,则在GIMASK里处于高位的优先配置。
对于包的缓冲和流控,BCM5690还整合了1MB的数据包缓冲区CBP,这个缓冲区可为任何端口共用。
BCM5690中的寄存器MIRROR_CONTROL和IMIRROR_CONTROL用来配置被映像端口和映像端口,两个寄存器的内容应保持一致。他支持本芯片内的映像。
BCM5690集成电路芯片中的链路聚合(trunk)最大可支持8端口的Trunking,共32组Trunk,并可进行跨芯片的端口Trunk。另外,BCM5690还支持速度高达 66MHz的PCI接口,并可对任何数据包的线速交换连同RMON、SNMP、STP和Rapid STP提供支持。

2 访问控制方式及数据流程
2.1 访问控制方式
BCM5690支持一系列符合PCI标准的寄存器这些寄存器允许对设备再分配MODID 、地址空间的自动配置和再映射。CPU对BCM5690的控制都是通过访问PCI寄存器来实现的。BCM5690的寄存器分为直接访问和非直接访问两种。可直接访问的寄存器映射到PCI的内存空间这些寄存器相对于PCI控制寄存器有一个固定的地址偏移。上电初始化期间,系统自动配置每个PCI设备的基地址及地址范围,以便能够唯一地访问每一个PCI设备中的寄存器。BCM5690的访问机制分为三个类型:一是PCI配置空间;二是PCI memory 映射的I/O,比如通过PCI设备对DMA、MIIM和I2C的控制;第三是消息机制。
2.2 数据流程
任何的数据流通过交换芯片都要经过输入部分(Ingress)、内存管理单元(MMU)和输出部分(Egress)这三个流程。其数据流程如图3所示。
Ingress(输入逻辑)是数据包在每端口上的逻辑流程。每端口都有自己的输入逻辑,输入逻辑负责任何包的转发(交换)策略,决定将包送给哪个端口,根据转发信息将数据包发送给MMU,进行缓冲和调度,并以线速对包进行处理。输入逻辑和大部分交换功能关联。
MMU(内存管理单元)主要负责数据包的缓冲和调度,他接收从输入逻辑过来的数据包并缓冲这些包,同时对这些包进行调度并将他们送给输出逻辑。数据包进入MMU时将存储在CBP里。CBP有1MB的大小供任何端口共用。MMU主要有四部分功能:资源计数、背压、HOL预防机制、调度。其中资源计数主要是统计当前消耗的CBP单元数或CBP数据包个数,决定数据包什么时候进入背压或HOL预防;调度则是根据优先级和COS的四种调度准则来确定包发送的先后顺序和权重。
Egress(输出逻辑)主要从MMU获取数据包并将其送入各个端口,这是整个流程中最简单的一环。他先将包发给输出端口,然后确定是否在发送的数据包上添加tag。具体流程如下:首先从MMU请求数据包,假如发送的包需要不带tag,则负责将tag去掉;然后计算数据包的CRC;最后将包交给MAC发送(特别情况下,CMIC将直接把数据包以DMA方式发送给CPU)。

3 基于BCM5690的交换整机设计
3.1 硬件实现
笔者在设计中采用了两片BCM5690和四片BCM5464,外加四个SFP接口的千兆光接口来实现16端口的10/100/1000M的电口和4个千兆光口的交换整机。BCM5464是BroadCom的四端口的千兆PHY。
图4是该交换整机的主控板硬件结构,其硬件电路由交换单元、物理接口单元、RJ45和灯接口单元、光接口单元、控制单元、CPU连接器单元、时钟单元、电源单元组成。其中交换单元选用了两片BCM5690,他们之间通过Hi-Gig口背靠背连接实现通信,带有和其他大部分单元的接口。每片BCM5690通过PCI接口和CPU连接器相连,主要用来和CPU通信以实现对芯片的管理。
图4所示电路中的CPU采用Motorola公司的PPC8240,主要负责整个系统的运转调度。12个电口通过背板总线和各个线卡相连,以实现各线卡的上联功能。当主控板单独作为一个单独的三层交换机时,他将同时作为和其他三层设备互联的接口。4个千兆光接口和本设备上联可扩展以太网的传输距离。
本系统使用了两个背靠背连接的BCM5690来进行设计,这样可将该系统归为cascade模式。在堆叠完成之后,通过在堆叠口的以太网包首部加上头信息,可使芯片和芯片之间、系统和系统之间通过Broadcom专有的通信协议来实现相互之间的信息传输,从而实现数据包在不同芯片、不同系统之间的转发。
另外,还能够通过配置IPIC CONFIG 寄存器(IPIC_CASCADE, MY_MODID)、MODPORT表和Giga bit端口CONFIG寄存器来对堆叠进行配置。
3.2 软件实现
a.初始化流程
在设计软件模块的初始化流程时,首先是头模式的配置,由于BCM5690固定工作在小头little_endian 模式,而PPC8240工作在大头模式,因此需要对头模式进行配置;接下来是查找PCI设备,以获取各个PCI设备的设备号连同各自的基地址;之后应对堆叠模式进行配置,以便两片BCM5690之间的二层表内容能够互通;最后是基本交换功能和DMA通道的配置。
b.软件结构
图5是笔者设计的软件结构简图。其中涉及驱动程式和驱动程式封装的是SAL层、Driver层和BCM层。SAL层可对操作系统和驱动层进行隔离,可提供PCI中断连同PCI设备的查找、线程、中断、同步和内存管理。Driver层包括BCM5690寄存器的访问方式实现、表的初始化、内存初始化、芯片堆叠模式的配置、L2和L3地址的操作和查找、数据包的发送/接收连同端口的管理等。
 

    千兆以太网无源光网络(EPON)是一种点到多点拓扑结构的光接入网技术,采用无源光器件连接局端和远端设备,实现以太网业务的透明传输,并能在同一架构中实现语音、视频等综合业务的接入。

    EPON作为新兴接入网技术的突出优势在于低成本、易维护和扩展性好。EPON系统由OLTONU构成。

    ONU硬件系统设计

    系统硬件由嵌入式控制模块和网络交换模块两部分构成。嵌入式控制模块是ONU的控制和管理核心,它为嵌入式Linux操作系统的运行提供硬件平台,通过它来实现对网络交换模块的控制与配置,实现网络交换模块的正常运行。网络交换模块提供以太帧的交换与转发功能,嵌入式控制模块通过PCI总线与网络交换模块进行通信,访问网络交换模块内部各芯片的寄存器,对各芯片进行配置并获取各个芯片的状态信息。网络交换模块内部的交换芯片BCM5615将嵌入式控制模块对它的访问,转换为自己对网络交换模块内部各芯片的访问,这样就实现了嵌入式控制模块对网络交换模块内部各芯片的管理。

    嵌入式控制模块接口设计

    嵌入式处理器MPC8245简介

    MPC8245由一个外设逻辑块和一个32位超标量体系结构PowerPC处理器内核构成。在外设逻辑块中集成了一个PCI桥、DUART、内存控制器、DMA控制器、EPIC中断控制器、一个消息单元和一个I2C控制器。处理器内核支持浮点运算和内存管理,具有16KB指令高速缓存(cache),16KB数据cache和电源管理特性。MPC8245内含一外设逻辑总线,用于连接处理器内核和外设逻辑块。处理器内核可在多种不同的频率下工作。MPC8245既可用作PCIhost,也可用作PCI代理控制器。支持多达2GB的SDRAM;支持1~8 组的4MB, 16MB, 64MB, 128MB, 或256MB存储器。

    时钟电路

    MPC8245输入时钟由33MHz的的晶振通过零延时缓冲器产生四路时钟信号,一路作为MPC8245的PCI总线时钟和内核的输入时钟,系统时钟信号OSC_IN未用,需要接地。MPC8245的引脚PLL_CFG[0:4]用于配置倍频因子,经过内部倍频器,产生SDRAM时钟和166MHz的CPU内核时钟。一路作为RTL8139的PCI总线时钟,一路作为BCM5615的PCI总线时钟。

    PCI总线接口

    PCI总线工作在33MHz,设计中要保证PCI时钟的时钟相位偏移小于2ns,否则,系统可能无法正常工作。MPC8245作为PCI主处理器,RTL8139和BCM5615的REQ#、GNT#分别连到MPC8245的REQ[0:1]#、GNT[0::1]#,由MPC8245来实现总线的仲裁。利用地址线AD31,AD30来决定RTL8139、BCM5615的IDSEL,实现PCI总线配置访问时对RTL8139、BCM5615的片选。这种方法会使AD31,AD30线上增加一个负载,因此将它们的IDSEL通过1K?电阻耦合到AD31、AD30上来解决负载加重的问题。PCI总线的控制信号都要求有上拉电阻,保证它们在没有驱动设备驱动总线的情况下仍然具有稳定的值,因而FRAME#、TRDY#、IRDY#、DEVSEL#、STOP#、SERR#和PERR#这些信号使用10K?电阻上拉。

    Flash

    在MPC8245中,ROM/Flash被分为2个BANK,BANK0 的地址为0xFF800000~0xFFFFFFFF ,片选为/RCS0, RCS0接存储代码的存储器片选;BANK1 的地址为0xFF000000~0xFF7FFFFF,片选为/RCS1。 ROM/Flash/SRAM 工作在不同的数据宽度(8位,16位,32位,64位)地址总线下,复位时,MPC8245的引脚MDL0、/FOE决定启动数据位宽度;复位后,硬件复位配置字决定数据的宽度。

    本设计中选择512KB的Flash作为Bootloader代码存储器,系统工作在8位模式,对应的地址为0xFF800000~0xFF87FFFF。选用两片AM29LV320B分别作为Bootloader/Linux内核和文件存储器,AM29LV320B是32Mb、单3.3V电源供电的闪存,编程和擦写电压由内部产生,与JEDEC单电源闪存标准兼容;可组成4M×8Bit或2M×16Bit的存储器。可用标准EPROM编程器进行编程;存取时间最短为70ns;独立的片选(CE#)、写使能(WE#)和输出使能(OE#)控制,可减小对总线的压力。片选RCS1、RCS2分别选择两片Flash,RCS1选中的Flash对应的地址为0xFF000000~0xFF3FFFFF,RCS2选中的Flash地址由编程决定。

    跳线J1用来将RCS0接到Flash1,RCS1接到Flash0,这样在Bootloader代码运行后,将Bootloader代码、Linux内核代码都烧到Flash1,节约一片512KB的Flash,同时留下RCS2、RCS3片选信号,留作以后扩展Flash用。

    SDRAM

    32MB的SDRAM由两片HY57V283220T组成。MPC8245的SDRAM接口使用一个片选信号CS1,同时作为两片HY57V283220T的片选,构成64位数据的SDRAM。HY57V283220T是4 Bank×1M×32Bit的CMOS SDRAM,单3.3±0.3V电源供电,所有引脚与LVTTL接口兼容,所有输入和输出都以系统时钟的上升沿为参考。

    CONSOLE和EMS接口电路

    串行通信通过MAX232芯片实现,工作在3.3V工作电压,它的体积比较小,工作稳定。通过串口可实现对ONU的网络管理。使用常用的PHY芯片RTL8139扩展一个10Mbps网口,使得在Bootloader代码引导系统后,通过该网口下载Linux内核代码,系统运行后通过该网口对ONU进行WEB管理。

    交换模块接口设计

    以太网交换模块由1个BCM5615交换芯片、3个BCM5228BPHY芯片、1个BCM5221PHY芯片、1个HDMP-1636A千兆SERDES和SDRAM芯片组成。该模块提供1个千兆光口(1000BASE-LX),25个百兆光口(100BASE-FX),是实现ONU功能的核心部分。一个千兆口作为PON的接收端口,接收OLT广播发送的数据包;另一个千兆口连接成百兆口,作为PON的发送端口,向OLT发送数据,该端口发射的是特殊波长的光。通过特殊的交换机制来实现ONU与OLT的连接。

    BCM5615芯片简介

    BCM5615是集成多层交换芯片,是以太网交换模块的核心。它具有24个10/100Mbps和2个10/100/1000Mbps以太网口;具有2层和3层交换和2~7层过滤功能;可实现全线速交换,交换速率达670万包/秒;支持IEEE802.1Q.D;具有256KB的内部数据包存储器,可以用SDRAM扩展64MB外部数据包存储器。

    本设计选用3片BCM5228B来提供24个PHY端口。BCM5228B是物理层器件,单片内包含8个独立的PHY(端口)。BCM5615通过串行MII管理接口管理3个BCM5228B芯片的24个PHY端口,系统对BCM5228B的访问就是通过转化为BCM5615的串行MII管理接口上的操作来实现的。BCM5228B每个PHY端口的管理地址由PHYADD[4::0]引脚设置,若BCM5228B的PHYADD[4::0]为PHYAD,则每片8个端口对应的管理地址分别为ADDR=PHYAD+PORTX,PORTX为每个PHY端口的编号。

    时钟电路

    BCM5615的芯核时钟由133MHz的晶振产生,设计PCB时,应尽量靠近BCM5615的时钟输入引脚,BCM5615的GMII时钟与MII时钟均为125MHz,由125MHz的晶振通过74LCX245缓冲后产生四路125MHz的时钟源,输入到BCM5615的GMII_CLKIN引脚和3片BCM5228的REF_CLK引脚。注意连接到BCM5228B的时钟线应该等长,不管千兆口是否使用,GMII_CLKIN的时钟都必须提供。

    系统复位电路

    系统复位电路采用IMP811复位芯片,通过74LCX245缓冲后产生多路复位信号,分别接到各个芯片的复位引脚。为了可靠复位,要求复位信号的上升沿不能有振荡现象发生。

    系统软件设计

    本文选择Linux作为操作系统,使用Broadcom公司提供的软件开发包SDK开发BCM5615的驱动程序。PPCBOOT是独立于其它软件的,它只负责初始化并配置有关硬件,然后调用Linux内核映像引导操作系统运行,其它软件分为用户空间程序和内核空间程序两大部分。在内核空间运行嵌入式Linux操作系统、BCM5615驱动程序、RTL8139网口驱动程序、实现STP的STP内核模块、为方便整个软件系统设计和实现而采用的虚拟设备VND和VCD。它们之间的接口关系是:Linux提供内核API给BCM5615驱动和其它Linux可动态加载内核模块,如STP、VND、VCD、RTL8139网卡驱动等。

    ASIC驱动

    ASIC驱动主要是完成对BCM5615的初始化和配置工作,并为上层服务提供接口。其中SAL层的目的就是把操作系统所提供的各种服务映射为驱动程序本身的API。第二层即中间层,也可以说是整个驱动程序的核心层,它建立在SAL之上,其设计目标主要是提供底层寄存器和存储器的访问、PCI 总线操作、DMA 操作以及中断处理函数等。驱动程序的顶层是API层,它建立在DRV层之上,是对DRV 有关部分的封装,从而为上层的其他软件模块提供各种服务,其他模块通过调用这一层的函数来访问和控制ASIC。ASIC 驱动提供的API 对用户进程来说是无法直接调用的,因此本文设计了一个虚拟的字符设备(TTY),并编写其驱动程序,同时在/dev 目录下用mknod 命令建立相对应的字符设备文件。

    对操作系统来说,BCM5615的26个端口对应于一个物理PCI设备,即ASIC,它们共享一个PCI通道和地址空间。这给那些与网络设备紧密相关的软件带来不少麻烦,因此可以把26个端口设计成26 个虚拟网络设备(VND)并编写其驱动程序。因此,SNMPD 和生成树协议软件所看到的是26 个虚拟网卡,和普通的网卡并无区别。

    结语

    本文采用波分多址(WDMA)实现的EPON系统,与同类产品相比较,有实现简单、性能好、易于升级、系统造价低的优势,已经在宽带接入网中获得重要应用。

 
 
三层以太网交换机CPU收发包问题的分析
 

摘要:三层以太网交换机发展迅速,一方面网络设备的带宽及交换容量大幅提升,另一方面设备所支持的协议种类也随着用户的需求不断增加。如何在大业务量的网络环境下确保各设备之间协议包的正常交互,是以太网交换机设计面临的重要问题。文章以基于ASIC的三层以太网交换机为例,从CPU负载、软硬件队列配置、CPU和交换芯片的通信机制等方面入手,讨论并分析在多进程环境中与CPU收发包功能相关的一些典型问题,得到解决办法。解决方法对于网络处理器(NP)同样适用。

关键词:三层以太网交换机 CPU 中断 轮询 直接存储器存取 队列调度

在当前的三层以太网交换设备中,报文的二层交换和三层路由主要由交换芯片和网络处理器完成,CPU基本上不参与交换和路由过程,主要完成管理和控制交换芯片的功能[1]。

在这种情况下,CPU的负载主要来自以下几个方面:协议的定时驱动、用户的配置驱动、外部事件的驱动。其中,外部事件的驱动最为随机,无法预料。典型的外部事件包括端口的连接/断开(Up/Down),媒体访问控制(MAC)地址消息的上报(包括学习、老化、迁移等),CPU通过直接存储器存取(DMA)收到包,CPU通过DMA发包等。

在以上所列的外部事件中,又以CPU通过DMA收到包之后的处理最为复杂。因为数据包由低层上送到上层软件时,各协议的处理动作千差万别,可能会涉及到发包、端口操作、批量的表操作等。所以,只有处理好CPU的收发包的相关问题,才能使相关的上层协议正常交互,从而使交换机稳定、高效地运行。

1 可能涉及到的问题

以下就CPU收发包可能涉及的各个方面分别说明。

下面的分析都基于典型的CPU收发包机制:CPU端口分队列,通过DMA接收,采用环形队列等。

1.1 CPU的负载与收包节奏控制

根据交换机处理数据包的能力,决定单位时间上送到CPU的包的个数;决定了单位时间上送多少个包给CPU后,再考虑上送数据包的节奏。

假设通过评估,确定了单位时间上送CPU数据包的上限,例如每秒x个数据包。

图1

图1给出了两种典型的处理手段:匀速上报CPU、突发(Burst)方式上报CPU,下面分别分析一下这两种方式的优劣:

(1)匀速上报CPU

数据包匀速上报CPU时,对CPU队列的冲击较小,而且对CPU队列的缓冲能力要求不高,CPU队列不必做得很大。

(2)突发(Burst)方式上报CPU

交换芯片(采用ASIC)一侧的硬件接收队列和DMA内存空间中的环形队列,一起赋予了交换机一定的缓冲能力(针对上送CPU的数据包)。利用这个缓冲能力,我们可以把控制周期适当放长,并设定控制的粒度(单位控制周期内CPU收报个数的上限),采用类似于电路中负反馈的机制动态地使能和关闭CPU收包功能。这样就在宏观上实现了对数据包上送CPU速率的控制。另外,如果交换芯片(采用ASIC)支持基于令牌桶算法的CPU端口出方向流量监管或整形功能[2-3],且监管或整形的最小阈值可以满足CPU限速的需要,则可以利用这个功能控制数据包上送CPU的节奏,减小CPU的负载。这样软件的处理就简化了很多。

1.2 CPU端口队列的长度规划

如果仅考虑交换机CPU端口的缓冲能力,CPU端口队列当然是越长越好,但是必须兼顾对其他功能以及性能的影响。针对不同的ASIC芯片,需要具体问题具体分析。

1.3 零拷贝

零拷贝是指在整个数据包的处理过程中,使用指针做参数,不进行整个数据包的拷贝。这样可以大大提高CPU的处理效率。

使用零拷贝后,会一定程度上降低软件处理的灵活性,我们会面临到这样的问题:如果协议栈需要更改一个数据包的内容,会直接在接收缓存(buffer)上修改,但是如果需要在数据包中删除或添加字段(例如添加或删除一层标签(tag)),即数据包的长度需要变化时,应该如何处理。

添加或删除字段,必然会导致数据包头一侧或包尾一侧的位置发生移动,如果包尾一侧移动,问题比较简单,只要数据包总长度不超过buffer边界即可。由于通常此类操作都靠近包头的位置,如果包头一侧移动,效率会比较高,所以协议栈在处理时可能更倾向于在包头一侧移动,这时就需要驱动在分配buffer时做一些处理:

(1)接收数据包时,头指针不能指向buffer边界,需要向后偏移一定裕量,同时单个buffer的大小也必须兼顾到最大传送单元(MTU)和该裕量。

(2)释放数据包时buffer首指针需要作归一化处理(如图2所示)。

图2

1.4 中断/轮询

目前交换机涉及到的外部中断主要由交换芯片产生,交换芯片主要的外部中断包括DMA操作(如收到包、发包结束、新地址消息等等)和一些出错消息。如果中断请求过于频繁,中断服务程序(ISR)和其他进程之间频繁地上下文切换会消耗大量CPU时间。如果有持续大量的中断请求,CPU会始终处于繁忙状态,各种协议得不到足够的调度时间,从而导致协议状态机超时等严重故障。

为了避免事件触发频率不可控的问题,可以使用轮询机制,通常的做法是用CPU定时器触发原先由外部中断触发的ISR,由于定时器触发的间隔是固定的,所以ISR执行的频率得到了控制,避免了上述的问题。

轮询和外部中断相比,只是节奏可控(外部中断的节奏取决于外部事件发生的频率,CPU不可控)。但是,轮询也有其不可避免的缺点——响应慢。不能满足某些实时性要求较高的功能。另外,人们会发现用ping命令检测交换机3层接口大包时,使用轮询方式的交换机比使用中断方式的交换机的时延明显要大。

如果能通过某种机制,避免持续、大量的中断请求,则既可以保证CPU不会过于繁忙,又保留了中断实时处理的优点。

典型的会产生大量中断事件的行为是CPU接收数据包和MAC地址消息上报。以收包为例,在前面“CPU负载与收包节奏控制”部分提到的Burst方式就是根据实时的流量,控制接收DMA的开关,这样就达到了使中断源受控的目的,这种类似负反馈的机制可以很好的避免持续的中断事件上报CPU。

总之,轮询控制简单,但实时性较差;中断实时性好,但是使所有的中断源受控有一定难度。在系统初始设计阶段,我们需要综合考虑需求以及芯片对外部事件的处理方式,来决定采用中断或者轮询方式,或者两者兼用。

1.5 多进程环境中外部事件的处理机制

常见的外部事件(中断事件)包括收到包、包发送完(这里指的都是CPU收发包),包括收到MAC地址消息、MAC表操作完成等。

如果把各类中断事件的处理放在一个进程里,就人为地造成了各个事件耦合性增强,增加了各种事件相互制约的机会。

在多任务操作系统中,为了能更灵活地处理各个事件,减少事件之间的子相互制约关系,各种事件应当尽可能地单独起进程,或者根据处理方式的不同划分为几个进程,至少用单个进程来处理是不合适的。

1.6 协议包保护和CPU保护

对于基于ASIC的交换机,协议包保护是指利用ASIC芯片的某些机制,把特定的协议包指定到特定的端口队列上去,保证其经DMA队列上送CPU的优先级;CPU保护是指尽量减少不必要的数据包对CPU的冲击。

实现协议包保护的必要条件:

(1)CPU端口必需支持严格优先级(SP)或者带权重的罗宾环(WRR)的调度算法。

(2)交换芯片必需具有较强的流分类能力,且可以给不同的流指定不同的端口队列。

在系统方案设计时我们需要兼顾对协议报文的保护和对CPU的保护,应该尽量做到:

(1)保证CPU收包通道和发包通道的畅通。

(2)精确匹配,按需选取。充分利用ASIC芯片的访问控制列表(ACL)功能,尽量精确地匹配各类协议报文。必要时需要匹配到4层字段[4]。

实现以上几点时,应兼顾其他功能及整机性能的限制。

1.7 效率降低的避免

在多任务操作系统中,各种事件需要用尽量短的时间片处理完成,以保证其他任务有足够的机会得到调度。所以我们在调用任何函数时都要考虑其执行效率。除了算法本身会影响执行效率之外,频繁地访问某些硬件也相当耗时,而这一点往往容易被忽略。

2 结束语

随着以太网相关技术的发展,交换芯片和网络处理器的处理能力不断被提升;相比之下,数据交换设备中CPU处理性能的提升程度远远不及交换芯片和网络处理器;同时数据交换设备支持的业务种类也在不断增加,对CPU承载的业务量也有了更高的要求。在这种情况下,交换设备容量以及支持业务种类的大幅提升和有限的CPU资源之间的矛盾会日益凸显。因此,做好CPU和交换芯片以及网络处理器接口的缓冲管理、队列调度以及流量监管,合理利用CPU资源,是保证数据交换设备安全、稳定运行的前提,也是目前及将来数据交换设备开发的重要课题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多