杜 超, 陈济民(华北计算技术研究所专装技术研发部,北京100083)
随着微电子技术的发展,芯片的集成度越来越高,片上系统(SoC)的发展已经是必然趋势。SoC具有可扩展性好,成本低,设计周期短,可靠性高,功耗低等优点。SoC也为各种网络产品的研发提供了新的思路[1-4]。由于SoC具有良好的可重配置性,可很方便地更改配置和属性,利用该技术设计出的产品具有很好的灵活性和安全性。在没有引入统一的路由控制机制以及没有统一的TCP/IP协议支持的测控网中连通性差、灵活性弱,这就使网络应用模式受到限制,更无法支持各种上层应用。本文介绍一种基于SoC及IP核技术的专用嵌入式网关的设计与实现,以实现在HDLC链路上进行IP分组的传输并和以太网实现路由交换,可有效地解决广域测控网的互连互通性,并且系统的设计也可以方便部署各种上层应用。
网关以一个Xilinx Virtex-4 Fx100芯片[5-7]为核心,自主开发了所需的系列IP核,并设计相应的外围电路。XilinxVirtex-4 Fx100芯片内部有两个PowerPC 405 CPU核(分别称为PPC/01和PPC/02)和4个以太网MAC核。2个PowerPC处理器核分别承担着不同的工作。其中,PPC/01主要负责路由信息的维护,以及与用户的交互;PPC/02主要负责调度交换结构在各端口之间转发IP包,实现ARP协议,维护映射表,并且负责查找转发表和映射表。一个正确的数据包的处理过程如图1所示。
进入系统的链路层帧被 MAC/HDLC输入输出处理部件剥去链路层头,进行正确性校验,正确的包放入输入端口的相应缓冲区,并向PPC/02发出接收完成中断,请求PPC/02处理。校验错误或者输入缓冲区满导致阻塞时,接收端口将校验错误的IP头和一部分负载放入输入端ICMP缓冲区,并产生中断来通知PPC/02处理。
对于输入的IP包,PPC/02收到中断信号之后,会查找转发表,找到下一跳的IP地址和输出端口号;然后查找映射表,查找下一跳的MAC地址,查找到的目的MAC地址被放入输出端口的寄存器内。然后PPC/02调度交换部件执行交换,把IP包交换到相应的输出端口。输出端口将此IP包和目的MAC地址一起组装成链路层数据帧发送出去。
图1 系统工作原理
如果这个IP包是送往本网关的RIP协议数据包,就通过交换结构把数据包交换PPC/01的输入缓冲区,然后通过中断告诉PPC/01有数据到达,PPC/01收到中断后从自己的输入缓冲区中读取数据报,并根据RIP包来维护路由信息。
对于输入的ARP包,PPC/02要么根据ARP包的内容来更新映射表,要么生成ARP响应包,放入输出端口的相应缓冲区,由输出端口发送出去。
用户则通过PPC/01提供的人机交互接口,对网关的相关参数进行配置,也可以获取网关运行的状态信息。
系统划分为8个模块:PPC/01处理器,PPC/02处理器,MAC端口部件,HDLC端口部件,快速交换部件,转发引擎部件,地址映射部件和双机通信部件,如图2所示。图中的Port_PPC01和Port_PPC02分别代表PPC/01和PPC/02的输入/输出缓冲区。这两个缓冲区是交换结构和两个CPU核之间交换数据的通路。各模块功能简述如下:
(1)PPC/01。PPC/01上运行Linux操作系统和Zebra路由软件,负责建立和维护路由表,转发表以及配置管理工作。PPC/01也分析PPC/02通过双机通信送来的状态信息,并根据状态信息的含义进行必要的处理,比如被通知从端口 Port_PPC01的接收缓冲区中读取数据。另外,它提供一个人机交互接口,使用户可以在静态、动态运行的条件下对网关进行配置。各种上层应用也可以部署在PPC/01上。
(2)PPC/02。PPC/02运行Xilkernel微内核操作系统,负责对输入的包进行分析,根据包的类型和目的地址来调度交换结构,将包交换到合适的目的端口。PPC/02也负责实现ARP协议,维护映射表。
(3)MAC端口部件。有4个MAC端口部件。MAC端口对外直接连接到以太网,对内与交换结构连接。它是以太网数据帧输入输出的硬件实现部分。它把接收到的以太网帧进行处理,放入合适的输入缓冲区,也负责把输出缓冲区中的IP包装配成帧发送出去。
(4)HDLC端口部件。有4个HDLC端口部件。HDLC端口是一个简化HDLC收发端口,实现的功能和MAC端口类似,负责HDLC帧的收发。
(5)快速交换部件。快速交换部件是整个系统数据流动的中心部件。主要职责是将各个端口输入缓冲区内的IP分组快速地交换到正确的目的端口的输出缓冲区。快速交换部件采用总线式交换,它所交换的数据都是IP包,即第三层交换。
图2 系统硬件结构
(6)转发引擎部件。转发引擎部件的功能是根据输入的目的IP地址得到其最长匹配目的网络地址或目的主机IP地址在路由表中的索引。
(7)地址映射部件。地址映射部件根据输入的下一跳IP地址得到匹配的MAC地址。
(8)双机通信部件。双机通信部件负责实现两个CPU核之间的通信,在两个CPU核之间交换控制和状态信息。双机通信由两部分组成,共享存储器和中断控制器。两个处理器都通过它们的OCM总线连接到一个双口RAM,共享存储器被划分成两个单向缓冲区,两个CPU核分别只对其中一个可写,对另一个可读。每个处理器都有一个中断接口,通过中断告知对方有数据到达,或者向对方请求数据。
按照系统的功能划分,软件的结构也分为 PPC/01和PPC/02两部分,如图3所示。PPC/01上运行着系统支撑子系统,配置管理子系统和路由子系统。PPC/02上运行转发子系统。各子系统的功能如下:
(1)转发子系统。转发子系统在Xilkernel微内核操作系统上实现,主要职责是负责包的快速转发,调度交换结构在各端口之间交换IP包。主要包括管理控制模块、IP协议处理模块、ARP协议处理模块、ICMP协议处理模块,双机通信模块以及各驱动模块。
(2)系统支撑子系统。系统支撑子系统运行在嵌入式Linux操作系统上,它为路由子系统和配置管理子系统提供了一个平台,并且也是其它各种应用部署的平台。支撑子系统是PPC/01与系统其它部分协调和交互的桥梁,支撑子系统向上连接路由子系统,向下与转发子系统连接,实现 PPC/01与PPC/02的通信。为了把网关的硬件结构和Linux操作系统融合起来,需要对Linux的TCP/IP协议栈进行改造,后面会介绍。
(3)路由子系统。路由子系统负责维护路由表,并根据路由表来更新转发表。
(4)配置管理子系统。配置管理子系统是网关运行过程中用户对其进行配置和管理的接口。用户可以通过配置管理子系统来添加、删除静态路由,调整路径的Metric值,选择路由协议等,还可以通过配置管理子系统获得系统运行的状态信息,以及各种统计信息。
上面提到的MAC端口部件,HDLC端口部件,快速交换部件,转发引擎部件,地址映射部件和双机通信部件,在本系统中均采用了IP核技术进行实现,IP核是系统研发的核心,也是整个系统的基石,IP核设计的好坏直接影响到整个系统的集成、调试工作。另外,系统支撑子系统需要对Linux TCP/IP协议栈进行改造,也是系统实现的难点之一。
HDLCIP核负责HDLC帧的收发。接收时,HDLCIP核把输入的帧去掉链路层头部之后,放进IP分组输入缓冲区,对IP分组首部进行校验、TTL-1、首部校验错的IP分组丢弃、首部的再校验、并将校验结果重写入校验和字段,然后向PPC/02发出中断请求,通知PPC/02将此IP包交换到其它端口;发送过程则不需要程序的干预,IP分组输出缓冲区中的IP包被硬件自动装配成帧发送出去。
HDLCIP核由端口缓冲结构和HDLC收发器组成。端口缓冲结构对数据进行缓冲,按照协议对数据的流向进行控制,完成与交换结构和程序的交互。HDLC端口的缓冲区包括:HDLC帧输入/输出缓冲区,IP分组交换输入/输出缓冲区,IP分组首部缓冲区,输入/输出端ICMP分组缓冲区。HDLC收发器为单通道收发器,它主要由发送模块、接收模块和控制模块组成。HDLC收发器以全双工方式工作。
图3 系统软件结构
通过链路协议IP核的设计,实现了具有自主知识产权的HDLC协议控制器,并进行了优化处理,提高了其实时性和抗干扰能力。
快速交换IP核的作用就是根据转发子系统分析出的IP分组转发结果,快速完成IP分组从输入端口到输出端口的移动。
快速交换IP核主要由输入队列、输出队列、交换选路结构和调度器组成,如图4所示。其中的关键部件为调度器和交换选路结构。
调度器采用状态机设计方法和适当的调度算法,是整个交换结构数据交换的控制枢纽,它负责根据各个输入、输出端口的状态和所有数据通路的状态,做出正确、高效、公平的决策,调度每个端口的各个输入IP分组如何快速的通过交换结构到达输出端口。交换选路结构则是根据调度器的调度命令具体的完成各个IP分组的快速交换。通过快速交换IP核的设计,实现了一个以交换结构为中心的数据分组交换平台,可以在其之上快速方便地衍生出更多或功能更复杂的设计,为今后的产品设计奠定了基础。
Linux TCP/IP协议栈改造是实现系统支撑子系统的关键内容。Linux是开放源代码的操作系统,Linux TCP/IP协议栈本身的功能是很成熟强大的[8-15],功能十分全面。通过对协议栈进行改造,然后重新编译内核,来得到实际需要的协议栈。
Linux TCP/IP协议栈的包处理分为4层:链路层(以太网帧)→网络层(IP包)→传输层(TCP,UDP包)→应用层。需要改造的部分在链路层和网络层,传输层以上则不需要修改。
对于链路层的改造是由于 PPC/01物理上是通过 Port_PPC01端口收发数据的,而Port_PPC01端口与交换结构相连,交换结构交换的都是IP包,所以PPC/01收发的也都是IP包。这与Linux TCP/IP协议栈原本进出的都是链路层帧是完全不一样的。需要把Linux TCP/IP协议栈的链路层替换成实际的链路层。由于PPC/01负责维护路由信息,所以它必须得了解网关的输入输出端口,通过建立8个虚拟网络设备,来与物理上的4个MAC端口和4个HDLC端口相对应,可以把底层的端口映射到操作系统内核。这8个虚拟网络设备逻辑上相当于链路层,但实际上,它们收发的是IP包。对虚拟网络设备编写的驱动程序实际上是操作Port_PPC01端口进行数据收发。
对于IP层的改造主要基于执行效率的考虑,剪掉不需要执行的代码。比如,PPC/01没有邻居的概念,不需要处理ARP包,这些都是由PPC/02来实现的;PPC/01也不转发数据包,它只通过交换结构那里收发RIP包,以及一些ICMP包。
使用网络分析仪Smartbit来对网关进行4项测试:最大包转发速率、背板交换能力、延迟和最大吞吐量。前3项的测试结果如表1所示。分别单独测试了转发子系统和背板的延迟。
分别单独测试了背板和转发子系统的最大吞吐量,得到的最大吞吐量和包长的关系如图5所示。
图5 最大吞吐量和包长的关系,x轴代表包长(字节),y轴代表最大吞吐量(百分比)
从上面的数据可以看出,网关的最大包转发速率达到了每秒7万包,基本满足了设计要求和应用环境的需要。整个系统的最大吞吐量受到了转发子系统的制约,所以提高转发子系统的运行效率是整个系统后期优化工作的一个重要方面。
基于SoC技术来时实现嵌入式网关系统是对SoC技术和嵌入式网关实现技术的探索。系统的功能模块划分本着软硬件协同设计的原则,尽量做到划分合理,针对本次设计的不足,可以在不对系统设计做出大的改变的情况下,对系统的模块进行升级,来提高系统的性能。后续工作除了优化现有模块的功能之外,还可以考虑加入安全模块,SNMP管理模块,以丰富网关的功能。
[1]XIONG Guang-ze,ZHAN Jin-yu.Survey on techniques of SoC hardware/software co-design[J].Journal of Computer Applications,2006,26(4):757-760.
[2]LI Dong-na,CAO Yang,ZHANG Qi,et al.Performance evaluation method ofmulti-task inSoC hardware/softwarecodesign[J].Application Research of Computers,2005,22(6):52-57.
[3]MIAOSheng,DAIGuang-zhong,LIU Hang,et al.Researchonintellectual property core protection in SoC design[J].Application Research of Computers,2007,24(2):113-115.
[4]李键,李鹏,张磊.基于SOPC的嵌入式系统设计技术[J].航空计算技术,2008,38(2):123-126.
[5]江崇科,黄智刚,张军,等.嵌入式网关的设计与实现[J].计算机工程与设计,2006,27(1):43-46.
[6]鲍兴川.TCP/IP通信技术在XilinxFPGA上的实现[J].水利水文自动化,2007(2):20-23.
[7]余红娟,潘松.FPGA技术的应用与发展[J].杭州电子科技大学学报,2006,26(3):17-20.
[8]XIE Chang-sheng,LIU Zhi-bing.Research on Linux memory management[J].Application Research of Computers,2005,22(3):58-60.
[9]lessandro Rubini.Linux device driver[M].2rd ed.USA:O'Reilly,2001.
[10]XU Hong-zhe,PENG Xiao-hui,LI Yue,et al.Research of a framework of embedded network protocol stack and its application[J].Journal of Computer Applications,2008,28(4):846-848.
[11]Christian Benvenuti.Understanding Linux network kernel[M].USA:O'Reilly,2005.
[12]WANG Xing-jie,LI Yun,JIANG Hao,et al.Research of embedded cross development technology based on Linux[J].Application Research of Computers,2008,25(1):206-209.
[13]陈年.嵌入式Linux设备驱动程序的构建方法[J].计算机科学,2006,33(12):172-174.
[14]LI Jin,GE Jing-guo.Analyses of mutual exclusion mechanism in Linux[J].Application Research of Computers,2005,22(8):72-75.
[15]JIANG Zhi-jian,YANG Wen-chao,WANG Wen-sheng.Realtime communication over ethernet based on Linux[J].Application Research of Computers,2005,22(2):222-224.