多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究_第1页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究_第2页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究_第3页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究_第4页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、承诺安全承诺安全 承诺非凡承诺非凡 多核cpu下基于pf_ring和设备轮询 机制的高性能包捕获技术研究 中心:北京分公司 部门:研发部 姓名:齐战胜 1 美亚柏科美亚柏科 股票代码:300188 内容提要 自我介绍 技术背景 理论知识 解决方案 参考资料 2 美亚柏科美亚柏科 股票代码:300188 1 自我介绍 齐战胜,研发部,北京分公司,软件研发工程师 主要做协议分析、还原。参与的项目有抽查工具 、nf-7800、nf-9300、nf-9600等。 为了解决nf-7800的千兆抓包问题,开始研究 linux下高性能抓包的解决方法。 3 美亚柏科美亚柏科 股票代码:300188 2 技术背

2、景 被动数据捕获技术在网络安全领域有着极其丰 富的应用。 如ids(入侵检测系统)、防火墙以及 一些部署在网络出口的互联网内容分析系统等。 随着网络带宽的增加,网络传输速率的提高, 传统的数据包捕获技术越来越不能满足要求。本 文从linux/unix平台下的libpcap网络数据包捕获 函数库入手,研究linux/unix平台下高性能的数据 包捕获解决方案。 4 美亚柏科美亚柏科 股票代码:300188 3 理论知识 libpcap简介 1)libpcap简介 2)libpcap工作机制 3)libpcap抓包性能分 析 napi技术简介 1)napi技术简介 2)napi工作机制 3)nap

3、i的性能分析 5 美亚柏科美亚柏科 股票代码:300188 3.1 libpcap简介 3.1.1 libpcap简介 libpcap是 unix/linux 平台下的网络数据包捕获的 函数库。它是一个独立于系统的用户层包捕获 api 接口, 为底层网络监听提供了一个可移植的框架。 应用:sniffer、wireshark、snort、tcpdump等。 6 美亚柏科美亚柏科 股票代码:300188 3.1.1 libpcap简介 libpcap特点 1)可从以太网、虚拟接口等一个或多个网络接口 捕获数据包; 2)平台无关性; 3) 具有基于bpf的数据包过滤特性。 完善了系 统的数据包过滤体

4、系。 7 美亚柏科美亚柏科 股票代码:300188 3.1.2 libpcap工作机制 libpcap组成 libpcap主要由两部分组成: 网络分接头 (network tap) 和数据过滤器(packet filter)。 网络分接头从网络设备驱动程序中收集数据拷贝 , 数据过滤器决定是否接受该数据包。 8 美亚柏科美亚柏科 股票代码:300188 3.1.2 libpcap工作机制 libpcap捕包流程 libpcap的包捕获机制就是在数据链 路层加一个旁路处理。当一个数据包 到达网络接口时,libpcap首先利用 已经创建的socket从链路层驱动程序 中获得该数据包的拷贝,再通过t

5、ap 函数将数据包发给bpf过滤器。bpf 过滤器根据用户已经定义好的过滤规 则对数据包进行逐一匹配,匹配成功 则放入内核缓冲区(一次拷贝),并传 递给用户缓冲区(又一次拷贝),匹 配失败则直接丢弃。如果没有设置过 滤规则,所有数据包都将放入内核缓 冲区,并传递给用户层缓冲区。 9 美亚柏科美亚柏科 股票代码:300188 3.1.2 libpcap工作机制 程序框架 /* 第一步:查找可以捕获数据包的设备 */ device = pcap_lookupdev(errbuf); /* 第二步:创建捕获句柄,准备进行捕获 */ p = pcap_open_live(device, 8000, 1

6、, 500, errbuf); /* 第三步:如果用户设置了过滤条件,则编 译和安装过滤代码 */ pcap_compile(p, ; ) while(ptr = (char *)(pcap_next(p, /* 第五步:对捕获的数据进行类型转换, 转化成以太数据包类型 */ eth = (struct libnet_ethernet_hdr *)ptr; /* 第六步:对以太头部进行分析,判断所 包含的数据包类型,做进一步的处理 */ if(eth-ether_type = ntohs(ethertype_ip) if(eth-ether_type = ntohs(ethertype_arp

7、) /* 最后一步:关闭捕获句柄,一个简单技 巧是在程序初始化时增加信号处理函数, 以便在程序退出前执行本条代码 */ pcap_close(p); 10 美亚柏科美亚柏科 股票代码:300188 3.1.3 libpcap抓包性能分析 11 美亚柏科美亚柏科 股票代码:300188 3.1.4 libpcap抓包性能分析 高速复杂网络环境下libpcap丢包的原因主要有以 下两个方面: 1)cpu处于频繁中断状态,造成接收数据包效率低下。 我们可以假想一个场景,我们使用标准的 100m 网卡,可能实际 达到的接收速率为 80mbits/s,而此时数据包最大长度为 1500bytes ,则每秒

8、产生的中断数目为: 80m bits/s / (8 bits/byte * 1500 byte) = 6667 个中断 /s。 数据包最短长度为46bytes,则每秒产生的中断数目为: 80m bits/s / (8 bits/byte * 46 byte) = 217391 个中断 /s。 每秒 6667到217391个中断,对于系统是个很大的压力。 2)数据包被多次拷贝,浪费了大量时间和资源。从网卡驱动到内核 ,再从内核到用户空间。 12 美亚柏科美亚柏科 股票代码:300188 3.2 napi技术简介 3.2.1 napi技术简介 napi(new api) 是 linux 上采用的一

9、种提高网 络处理效率的技术,它的核心概念就是不采用中 断的方式读取数据,而代之以首先采用中断唤醒 数据接收的服务程序,然后 poll 的方法来轮询 数据。 13 美亚柏科美亚柏科 股票代码:300188 3.2.2 napi的工作机制 经过分析, 发现在复杂网络环境中, 丢包率上升的原因是在捕 包过程中, cpu一直处于接收中断状态, 而没有把时间用于处理数 据包的过程中来, 也就是进入了系统中断活锁状态。 利用napi技术的设备轮询机制可以成功解决这个问题,napi机 制的具体特点如下: ( 1) 当网卡接收到一个数据包, 便产生一个中断信号给系统; ( 2) 系统进行如下操作: 关闭网卡中

10、断(只是屏蔽了中断信号,网卡仍然可以接收数据包 到缓冲队列); 激活轮询进程, 对该网卡进行轮询(处理缓冲队列); 打开网卡中断(解除屏蔽中断信号)。 14 美亚柏科美亚柏科 股票代码:300188 3.2.2 napi的工作机制 15 美亚柏科美亚柏科 股票代码:300188 3.2.2 napi的工作机制 使用napi的先决条件 1)网卡设备有dma(direct memory access) 硬件,要支持 dma 的环形输入队列(也就是 ring_dma)。 2)在发送/接收数据包产生中断的时候有能力关 断 nic 中断的事件处理,并且在关断 nic 以后, 并不影响数据包接收到网络设备

11、的环形缓冲区( 以下简称 rx-ring)处理队列中。 3)有防止nic队列中排队的数据包冲突的能力。 16 美亚柏科美亚柏科 股票代码:300188 3.2.3 napi的性能分析 优点 napi技术的使用减少了中断的数目,让整个操作 系统不必花费太多的时间在中断现场的保护和恢 复上,以便把赢得的时间用来在我网络层上的处 理数据的传输,确实大幅度增强了数据包捕获能 力和系统响应速度。 17 美亚柏科美亚柏科 股票代码:300188 3.2.3 napi的性能分析 缺点 napi 存在一些比较严重的缺陷: 1)对于上层的应用程序而言,系统不能在每个数据包接 收到的时候都可以及时地去处理它,而且

12、随着传输速度增 加,累计的数据包将会耗费大量的内存,经过实验表明在 linux 平台上这个问题会比在 freebsd 上要严重一些; 2)另外一个问题是对于大的数据包处理比较困难,原因 是大的数据包传送到网络层上的时候耗费的时间比短数据 包长很多(即使是采用 dma 方式),所以正如前面所说 的那样,napi 技术适用于对高速率的短长度数据包的处 理。 18 美亚柏科美亚柏科 股票代码:300188 4 解决方案 pf_ring解决方案 pf_ring的tnapi的改进方案 pf_ring的dna的改进方案 pf_ring的安装使用 19 美亚柏科美亚柏科 股票代码:300188 4.1 pf

