共2条
1/1 1 跳转至页
如何在多核处理器(TILE64)上移植SNORT
Snort的TILE64移植
一、简述
本文分析了如何利用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. Snort的Packet 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
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |