网络路由加速平台的设计与实现
2018-04-13赵爽李念军
赵爽 李念军
摘要:网络路由加速平台是一个基于多核处理器的软件平台,实现网络数据报文的快速接收、快速处理、快速输出转发。该软件平台运行在多核处理器上,采用混合模式,一个core运行Linux操作系统作为控制平面,其余的core运行SE做为数据处理平面。该软件平台充分利用了Linux和SE本身所具有的特点,既发挥了Linux系统化管理和调度的优势,又简化了代码的开发结构,提高了数据转发效率,使得平台处理得以加速,可以应用于基于多核处理器的路由器、SDN、防火墙和负载均衡等通信产品。
关键字:路由加速平台;Linux模式;SE模式;混合模式
中图分类号:TP393
文献标识码:A
1 引言
随着网络技术和计算机通讯技术的飞速发展,人们不仅对网络应用的多样性有了新的要求,而且对网络产品的处理性能也有了新的需求。这就对网络核心设备——路由器提出了全新的要求。一方面传输线路带宽的增长极大地推动了路由器性能的不断提升,以满足通信网络的高速需求;另一方面,多种业务集成的发展驱动着路由器具备更强的业务处理能力。目前针对网络数据处理的处理器主要有多核处理器、硬件并行处理器、可编程的硬件处理器[1,2]。其中,软件平台在多核处理器上的运行模式决定了软件实现模式,多核处理器支持三种模式[3],分别是全部Linux模式、全部SE模式和Linux与SE混合模式。
全部Linux模式是将多核处理器完全交给Linux操作系统进行管理,系统SMP支持多核处理器的调度工作[4,5],软件加速平台代码全部在Linux平台上通过进程的方式完成,表项资源的同步互斥由操作系统保证。上述方式同时存在运行的内核态和用户态的区别,从内核到用户态需要进行数据的拷贝。由于操作系统的特殊结构模式,在一定程度上影响了软件平台的运行效率。这种模式在中高端网络路由加速软件平台中很少被采用,在处理器核数较少的低端路由器中常被采用。
全部SE模式是让多核处理器完全运行SE的模式,它是一个轻量级的操作系统,具有高效的运行效率。SE上运行的代码需要开发者自行完成,表项的同步互斥也由软件平台实现,软件的处理流程由软件自身控制。但芯片接口和管理接口的数据收发驱动等全部需要软件平台维护,这会导致软件平台工作量有所增加。
针对上述问题,采用一种Linux与SE混合的模式,该模式让linux作为管理控制平面,对管理接口进行全面系统化管理,并引导SE在多核处理器上启动;SE上运行软件平台的流程处理代码,实现数据平面的数据加速转发,发挥其高效的运行特点。对比上述两种模式,混合模式具有两者相同的共性特点,具有与全SE几乎相当的执行效率,并拥有Linux开源的操作系统对芯片外部设备的统一化管理,选择混合模式是中高端路由加速平台最合理选择。
2 平台总体设计方案
网络路由加速平台运行在多核处理器上[6],并采用混合模式,一个core运行Linux操作系统,其余的core运行SE(多核处理器专用操作方式)做为数据处理平面,在core的分配上[7,8],也可以根据实际应用来调整,可以让多个core运行Linux操作系统,相应的减少运行SE模式的core数量。
软件主要分两个部分,一部分是运行在Linux平面的,主要负责调用命令向SE平面传递通道和命令管理,另外一部分是SE环境下运行的数据面相关软件模块,本软件平台的各开发模块主要集中在SE下的功能模块。
从系统结构中可知系统采用的Linux加SE的混合系统架构,充分利用了Linux和SE本身所具有的优势特点,在发挥了Linux系统化管理和调度的优势的同时,SE简化了代码的开发结构,提高了数据转发效率,使得平台处理得以加速。
运行在Linux平面的软件主要有:控制通道网络接口管理、接口报文向SE层报文格式转换、简单网络管理命令行、定时统计上报等。
SE环境下运行的模块主要有:IPv4/IPv6转发、IPSec、NAT、Tunnel、VLAN、VPN、 组播、ACL、Net-Flow、IPsec、PPPoE/L2TP以及安全模块等。
Linux平面与SE平面运行在不同的核上,两者之间的表项通过共享内存的方式获取[7],表项的实际创建和插删改的操作由SE完成,表项插删改的控制命令需要通过发送消息队列的方式从Linux上发送到SE上。
3 平台业务流程
对于软件平台业务流程有两个方面:一是从Linux平面来的配置命令下发和表项状态获取;二是SE平面对数据报文的接收、处理、输出的一连串业务处理流程。
3.1 Linux平面业务流程
配置命令从管理以太网接口进入Linux内核态,用户态通过socket[9,10]从内核态获取配置命令,如果属于Linux平面当前需要处理的命令,则直接对通过共享内存[11]读到的表项进行获取操作;如果是涉及插删改一系列写命令的操作,则需要通过发送消息队列的方式发送到SE平面。Linux平面同时负责对NetFlow表项数据统计和表项内容上报的工作业务,通过启用的进程定期对共享内存的表项进行循环轮询,统计表项数据结构并把统计结果通过socket发送到管理网口到上层,业务处理流程图如下图所示:
3.2 SE平面业务流程
数据报文[12]从接口进入SE平面,首先进行报文合法性校验、剥去报文二层头部、通过VLAN恢复报文的入接口、判断报文是否为IP报文还是非IP报文、对于非IP报文分别送入MPLS或PPPoE的处理模块、对于IP报文分别判断是否需要进行NetFlow的数据流统计、判断是否需要进行NAT转换、判断是否需要进行IPsec模块的处理、判断是否需要进行ACL的处理、对于组播报文进行组播报文模块的处理、对IP报文分IPv4和IPv6数据报文,分别送两个不同的协议栈中处理、处理过程中根据是否存在快表,如果存在则快速进行二层分装进行转发、如果不存在则进行普通转发处理流程,并构建快表项、出方向报文先后经过判断决定是否需要NAT转换、是否需要进行IPsec处理、是否需要进行ACL的处理、以及是否需要进行NetFlow的数據流统计功能、完成上述处理流程后报文被转发至输出接口。
4 关键技术设计与实现
4.1 高速流表转发
路由表在设计时采用两层的设计结构,简称“总表”和“流表”。在多核并行执行环境中,利用处理器的高速缓存,在Cache中申请与CPU核数相等(N)个数的空间来存放流表的空间块。每个“流表”内路由表项的集合构成了“总表”的一个子集,这些流表在路由初始化后随着数据流转发过程逐步建立。处理器的核每次接收到数据包,需要进行路由查找时,先去对应的流表中进行匹配,如果找到,则根据路由信息中的出端口将数据包直接进行转发;如果匹配不到,则再进入总表中查找,在总表中查找到路由后,将该条路由添加到子表中。
4.2 大容量ACL
大容量ACL的实现方法是将ACL的链表存储结构设成双向链表的方式,建立ACL中各表项之间的结构关系。这里将ACL的表项设计成两级结构是算法的特殊化处理,为算法的实现提供数据结构支撑。如下图所示:
多核处理器(Cores)对初次进入的数据流(Pl、P2' - Pj)进行流的划分,建立流表(Flow tables),同时查找合适的访问控制列表表项,建立流表与访问控制列表表项的关联;其中,多核处理器将接收到的数据流中的数据包(P)分发到各个空闲的核上,核抽取数据包中对应的条件字段进行哈希(Hash)运算,根据哈希值的不同将数据包划分到不同的流表中,每张流表中可以容纳3条Hash冲突的数据流单元(Entry),每个单元(Entry)结构中分别由有效位Valid、数据流条件字段Key、控制访问列表动作有效位Flag和控制访问列表动作结构体的指针Act。后续进入的数据流直接从流表表项中获取访问控制列表的执行动作。
4.3 多业务的实现
多核上的多业务是指增值业务(防火墙、NAT等)以嵌入的形式存在,数据处理过程中符合相关条件的数据包通过调用相关业务处理模块的钩子函数,来实现相关业务的功能。例如二层业务NAT的钩子函数定义为ipnet_natjnput,当消息进入时首先判断端口(in/out方向)是否使能NAT,若使能则调用钩子函数直接进入NAT处理模块,若未使能则继续往下处理。流程如下图所示:
5 实验测试
实验在高端路由器上进行,环境基于网络路由加速平台,实验仪表为Spirent Test Center,在路由器上配置相关功能,在仪表上查看数据转发相关情况。该结果表明网络路由加速平台能实现数据快速、高效的处理、转发和接收。
在仪表上查看数据收发情况,数据全部转发:
5 结束语
介绍了一种网络路由加速平台的实现方法,设计了该系统的总体架构,并对其平面业务流程进行了说明。目前,用户对网络通信设备的功能和处理速度的需求不断变化,怎么合理分配core的数量,发挥其高效的运行特点,以及在该软件平台上,灵活扩展软件功能以最大化地滿足用户需求,成为下一步研究的重点。
参考文献
[1]王鹏.基于网络处理器的高性能路由器转发面的设计与实现[D].成都:西南交通大学,2011.
[2]朱佳.网络路由仿真平台的设计与实现[D].武汉:华中科技大学,2007.
[3]王学龙.嵌入式Linux系统设计与应用[M].北京:清华大学出版,2001.
[4]张修琪.基于Linux多核进程调度的研究[D].成都:电子科技大学,2012
[5]黄道颖,张安琳.Linux系统对SMP并行处理的支持[J].郑州轻工业学院学报,2001,16 (4):26-30.
[6]叶永春,多核网络处理器驱动软件关键技术研究[D].西安电子科技大学,2010.
[7] 齐斌.网络处理器内核体系结构研究[D].西安:西北工业大学,2004.
[8]张宏科,苏伟,武勇.网络处理器原理与技术[M].北京邮电大学出版社,2004.
[9]王枫,罗家融.Linux下多线程Socket通讯的研究与应用[J].计算机工程与应用,2004,16:106-109.
[10]郭东升,田秀华.Linux环境下基于Socket的网络通信[J].软件导刊,2009,8(1):116-118.
[11]沈剑光,浅析Linux中的共享内存机制[J].中国科技信息,2006,15:146-149.
[12]王海涛,田畅,郑少仁.路由器并行交换体系结构的研究[J].数据通信,2001,7 (3):4-7.