13、_ring解决方案 4.1.1 pf_ring简介 pf_ring是luca研究出来的基于linux内核级的 高效数据包捕获技术。pf_ring可以把从一个网 络接口抓到的数据包分发到多个cpu核心或者线程 中,以提高数据包处理能力。 20 美亚柏科美亚柏科 股票代码:300188 4.2 pf_ring工作机制 在大数据包的网络环境下, 设备轮询机制表现出了较 高的捕包能力, 但是在小包大流量的网络环境下, 设备 轮询机制虽然比libpcap的表现好了很多, 但依然难以达 到让人满意的程度。 经过进一步分析, 在数据包捕获的过程中, cpu的 多数时间都被用在把网卡接收到的数据包经过内核的数

14、据 结构队列发送到用户空间的过程中。 也就是说是从网卡 到内核, 再从内核到用户空间, 这两个步骤, 花去了大 量cpu时间, 而没有其他时间用来进行数据包的进一步 处理。 pf_ring技术解决了这个问题。 21 美亚柏科美亚柏科 股票代码:300188 4.1.2 pf_ring工作机制 pf_ring的逻辑结构如下图所示: pf_ring基本原理是将网卡接收 的数据包存储在一个环状缓存, 这也是为什么叫ring的原因,这 个环状缓存有两个接口,一个供 网卡向其中写数据包,另一个为 应用层程序提供读取数据包的接 口,读取数据包的接口通过mmap 函数(将一个文件或其它对象映 射进内存)实现

15、的。 22 美亚柏科美亚柏科 股票代码:300188 4.2 pf_ring工作机制 pf_ring优点 1)减少了内存拷贝次数 。 2) 可以把收到的数据 包分发到多个环形缓冲 区,供多线程应用程序 读取。 23 美亚柏科美亚柏科 股票代码:300188 4.2 pf_ring工作机制 3)支持集群功能。 pf-ring可以通过集群和平衡机制增加包捕获程序的 性能。这些机制允许应用程序只处理一部分数据包, 将其余数据包传送给其它集群。 24 美亚柏科美亚柏科 股票代码:300188 4.1.3 pf_ring工作模式 pf_ring有3中工作模式: pf_ring有三种透明模式(transp

16、arent_mode)。 为0时走的是linux标准的napi包处理流程; 为1时,包既走linux标准包处理流程,也copy给 pf_ring一份; 为2时,驱动只将包拷贝给pf_ring,内核则不会接 收到这些包,1和2模式需要pf_ring特殊的网卡驱 动的支持。 25 美亚柏科美亚柏科 股票代码:300188 4.1.3 pf_ring工作模式 模式0 26 美亚柏科美亚柏科 股票代码:300188 4.1.3 pf_ring工作模式 模式1和模式2 27 美亚柏科美亚柏科 股票代码:300188 4.1.4 pf_ring性能分析 i3 虚拟4核3.3ghz、rh 6.0系统、e10

17、00e网卡 28 美亚柏科美亚柏科 股票代码:300188 4.1.4 pf_ring性能分析 i3 虚拟4核3.3ghz 、rh 6.0系统、e1000e网卡 29 美亚柏科美亚柏科 股票代码:300188 4.1.4 pf_ring性能分析 双核1.86ghz、ubuntu server 9.10、e1000网卡 30 美亚柏科美亚柏科 股票代码:300188 4.1.4 pf_ring性能分析 双核1.86ghz、ubuntu server 9.10、igb网卡 31 美亚柏科美亚柏科 股票代码:300188 4.1.4 pf_ring性能分析 双核1.86ghz和xeon2.5ghz、

18、ixgbe万兆网卡 32 美亚柏科美亚柏科 股票代码:300188 4.1.5 pf_ring的不足之处 目前大部分网卡都支持msi-x技术,可以把传入 的rx队列分成几个rx队列,每个队列对应一个 cpu的核心。rss技术可以通过per-flow实现各 个rx队列间的负载均衡。这样的好处是可以充分 利用cpu的多核优势,提高对数据包的处理速度。 但是目前的pf_ring不能充分发挥这个优势。原 因分析如下: 33 美亚柏科美亚柏科 股票代码:300188 4.1.5 pf_ring的不足之处 驱动程序仍然需要依次轮询rx queue,而不能同时访问 所有的rx queue。操作系统需要把这些

19、rx队列河流到一 个接口供应用程序读取。当需要处理超大流量数据的时候 ,多核cpu的单核占用率很高,多核性能不能充分发挥。 34 美亚柏科美亚柏科 股票代码:300188 4.1.6 pf_ring支持的网络列表 broadcom系列 intel系列 1)e1000 2)e1000e 3)igb 4)ixgbe 35 美亚柏科美亚柏科 股票代码:300188 4.2 pf_ring的tnapi的改进方案 36 美亚柏科美亚柏科 股票代码:300188 4.2.1 pf_ring的tnapi的优势 tnapi优势 1)可以把流量分发到不同的核上,具有更好的扩展性。 2)能够同时第从每个rx队列轮

