这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何在多核处理器(TILE64)上移植SNORT

共2条 1/1 1 跳转至

如何在多核处理器(TILE64)上移植SNORT

菜鸟
2009-06-15 17:59:49     打赏
SnortTILE64移植   一、简述 本文分析了如何利用Tilera的高速I/O库netio以及并行处理库ilib把Snort快速到TILE64上,以支持更大带宽的入侵检测。 二、TILE64 TILE64是Tilera公司于2007年发布的着眼于嵌入式应用的高性能通用CPU: 从图中可以看出TILE64由64个主频工作在700~866的独立的核构成,每一个独立的核称为一个Tile,所有这些Tile由每个Tile中的Switch Engine连接组成一个8x8的Mesh网络,从而实现Tile之间的高速通信。 TILE64外围的高性能接口包括两个10GE(XAUI)、两个GE、以及两个4-Lane的PCIe。对于这个高速接口Tilera已经提供了完整的驱动以及用户库,从而构成一个完整的开发平台而不是单纯的CPU芯片。在TILE64上直接和硬件打交道的是每个Tile上独立的Hypervisor层;在这之前是统一的一个Supervisor层,目前是SMP Linux。 对于10GE/GE接口,Tilera平台在Hypervisor中提供了一个跑在专门的Tile上的IPP驱动(Input Packet Process)来完成高速数据包的处理。下面是数据包从接口流入芯片之后的处理过程: 在实际环境中,往往会有多个Worker Tile来进行分流以处理高速接口的处理。IPP根据用户的配置可以进行流的分类,如是Round-Robin,把处理流均匀地分配到各Tile上;或根据L2/L3/L4包头进行分类,保留把同一个流分配到同一个Tile上。另外IPP也实现了Load Balance的功能,根据用户配置可以把不同的流均匀地分配到不同的Tile上进行处理。 三、Snort Snort是开源的轻量级NIDS/IPS,通过rule-driven language来控制,综合了signature,、protocol 及anomaly based入侵检测方式。Snort的创始人创建了Sourcefire公司,在Snort的基础上开发出一款高性能的NIDS/IPS系统;另外有许多其它的商业产品也是基于Snort开发的。这使得Snort成为目前事实上的行业标准。 Snort的构架清晰而灵活,由以下几部分组成: 上图可以看到,Snort是模块化设计,移植的话往往只考虑其中特定的模块即可。向TILE64移植的方案在我们讲完并行设计之后综合Tilera的库来完成方案设计。 四、并行设计 并行设计通常有两种分解方式: 1.       Functional Decomposition。通常也叫Pipeline,把一个功能的整个过程分解为不同的步骤,每一个步骤由不同的CPU完成,一个完全之后交给下一个处理: 2.       Data Decomposition。这种方式一般是把需要处理的数据划分为不同的部分,交给处理过程完全相同的进程独立地处理: 而实际环境中往往并不会采用单一模型,而可能是两种方式混合出来的,通常也叫Hybrid Decomposition: 五、Snort的TILE64移植方案 Snort的跨平台性做得很好,能运行于多种不同的操作系统如Linux、Windows、FreeBSD等。TILE64的平台中已经提供了SMP Linux,所以很容易就实现交叉编译在上面运行基于Linux协议栈的Snort。但这样移植的Snort是不能发挥TILE64的高速I/O以及多核的优势的。 首先我们先介绍移植中会用的Tilera的开发平台中提供的两个库: netio——用于高速网络数据包处理的库。它利用Hypervisor的IPP驱动直接绕过Linux协议栈把二层数据包提取到用户空间,实现了零拷贝的特性。 ilib——用于并行设计的库。封装了多进程的相关处理,可以灵活地把进程位于指定的Tile之上从而最大化地利用I/O接口和核间网络;同时也提供了利用核间网络进行进程间高速通信的接口。   根据前面所述Snort的结构分析以及并行设计思想,利用下述方案就可以简单地把Snort移植到TILE64平台上: 1.       SnortPacket Capture部分是基于libpcap设计的,我们不采用修改Snort中使用libpcap的部分,而是利用netio来实现libpcap的一个子集(称为stub)来灵活地完成从传统基于协议栈的抓包到高速netio库的切换。 2.       采用Data Decomposition方式来实现多进程并行处理。在数据可划分的情况下数据分解比较简单,只是简单地启动几个并行的进程针对不同的处理进行相同的处理,程序基本上不需要修改。数据的分解利用IPP驱动的分流和Load Balance机制,直接把数据流均匀地分配到不同的Snort进程中进行检测。   下面是简单移植的Demo的数据流图: 到现在为止,我们已经简单地把Snort移植到了TILE64平台上。但要最大化性能,还有许多值得进一步优化的地方: 1.       不同的检测耗时不同,只靠IPP的简单分流会导致有些进程很慢而有些比较空闲,并且处理过于复杂会导致ICache Miss增加,因此需要对Snort的整个处理流程进行Functional Decomposition,划分出Pileline来,所以最终的系统应该是基于Hybrid Decomposition的。 2.       大流量的Output部分也是要考虑优化的。目前只是简单地基于日志文件,如果记录量很大时需要考虑用高速I/O记录到外部专门的存储服务器上。 3.       利用Profiling找出效率的关键进进行重点优化,有些地方考虑使用专用指令(ArchLib)来提高速度。 4.       找一个实际的环境利用编译器的Feed Back优化,通过自动采集和分析执行过程的处理来优化编译的结果,进一步提高速度。  



关键词: 何在     多核     处理器     TILE64     移植     SNORT    

院士
2009-06-16 10:54:30     打赏
2楼

图呢?


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]