多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究.ppt

上传人:za****8 文档编号:13208997 上传时间:2020-06-08 格式:PPT 页数:52 大小:1.02MB
返回 下载 相关 举报
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究.ppt_第1页
第1页 / 共52页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究.ppt_第2页
第2页 / 共52页
多核CPU下基于PFRING和设备轮询机制的高性能包捕获技术研究.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
多核CPU下基于PF_RING和设备轮询机制的高性能包捕获技术研究,中心:北京分公司部门:研发部姓名:齐战胜,1,内容提要,自我介绍技术背景理论知识解决方案参考资料,2,1自我介绍,齐战胜,研发部,北京分公司,软件研发工程师主要做协议分析、还原。参与的项目有抽查工具、NF-7800、NF-9300、NF-9600等。为了解决NF-7800的千兆抓包问题,开始研究Linux下高性能抓包的解决方法。,3,2技术背景,被动数据捕获技术在网络安全领域有着极其丰富的应用。如IDS(入侵检测系统)、防火墙以及一些部署在网络出口的互联网内容分析系统等。随着网络带宽的增加,网络传输速率的提高,传统的数据包捕获技术越来越不能满足要求。本文从Linux/Unix平台下的Libpcap网络数据包捕获函数库入手,研究Linux/Unix平台下高性能的数据包捕获解决方案。,4,3理论知识,Libpcap简介1)Libpcap简介2)Libpcap工作机制3)Libpcap抓包性能分析,NAPI技术简介1)NAPI技术简介2)NAPI工作机制3)NAPI的性能分析,5,3.1Libpcap简介,3.1.1Libpcap简介Libpcap是Unix/Linux平台下的网络数据包捕获的函数库。它是一个独立于系统的用户层包捕获API接口,为底层网络监听提供了一个可移植的框架。应用:Sniffer、Wireshark、Snort、Tcpdump等。,6,3.1.1LibPcap简介,LibPcap特点1)可从以太网、虚拟接口等一个或多个网络接口捕获数据包;2)平台无关性;3)具有基于BPF的数据包过滤特性。完善了系统的数据包过滤体系。,7,3.1.2Libpcap工作机制,Libpcap组成Libpcap主要由两部分组成:网络分接头(NetworkTap)和数据过滤器(PacketFilter)。网络分接头从网络设备驱动程序中收集数据拷贝,数据过滤器决定是否接受该数据包。,8,3.1.2Libpcap工作机制,Libpcap捕包流程libpcap的包捕获机制就是在数据链路层加一个旁路处理。当一个数据包到达网络接口时,libpcap首先利用已经创建的Socket从链路层驱动程序中获得该数据包的拷贝,再通过Tap函数将数据包发给BPF过滤器。BPF过滤器根据用户已经定义好的过滤规则对数据包进行逐一匹配,匹配成功则放入内核缓冲区(一次拷贝),并传递给用户缓冲区(又一次拷贝),匹配失败则直接丢弃。如果没有设置过滤规则,所有数据包都将放入内核缓冲区,并传递给用户层缓冲区。,9,3.1.2Libpcap工作机制,程序框架/*第一步:查找可以捕获数据包的设备*/device=pcap_lookupdev(errbuf);/*第二步:创建捕获句柄,准备进行捕获*/p=pcap_open_live(device,8000,1,500,errbuf);/*第三步:如果用户设置了过滤条件,则编译和安装过滤代码*/pcap_compile(p,/*第五步:对捕获的数据进行类型转换,转化成以太数据包类型*/eth=(structlibnet_ethernet_hdr*)ptr;/*第六步:对以太头部进行分析,判断所包含的数据包类型,做进一步的处理*/if(eth-ether_type=ntohs(ETHERTYPE_IP)if(eth-ether_type=ntohs(ETHERTYPE_ARP)/*最后一步:关闭捕获句柄,一个简单技巧是在程序初始化时增加信号处理函数,以便在程序退出前执行本条代码*/pcap_close(p);,10,3.1.3Libpcap抓包性能分析,11,3.1.4Libpcap抓包性能分析,高速复杂网络环境下libpcap丢包的原因主要有以下两个方面:1)Cpu处于频繁中断状态,造成接收数据包效率低下。我们可以假想一个场景,我们使用标准的100M网卡,可能实际达到的接收速率为80MBits/s,而此时数据包最大长度为1500Bytes,则每秒产生的中断数目为:80Mbits/s/(8Bits/Byte*1500Byte)=6667个中断/s。数据包最短长度为46Bytes,则每秒产生的中断数目为:80Mbits/s/(8Bits/Byte*46Byte)=217391个中断/s。每秒6667到217391个中断,对于系统是个很大的压力。2)数据包被多次拷贝,浪费了大量时间和资源。从网卡驱动到内核,再从内核到用户空间。,12,3.2NAPI技术简介,3.2.1NAPI技术简介NAPI(NewAPI)是Linux上采用的一种提高网络处理效率的技术,它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后POLL的方法来轮询数据。,13,3.2.2NAPI的工作机制,经过分析,发现在复杂网络环境中,丢包率上升的原因是在捕包过程中,CPU一直处于接收中断状态,而没有把时间用于处理数据包的过程中来,也就是进入了系统中断活锁状态。利用NAPI技术的设备轮询机制可以成功解决这个问题,NAPI机制的具体特点如下:(1)当网卡接收到一个数据包,便产生一个中断信号给系统;(2)系统进行如下操作:关闭网卡中断(只是屏蔽了中断信号,网卡仍然可以接收数据包到缓冲队列);激活轮询进程,对该网卡进行轮询(处理缓冲队列);打开网卡中断(解除屏蔽中断信号)。,14,3.2.2NAPI的工作机制,15,3.2.2NAPI的工作机制,使用NAPI的先决条件1)网卡设备有DMA(DirectMemoryAccess)硬件,要支持DMA的环形输入队列(也就是ring_dma)。2)在发送/接收数据包产生中断的时候有能力关断NIC中断的事件处理,并且在关断NIC以后,并不影响数据包接收到网络设备的环形缓冲区(以下简称rx-ring)处理队列中。3)有防止NIC队列中排队的数据包冲突的能力。,16,3.2.3NAPI的性能分析,优点NAPI技术的使用减少了中断的数目,让整个操作系统不必花费太多的时间在中断现场的保护和恢复上,以便把赢得的时间用来在我网络层上的处理数据的传输,确实大幅度增强了数据包捕获能力和系统响应速度。,17,3.2.3NAPI的性能分析,缺点NAPI存在一些比较严重的缺陷:1)对于上层的应用程序而言,系统不能在每个数据包接收到的时候都可以及时地去处理它,而且随着传输速度增加,累计的数据包将会耗费大量的内存,经过实验表明在Linux平台上这个问题会比在FreeBSD上要严重一些;2)另外一个问题是对于大的数据包处理比较困难,原因是大的数据包传送到网络层上的时候耗费的时间比短数据包长很多(即使是采用DMA方式),所以正如前面所说的那样,NAPI技术适用于对高速率的短长度数据包的处理。,18,4解决方案,PF_RING解决方案PF_RING的TNAPI的改进方案PF_RING的DNA的改进方案PF_RING的安装使用,19,4.1PF_RING解决方案,4.1.1PF_RING简介PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。PF_RING可以把从一个网络接口抓到的数据包分发到多个cpu核心或者线程中,以提高数据包处理能力。,20,4.2PF_RING工作机制,在大数据包的网络环境下,设备轮询机制表现出了较高的捕包能力,但是在小包大流量的网络环境下,设备轮询机制虽然比Libpcap的表现好了很多,但依然难以达到让人满意的程度。经过进一步分析,在数据包捕获的过程中,CPU的多数时间都被用在把网卡接收到的数据包经过内核的数据结构队列发送到用户空间的过程中。也就是说是从网卡到内核,再从内核到用户空间,这两个步骤,花去了大量CPU时间,而没有其他时间用来进行数据包的进一步处理。PF_RING技术解决了这个问题。,21,4.1.2PF_RING工作机制,PF_RING的逻辑结构如下图所示:,PF_RING基本原理是将网卡接收的数据包存储在一个环状缓存,这也是为什么叫RING的原因,这个环状缓存有两个接口,一个供网卡向其中写数据包,另一个为应用层程序提供读取数据包的接口,读取数据包的接口通过mmap函数(将一个文件或其它对象映射进内存)实现的。,22,4.2PF_RING工作机制,PF_RING优点1)减少了内存拷贝次数。2)可以把收到的数据包分发到多个环形缓冲区,供多线程应用程序读取。,23,4.2PF_RING工作机制,3)支持集群功能。PF-RING可以通过集群和平衡机制增加包捕获程序的性能。这些机制允许应用程序只处理一部分数据包,将其余数据包传送给其它集群。,24,4.1.3PF_RING工作模式,PF_RING有3中工作模式:pf_ring有三种透明模式(transparent_mode)。为0时走的是Linux标准的NAPI包处理流程;为1时,包既走Linux标准包处理流程,也copy给pf_ring一份;为2时,驱动只将包拷贝给pf_ring,内核则不会接收到这些包,1和2模式需要pf_ring特殊的网卡驱动的支持。,25,4.1.3PF_RING工作模式,模式0,26,4.1.3PF_RING工作模式,模式1和模式2,27,4.1.4PF_RING性能分析,I3虚拟4核3.3GHz、RH6.0系统、e1000e网卡,28,4.1.4PF_RING性能分析,I3虚拟4核3.3GHz、RH6.0系统、e1000e网卡,29,4.1.4PF_RING性能分析,双核1.86GHz、UbuntuServer9.10、e1000网卡,30,4.1.4PF_RING性能分析,双核1.86GHz、UbuntuServer9.10、igb网卡,31,4.1.4PF_RING性能分析,双核1.86GHz和Xeon2.5GHz、ixgbe万兆网卡,32,4.1.5PF_RING的不足之处,目前大部分网卡都支持MSI-X技术,可以把传入的RX队列分成几个RX队列,每个队列对应一个CPU的核心。RSS技术可以通过per-flow实现各个RX队列间的负载均衡。这样的好处是可以充分利用cpu的多核优势,提高对数据包的处理速度。但是目前的PF_RING不能充分发挥这个优势。原因分析如下:,33,4.1.5PF_RING的不足之处,驱动程序仍然需要依次轮询RXQueue,而不能同时访问所有的RXQueue。操作系统需要把这些RX队列河流到一个接口供应用程序读取。当需要处理超大流量数据的时候,多核CPU的单核占用率很高,多核性能不能充分发挥。,34,4.1.6PF_RING支持的网络列表,Broadcom系列Intel系列1)e10002)e1000e3)igb4)ixgbe,35,4.2PF_RING的TNAPI的改进方案,36,4.2.1PF_RING的TNAPI的优势,TNAPI优势1)可以把流量分发到不同的核上,具有更好的扩展性。2)能够同时第从每个RX队列轮询数据从而提高数据包读取性能。3)通过PF_RING,可以实现用户态的每一个线程对应一个RX队列,避免使用信号量。PF_RINGTNAPI大概是PF_RINGNAPI的2倍。在Core2Duo1.86GHz下可以跑出2.8Mpps(2G流量)的成绩。,37,4.2.3PF_RING的TNAPI支持的网卡列表,千兆Intel82576芯片电口网卡有:E1G42ET、E1G44ET2、E1G44ET。Intel82580芯片电口网卡有:E1G44HT。Intel82575芯片电口网卡有:E1G44AT2。万兆Intel82599芯片电口网卡:E10G42BT。Intel82598芯片电口网卡:EXPX9501AT、E10G41AT2、EXPX9502CX4。,38,4.3PF_RING的DNA的改进方案,4.3.1DNA简介PF_RINGDNA(DirectNICAccess)通过把网卡内存和寄存器直接映射到用户空间,这样就可以不通过NAPI,直接利用NICNPU(NetworkProcessUnit)从网卡拷贝数据包到DMA的环形缓冲区。这样会降低cpu的利用率。缺点是一次只能有一个应用程序可以打开DMA的环形缓冲区,不过现在的网卡都支持多RX/TX队列,因此可以通过启动多个应用程序,每个应用程序对应一个RX/TX队列的方法来解决。,39,4.3.2DNA的工作机制,40,4.3.2DNA的性能分析,DNA模式下,直接利用网卡处理单元进行数据包的拷贝,降低了CPU的占用率。Luca开发了LibzeroDNA程序框架,即使在超大流量下,CPU的利用率也非常低。由于DNA模式下,不再使用NAPIPoll,所以PF_RING的数据包过滤功能就不支持了,目前可以使用硬件层的数据包过滤,但只有intel的82599网卡支持。,41,4.3.3PF_RING的DNA支持的网卡列表,Intel系列1)e10002)e1000e3)igb4)ixgbe,42,4.4PF_RING安装使用,下载地址最新版本5.4.5,下载网址,43,4.4PF_RING安装使用,目录结构Drivers/Drivers/Broadcom/Drivers/Intel/Drivers/myricom/Kernel/内核有关的补丁Userland/用户空间代码Userland/lib用户空间库用于控制PF_RINGUserland/libpcap-xxx-ringPF_RING支持的Libpcap增强库Userland/examples/包计数应用(使用它作为测试使用),44,4.4PF_RING安装使用,编译内核解压缩PF_RING安装包,进入到Kernel目录下编译和安装内核补丁。#tar-zxfPF_RING-5.4.5.tar.gz#cdPF_RING-5.4.5/kernel#make#sudomakeinstall内核安装需要root用户权限insmod/kernel/pf_ring.kotransparent_mode=0|1|2min_num_slots=xenable_tx_capture=1|0enable_ip_defrag=1|0quick_mode=1|0,45,4.4PF_RING安装使用,编译用户空间PF_RING库进入到用户空间库userland/lib下,编译和安装。#cd./userland/lib。#./configure#make#sodumakeinstall#rpm-qalibpcap查看安装的libpcap,如果有libpcap则强制卸载#rpm-elibpcap-nodefs#cd./libpcap#./configure#make#sudomakeinstall,46,4.4PF_RING安装使用,进入到userland/examples目录编译例子程序。#cd/userland/examples#make#./pfcount-ieth0捕获eth0网口的数据报文,47,4.4PF_RING安装使用,编译网卡驱动编译网卡驱动之前,需要把原来的网卡驱动卸载掉。进入到drivers目录下,根据ethtool-iethx命令查看的网卡类型和驱动进入指定的目录进行编译和安装。#cd././drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src/#make#sodumakeinstall开始安装驱动,进入/lib/modules/kernel/net目录,可以看到有pf_ring目录,进入到该目录下进行PF_RING模块的安装。#soduinsmodpf_ring.kotransparent_mode=1,48,4.4PF_RING安装使用,安装网卡驱动,进入到目录lib/modules/kernel/drivers/net下进行网卡驱动安装。#soduinsmode1000e.ko#sodumodprobee1000e(只能载入/lib/modules/中模块),49,4.4PF_RING安装使用,PF_RING的使用使用用户空间中的PF_RING库API来编写代码,并且使用用户空间中的libpfring.a和libpcap.a编译代码就可以使用PF_RING来提高包捕获的性能。,50,5参考资料,http:/www.ntop.org/products/pf_ringLinux系统中基于PF_RING套接字的高性能包捕获技术Linux平台下基于Intel千兆网卡的零拷贝技术的研究与实现Libpcap数据包捕获机制剖析与研究linux内核下数据包的捕获与分析PF_RINGUsersGuide,51,6Q&A,问and答,52,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!