20、询数据从而提高数据包读 取性能。 3)通过pf_ring,可以实现用户态的每一个线程对应一个 rx队列,避免使用信号量。 pf_ring tnapi大概是pf_ring napi的2倍。在 core2duo 1.86 ghz下可以跑出2.8mpps(2g流量)的成 绩。 37 美亚柏科美亚柏科 股票代码:300188 4.2.3 pf_ring的tnapi支持的网卡列表 千兆 intel 82576芯片电口网卡有:e1g42et、 e1g44et2、e1g44et。 intel 82580芯片电口网卡有:e1g44ht。 intel 82575芯片电口网卡有:e1g44at2。 万兆 inte

21、l 82599芯片电口网卡:e10g42bt。 intel 82598芯片电口网卡:expx9501at、 e10g41at2、expx9502cx4。 38 美亚柏科美亚柏科 股票代码:300188 4.3 pf_ring的dna的改进方案 4.3.1 dna简介 pf_ring dna(direct nic access)通过把网 卡内存和寄存器直接映射到用户空间,这样就可 以不通过napi,直接利用nic npu(network process unit)从网卡拷贝数据包到dma 的环形缓 冲区。这样会降低cpu的利用率。缺点是一次只能 有一个应用程序可以打开dma的环形缓冲区,不 过现

22、在的网卡都支持多rx/tx队列,因此可以通 过启动多个应用程序,每个应用程序对应一个 rx/tx队列的方法来解决。 39 美亚柏科美亚柏科 股票代码:300188 4.3.2 dna的工作机制 40 美亚柏科美亚柏科 股票代码:300188 4.3.2 dna的性能分析 dna模式下,直接利用网卡处理单元进行数据包 的拷贝,降低了cpu的占用率。luca开发了 libzero dna 程序框架,即使在超大流量下, cpu的利用率也非常低。 由于dna模式下,不再使用napi poll,所以 pf_ring的数据包过滤功能就不支持了,目前 可以使用硬件层的数据包过滤,但只有intel的 8259

23、9网卡支持。 41 美亚柏科美亚柏科 股票代码:300188 4.3.3 pf_ring的dna支持的网卡列表 intel系列 1)e1000 2)e1000e 3)igb 4)ixgbe 42 美亚柏科美亚柏科 股票代码:300188 4.4 pf_ring安装使用 下载地址 最新版本5.4.5,下载网址 http:/ g/。 43 美亚柏科美亚柏科 股票代码:300188 4.4 pf_ring安装使用 目录结构 drivers/ drivers/broadcom/ drivers/intel/ drivers/myricom/ kernel/ 内核有关的补丁 userland/ 用户空间

24、代码 userland/lib 用户空间库用于控制pf_ring userland/libpcap-xxx-ring pf_ring支持的libpcap增强库 userland/examples/ 包计数应用(使用它作为测试使用) 44 美亚柏科美亚柏科 股票代码:300188 4.4 pf_ring安装使用 编译内核 解压缩pf_ring安装包,进入到kernel目录下编译和安装内核补丁。 # tar -zxf pf_ring-5.4.5.tar.gz # cd pf_ring-5.4.5/kernel # make # sudo make install 内核安装需要root用户权限 in

25、smod /kernel/pf_ring.ko transparent_mode=0|1|2 min_num_slots=xenable_tx_capture=1|0enable_ip_defrag=1|0q uick_mode=1|0 45 美亚柏科美亚柏科 股票代码:300188 4.4 pf_ring安装使用 编译用户空间pf_ring库 进入到用户空间库userland/lib下,编译和安装。 # cd ./userland/lib。 # ./configure # make # sodu make install # rpm -qa libpcap 查看安装的libpcap,如果有libpcap则强制卸载 # rpm -e libpcap -nodefs # cd ./libpcap # ./configure # make # sudo make install 46 美亚柏科美亚柏科 股票代码:300188 4.4 pf_ring安装使用 进入到userland/examples目录编译例子程序。 # cd /userland/examples # make # ./pfcount -i eth0 捕获eth0网口的数据报文 47 美亚柏科美亚柏科

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论