版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高速IP网络流量测量系统的设计与实现王风宇1,2,云晓春1,3,申伟东41(中国科学院 计算技术研究所 信息智能与信息安全研究中心,北京 100080)2(中国科学院 研究生院,北京 100039)3(哈尔滨工业大学 计算机网络与信息安全技术研究中心, 黑龙江 哈尔滨 150001)4(西安交通大学,电子与信息工程学院, 陕西 西安710049)摘要:网络流量测量是网络流量分析建模的基础,也是网络性能监测的主要方法。不断提高的网络带宽,使网络流量测量面临很大的困难。本文在分析传统网络流量测量系统存在的问题的基础上,采用零拷贝分组捕获和裸设备存储(零拷贝存储)等关键技术,设计并实现了一个被动式网
2、络流量测量系统,使系统性能得到大幅提高,并具有较好的时间精确度。关键词:网络流量测量;分组捕获;零拷贝;裸设备;TSC(Timestamp Counter)时间戳Design and Implementation of a High-speed Network Traffic Measurement System Wang Feng-Yu* *, Yun Xiao-Chun* *, Shen Wei-Dong*(Research Center of Information Intelligent and Information Security, Institute of Computing
3、Technology, Chinese Academy of Sciences, Beijing 100080)*(Graduate University of Chinese Academy of Science, Beijing 100039)*(Research Center of Computer Network and Information Security Technology, Harbin Institute of Technology, Harbin,150001)*(Institute of Electronic and information Engineering,
4、Xian Jiaotong University, Xian 710049)Abstract Through analyzing the problems of traditional network traffic measurement system, a passive network traffic measurement system is designed based on zero-copy packet capture, raw device storage and so on. The performance and the precision of network traf
5、fic measurement are improved greatly. This system is suitable for the traffic measurement of 1Gb/s network. Keyword network traffic measurement; packet capture; zero copy; raw device; TSC(Timestamp Counter)1. 引言Internet的服务类型不断增多,业务量成倍增长,对网络服务质量的要求也越来越高,好的服务质量依赖于网络的规划设计,以及运行时的控制和调整,而这些都要以真实网络流量的测量和分析
6、为基础。网络流量测量在网络规划、故障诊断、应用与协议性能等方面都有重要意义。当前大部分被动网络流量测量软件解决方案是基于UNIX/LINUX提供的Libpcap库,Libpcap是一个与实现无关的访问操作系统所提供的分组捕获机制的分组捕获函数库,广泛应用的网络监听程序TCPDUMP就是在它基础上开发的。操作系统所提供的分组捕获机制主要有三种:BPF (BSD分组过滤器)1,DLPI(数据链路提供程序接口),及Linux下的SOCK_PACKET类型套接口,它们的实现机制基本类似。但这一类型的已有测量工具在性能方面有一定的局限性,一方面由于分组传输过程中一些关键通信路径(如系统调用,内存数据拷贝
7、等)的存在,导致Libpcap平台本身效率不高;另一方面,带宽的提高,对流量数据的时间精确度及存储速率和空间也提出了更高的要求。清华大学针对Libpcap的性能问题作了一些改进2,但由于测量目的不同,其中还是存在一些影响性能的因素。基于这种状况,很多研究机构致力于基于硬件设备的流量测量系统,把数据采集和时间戳等部分功能集中在专用捕包卡上34。基于硬件的解决方案具有很好的性能和时间精确度,但是这类方案与软件解决方案相比成本高、难以发布、灵活性不好。如何在有限的硬件支持下,解决传统网络流量测量中存在的关键问题,提高流量测量系统的性能,是我们的主要目标。本文第二部分分析了高速网络流量测量中存在的问题
8、,并给出了相应的解决方案,包括基于零拷贝的分组捕获平台、裸设备存储方案以及基于TSC计数器的硬件时钟等;第三部分在千兆网络环境对该系统进行了测试评估;最后对网络流量测量系统作了总结。2. 高速IP流量测量系统设计被动网络流量测量包括三个基本处理/传输环节,首先数据从网卡传送到应用程序空间;然后进行字段提取及在线统计;最后传送到到存储设备。其中第一和第三个环节是整个系统的关键所在,处理不好,就会成为整个系统的瓶颈。通过分析可知,在高速网络流量测量中面临的的几个关键问题是:分组捕获的效率;高精度时间的获取;突发流量缓冲;高速数据存储。我们在分析和解决这些问题的基础上,设计了基于双零拷贝的高速网络流
9、量测量系统DZC-TMS(Double Zero-Copy Traffic Measurement System),系统的设计和实现是基于Linux操作系统的,系统模型如图1所示,下面小节分别对各个部分加以说明。图1. 基于双零拷贝的高速网络流量测量系统模型2.1 基于零拷贝的分组捕获平台在传统的流量测量工具中,数据从网卡到应用程序空间的过程多数是基于类似Libpcap的分组捕获模型实现的。这种分组捕获模型如图2(a)所示(内核部分我们以BPF为例1)。在这种模型中数据传输是通过操作系统内核来完成的,网络分组到达后,首先以DMA方式传送到内核缓冲区,并发出硬中断,网卡驱动在硬中断处理程序中把到
10、达的分组提交给BPF分组过滤器,经分组过滤器经过滤后才到达用户空间,其中存在很多影响系统性能的因素:数据分组通过单分组驱动机制从内核空间向用户空间传送,效率不高;用户进程频繁的系统调用,消耗大量的资源;处理过程中经过了从网卡到内核缓冲区,再从BPF拷贝到用户空间缓冲区的过程,内存拷贝操作要消耗大量的CPU周期和内存资源。为了提高高速网络环境下分组捕获的性能,有必要减少分组传输过程的中间环节、减少或消除数据拷贝次数。由此我们设计了零拷贝分组捕获方案56,其模型如图2(b)所示。零拷贝的基本思想是:数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,降低CPU在这方面的负载
11、。实现零拷贝用到的最主要技术是DMA数据传输、缓冲区访问同步以及内存区域映射技术。零拷贝分组捕获方案主要由三个部分组成:用户网络接口UNI、内核代理模块、网卡驱动程序。用户网络接口处于用户空间,用户网络接口UNI类似于Libpcap接口,封装了底层通信的实现细节,通过对用户网络接口UNI的访问,应用进程能够实现与网络硬件接口之间的零拷贝传输。其他两部分位于系统空间,内核代理负责用户空间的虚拟地址和内核空间物理地址转换,并创建缓冲区管理队列;网卡驱动程序则通过和内核代理的交互修改缓冲区队列状态,通知分组的到达,并获取DMA操作所需的存储区的物理地址,提供给DMA进行网络分组传输。 (a). 传统
12、分组捕获模型(b). 零拷贝分组捕获模型图2. 两种分组捕获过程的比较用户缓冲区和网络接口之间分组的零拷贝传输是通过网络接口DMA方式来实现的。由于用户进程使用的是虚拟内存地址,而网络接口直接使用内核提供的物理地址,在应用程序缓冲区和网络接口之间使用DMA传输必须解决用户缓冲区的虚拟地址到物理地址的转换问题。我们在应用进程空间静态分配一块连续的页对齐的内存作为用户数据缓冲区,把用户数据缓冲区分为2KB的块,因为在Linux系统中页大小是4KB,存放数据分组的数据块又要大于一个MTU(最大传输单元),这样每页只放2个数据分组,保证了一个数据分组不会跨越两个页,方便了DMA操作。用户进程向内核代理
13、通告用户数据缓冲区的起始虚拟地址和缓冲区大小。Linux操作系统为每个进程维护了一个三级页表,以实现虚拟地址到物理地址的转换。内核代理利用该三级页表完成虚拟地址页到物理地址页的转换并将物理页面锁定于内存中。我们建立了一个地址映射表AddrMapTable,用于存储虚拟地址页和物理地址页之间的对应关系,这个地址映射表覆盖了所有用于分组传输的用户缓冲块的物理地址。传统工作方式下,网卡通过硬中断方式通知分组的到达。然而中断响应的代价很高,在高速网络下,频繁的中断会使操作系统自陷在中断响应中,形成活锁。文献7中实现了一种半轮询机制,在大流量情况下使用软中断轮询机制,否则使用硬中断机制,使效率得到了很大
14、提高。由于流量测量还要考虑分组到达时间的精确度,我们在这个基础上作了修改,采用纯轮询机制。零拷贝分组捕获中分组的传输过程如下:在应用进程空间静态分配用户数据缓冲区,向内核代理通告用户数据缓冲区的起始虚拟地址和缓冲区大小。内核代理模块建立了两个环形队列用来管理数据缓冲区,接收队列RecBusyQ和接收空闲队列RecFreeQ。每个队列都包含了指向用户缓冲区数据块的索引。分组到达网络接口卡时,直接以DMA方式存储到用户空间缓冲区,然后发出硬中断。在硬中断响应开始,关闭网卡硬中断,通过软中断进入轮询操作,如果接收了新的分组,则往接收队列添加分组索引,并从空闲队列取得空闲数据块索引,然后通过地址映射表
15、AddrMapTable找到对应的数据块物理地址,提供给网卡驱动程序供以后DMA使用。接收队列、接收空闲队列以及地址映射表放在连续的内存空间,然后通过内存映射技术使应用程序也能够访问。当到达的分组达到一定数量,唤醒应用进程,应用进程从接收队列获得数据块索引,得到用户缓冲区地址,当处理完索引指向的分组后将其添加到接收空闲队列。从内核空间到用户空间的批量分组传送,减少了用户进程的系统调用和状态切换。2.2基于TSC(Timestamp Counter)的时间戳分组到达的时间精确度对于流量分析具有重要意义,不论时间间隔分布,还是相关系数分析,都需要分组到达的精确的时间,否则会影响流量分析和建模的准确
16、性。基于硬件的测量系统在捕包卡上添加了时间戳功能48,效果比较理想,但成本较高,灵活性不好。Linux操作系统提供的时间函数gettimeofday()最多能够达到微秒级的时间精确度,TCPDump程序就是通过这种方法取得的分组到达时间,但这种方法系统调用过程比较复杂。这里我们借助Intel处理器中的TSC计数器来获得时间戳,开机时TSC的记数器清零,然后在每个处理器时钟周期都完成一次自增,因此它的精密程度近乎CPU时钟频率。这个计数器使用一个64位的寄存器来存储,它的长度可以允许2GHz的处理器连续使用292年而不溢出。这种方法需要特定的模式支持并且与处理器的速度有关,但通过这个方法可以有效
17、解决时间戳的精确度,而且由于直接访问寄存器,减少了系统调用环节,还可以最大程度的减小对系统性能的影响。虽然TSC可以依CPU状况提供精确到纳秒级的时间,由于网卡的缓存,以及中断响应时间具有不确定性,实际应用中精确度不高。为了最大程度的提高时间精确度,我们放弃了中断和轮询相结合的半轮询机制,采用了内核全轮询机制,在轮询获知分组到达时添加时间戳,这样在软件部分得知分组到达的第一时间加入时间戳。同时,我们在Linux下采用了实时操作系统内核模块RTLinux,保证了轮询进程的高优先级别,确保了对网卡轮询的精确性。2.3 基于裸设备的存储方案提取所需要的数据以后,接下来的问题就是如何把数据存储到硬盘。
18、广域网网络流量具有自相似特征,也就是说在不同的时间尺度上存在突发性9,如果没有缓冲措施平抑高峰流量的到达,硬盘存储速率难以满足要求。我们采取了循环缓冲方案,网络数据采集程序和存储程序分处不同的线程,放弃了阻塞进程的同步方式,当循环缓冲区满时,丢弃新到的包,这样可以防止不必要的阻塞影响系统整体性能。相比于总线速度和内存速度,硬盘存储速度要低得多,是流量测量的主要瓶颈。有了内存的缓冲作用,这里可以不考虑网络流量峰值,只要求达到平均速度。根据需求的不同,网络流量测量只存储IP包的一部分字段,随着存储字段的增加,对硬盘存储速度的要求也就提高。DZC-TMS系统中,每个IP分组我们存储48字节(20字节
19、IP头+20字节TCP头+8字节时间戳)。DZC-TMS采用基于裸设备(raw device)的存储方案。裸设备是没有建立文件系统的设备,是一种特殊字符设备。在Linux下,把裸设备绑定到块设备(例如磁盘),就可以像访问块设备一样对裸设备进行读写操作了。但不同的是,在文件系统方式下,数据首先从用户空间复制到内核空间,然后通过DMA执行I/O操作,而在裸设备方式下数据不再复制到内核空间,而是DMA直接操作用户缓冲区的数据,所以裸设备的访问是零拷贝I/O。由于裸设备的I/O操作包括对用户进程存储区的直接硬件访问,要求用户进程存储区要从一个块的起始地址开始,最简单的方法就是通过Linux下的函数调用
20、valloc()来分配从块的起始地址开始的缓冲区,同时要求存储区的大小是块的大小的倍数。由于使用裸设备避免了经过Linux文件系统层,数据直接在磁盘和应用程序之间进行传输,所以在磁盘读写非常频繁,以至于磁盘读写成为系统瓶颈的情况下,采用裸设备可以大大提高磁盘访问速度。由于裸设备使用的是原始分区,没有采用文件系统的管理方式,Linux维护文件系统的开销也都没有了,这也能够有效减少CPU和内存的消耗。为了对裸设备的性能加以验证,我们使用CPU主频1.7G,内存为128MB的微机,在同一块硬盘上对裸设备和Linux文件系统管理下的文件作同样的写操作,连续写入1GB数据,结果对比如表-1所示,裸设备无
21、论在速率还是资源占用上,都有优势,当然裸设备同时也带来了管理和操作上的困难,但在特定系统中,这是次要的。Linux文件系统裸设备写入速率(MB/sec) 占用CPU百分比(%)20.83 11.57526.323.375表1. 裸设备与Linux文件系统写入性能对比3. 系统性能测试系统测试环境的配置为:双CPU-P2.0G;4G内存;RedHat Linux 7.2-smp5操作系统 + RTLinux内核模块;Intel Pro 1000千兆以太网卡;Ultra160-SCSI硬盘。为了对测试结果加以量化,我们用Router Tester作为发包机,控制分组长度和发包速度,在不同分组长度条
22、件下,提高发包速度,记录发生丢包之前达到的最高发包速度。同时作为比较,我们用传统的Libpcap和Linux文件系统替换了零拷贝分组捕获和裸设备存储,做了同样的测试,测试结果如图3所示,DZC-TMS系统的最高测量速度随着分组长度的增加,快速提高,当分组长度为512字节时最高测量速率就可以达到约950Mb/s,此后基本不再有提高;而基于Libpcap和文件系统的流量测量系统的最高测量速度随着分组长度的增加提高不大,没有超过250Mb/s。DZC-TMS流量测量系统在总体性能上远远高于传统的流量测量方法。图3. 两种流量测量系统的性能对比在现有测试条件下,系统的瓶颈位于分组捕获部分,也就是说在达
23、到最高测量速度时,在分组捕获部分首先出现丢包现象。我们在实际网络中采用旁路监听方式采集了电信及教育网千兆网络出口的流量,系统运行稳定,没有出现丢包的现象,完全能够满足千兆网络的流量测量需求。前面部分我们介绍了基于TSC时间戳可以达到纳秒级精确度,这里我们通过实验分析其执行性能以及网络分组到达的时间精确度。我们测试了TSC时间获取和通过系统调用gettimeofday()获取时间的效率,在现有测试条件下,执行一次gettimeofday()所用的时间大约是520ns,而执行TSC时间获取所用的时间大约是32ns,二者的性能差别是明显的。由于使用了SMP(Symmetric Multi-Proce
24、ssor)系统和实时操作系统模块RTLinux,任务分派到不同的CPU,而且设置分组轮询进程为高优先级,所以进程调度对时间精确度影响可以控制在微秒级。由于网络流量研究一般是在一定的时间尺度范围内的10,所以微秒级的时间精确度基本能够满足千兆网测量需求。4. 结束语本文在分析传统网络流量测量方法所存在的问题的基础上,设计并实现了基于双零拷贝的网络流量测量系统DZC-TMS,使流量测量系统的性能得到极大提高,能够满足千兆网络的流量测量需求。当然,本系统还存在一些局限性。由于软件方案的限制,本系统在分组到达时间戳上的精确度还不够高,这个问题只能在硬件层次解决。要测量更高带宽的流量,除了采用性能更高的
25、计算机系统以外,分组捕获和存储系统之一必然成为整个测量系统中的瓶颈,如果存储系统成为瓶颈,则可以采用RAID0技术提高存储速度,甚至可以设计一个并行存储系统,通过局域网把存储任务分配到多台计算机;如果分组捕获成为瓶颈,则需要把网络流量分流到不同的测量系统。当然这些都需要比较高的成本。在高速网络流量测量中采用适当采样和压缩技术而又不丢失流量特征,将会极大缓解带宽提高带来的压力,是下一步重点研究的方向。网络带宽不断提高,网络流量测量的难度会越来越大,而网络性能的提高会越来越和网络流量的研究紧密结合,网络流量测量技术需要持续的研究和提高。参考文献:1 S. McCanne and V. Jacobs
26、on. The BSD packet filter: A new architecture. for user-level packet capture,” In: Proc of USENIX Winter Conf, Jan 1993. 259269,.2 李志春,张辉,有悦等. 高速主干网测量系统的设计与实现. 计算机工程,2003. 29(1): 53-553 J. Cleary, S. Donnelly, I. Graham, A. McGregor, M. Pearson. Design Principles for Accurate Passive measurement, In: Passive and Active Meas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 伤害调解协议书范本
- 2024年铜门制安合同协议书
- 借款合同范本-天津市私产房屋交易资金代收代付协议
- 混凝土购销合同
- 质押借款合同格式规范
- 房产融资协议模板
- 2024年技术开发合作协议
- 文言文虚词“之、而、其、已”的用法及专项练习(讲义)-人教部编版(一起)语文九年级(上册)
- 统编版语文三年级上册第四单元习作 续编故事(讲义)
- 热销产品代理协议样本
- 新版中国食物成分表
- 《智能锁具设计》课件
- 嵌入式操作系统FreeRTOS的原理与现
- 电商岗位职责及关键流程发布
- 高三一轮复习-工业革命
- 小学生怎样正确使用电子产品
- 土方工程施工进度计划制定
- 云南省情概况
- 快递物流行业培训资料
- 小学科学教学仪器配备标准
- 小儿抽动症的护理查房
评论
0/150
提交评论