论文部分内容阅读
[摘要]本文分析基于Libpcap报文捕获系统的性能瓶颈-数据拷贝、中断处理,针对性能瓶颈提出了优化和改进捕包性能的方法。
[关键词]中断处理;数据拷贝
1.引言
在网络规模日益庞大的今天,报文捕获和分析技术作为网络管理和网络安全使用的关键技术正得到广泛的应用[1]。通过对捕获的报文进行分析,可以实时了解网络的使用状况,发现网络运行的瓶颈以及分析网络数据中携带的非法内容。在Linux系统中,广泛使用Libpcap(Packets Capture Library )[2]作为网络监测程序的基础库。
Libpcap是Packet Capture Library的缩写,由Berkeley大学Lawrence Berkeley National Laboratory研究院的Van Jacobson、CraigLeres和Steven McCanne编写,是Unix/Linux平台下的网络数据包捕获的函数库。它是一个独立于系统的用户层包捕获API接口,为底层网络监听提供了一个可移植的框架。
本文分析了传统基于Libpcap报文捕获系统的性能瓶颈--数据拷贝、中断处理[3,4,5],提出了优化和改进报文捕获系统性能的方法。
2.Libpcap性能分析
为了研究基于Libpcap报文捕获系统的性能瓶颈,我们抽象出报文捕获系统的性能模型如图1所示,包括用户态的Libpcap库和内核态的报文捕获引擎。
报文捕获系统的工作过程:(1)网卡接收数据包,通过DMA传送到主机并向主机发送硬件中断;(2)硬件中断程序将数据包转入链路层的接收核心队列并设置软中断标志;(3)软中断处理程序对数据包按协议分发,报文进入PF_Package队列;(4)用户态的检测程序(如TCPDUMP、SNIFFER)向内核发送系统调用;(5)系统调用服务程序将数据包拷贝到检测程序的用户态缓冲区中;(6)检测程序对数据进行分析处理。
图1 Libpcap报文捕获系统性能模型
通过对Libpcap性能模型工作过程的分析,我们得出Libpcap报文捕获系统性能瓶颈-数据拷贝开销和中断处理开销。
1.数据拷贝
数据拷贝操作的代价是昂贵的,主要有以下几点原因:(1)内存总线带宽有限,每次内存拷贝都要占用带宽;(2)每次拷贝操作都会消耗大量的CPU周期。通常,CPU都是逐字地将数据从源缓冲区移动到目的缓冲区。这意味着在拷贝操作过程中,CPU是不可利用的;(3)数据拷贝操作影响了系统cache性能。因为CPU通过cache访问主存,因此在拷贝操作之前cache中驻留的有用信息会被清空,然后被拷贝的数据所代替[3,5]。
2.中断处理开销
网络上每到达一个报文都会引起一次硬件中断(目前有的网卡也可以多个报文到达才产生一次中断),每次这样的中断会伴随一次上下文切换:从当前正在运行的进程切换到因为等待报文而阻塞的进程。上下文切换的开销往往很昂贵的,因为它需要保存和恢复相应的上下文,而且还会引发Cache失效带来性能损失[5]。
3.Libpcap性能优化
1.内核过滤机制
内核过滤就是在软中断处理程序中判断接受的数据是否是应用程序感兴趣的报文,如果是才将其复制到应用层的缓冲区内,否则就丢弃,这样可以大大降低系统处理的报文数量,从而提高捕包效率,但这种方式只对某些应用起作用,对于流量统计、常用协议分析等应用就不会起很大作用,因为这些应用往往要处理网络上绝大部分报文。
2.减少中断开销
采用NAPI技术[6]和设置网卡硬件中断阀值[7]来减少系统的中断开销。
NAPI是一种中断和轮询相结合的技术。中断在轻负载情况下能减少延迟,但在重负载情况下会引起活锁;轮询在重负载下效率很高,但在轻负载下却会增加延迟。NAPI结合了中断和轮询的优点,在轻负载下系统以中断方式工作,重负载下系统以轮询的方式工作。
在网卡硬件中设计中断阀值寄存器,控制网卡中断发送的时机,网卡硬件的DMA引擎接收(发送)了一定数量的报文后才置接收(发送)中断。这个固定的报文数量被称为接收(发送)中断阀值,通过设置网卡硬件的中断阀值,能够减少网卡中断次数。
3.采用零拷贝技术
从内核到应用的数据拷贝是捕包系统的主要性能瓶颈,采用零拷贝技术[4,5]能够解决该性能瓶颈。通过在内核添加处理模块来将用户缓冲区的虚拟地址转换为网卡可用的物理地址并锁定该地址,改进网卡驱动程序以获取用户缓冲区的物理地址并利用网卡异步DMA工作方式将数据包从网卡直接传送到用户空间,从而旁路操作系统内核协议栈,避免数据从内核空间到用户空间的拷贝。该方法能够大幅度的提高系统的捕包性能,甚至能够达到网卡的性能极限。
4、总结
报文捕获技术是网络性能监测、网络协议分析、网络入侵检测、防火墙等网络应用系统的基础。改进和提高报文捕获的效率是大流量网络环境下网络应用系统的重要研究内容。本文对现有报文捕获系统的捕包机制及其性能瓶颈进行了深入的分析,并在此基础上提出了优化和改进的措施,为下一步工作指明了方向:(1)采用零拷贝的报文捕获引擎;(2)采用NAPI技术降低网卡中断开销。
参考文献
[1]唐正军,李建华著,入侵检测技术,清华大学出版社,2004.
[2]W.Richard Stevens,TCP/IP Illustrated,Volume 1:The Protocols,2002.
[3]王佰玲,方滨兴.传统报文捕获平台性能影响因素分析[J].计算机工程与应用,2003,22:151-152
[4]杜英明.高速网络环境下基于零拷贝的报文捕获机制研究与实现[D].国防科技大学,2007
[5]唐勇,胡华平.高效报文捕获引擎FPC的研究与实现[J].计算机工程与科学,2006,28(5):27-29
[6]贾彩霞,吴秋峰.采用轮询机制提高Linux系统的网络性能[J].计算机工程与应用,2004,24:152-153
[7]戴斌.高速网络接口卡DMA机制的研究与实现[D].国防科技大学,2006
[关键词]中断处理;数据拷贝
1.引言
在网络规模日益庞大的今天,报文捕获和分析技术作为网络管理和网络安全使用的关键技术正得到广泛的应用[1]。通过对捕获的报文进行分析,可以实时了解网络的使用状况,发现网络运行的瓶颈以及分析网络数据中携带的非法内容。在Linux系统中,广泛使用Libpcap(Packets Capture Library )[2]作为网络监测程序的基础库。
Libpcap是Packet Capture Library的缩写,由Berkeley大学Lawrence Berkeley National Laboratory研究院的Van Jacobson、CraigLeres和Steven McCanne编写,是Unix/Linux平台下的网络数据包捕获的函数库。它是一个独立于系统的用户层包捕获API接口,为底层网络监听提供了一个可移植的框架。
本文分析了传统基于Libpcap报文捕获系统的性能瓶颈--数据拷贝、中断处理[3,4,5],提出了优化和改进报文捕获系统性能的方法。
2.Libpcap性能分析
为了研究基于Libpcap报文捕获系统的性能瓶颈,我们抽象出报文捕获系统的性能模型如图1所示,包括用户态的Libpcap库和内核态的报文捕获引擎。
报文捕获系统的工作过程:(1)网卡接收数据包,通过DMA传送到主机并向主机发送硬件中断;(2)硬件中断程序将数据包转入链路层的接收核心队列并设置软中断标志;(3)软中断处理程序对数据包按协议分发,报文进入PF_Package队列;(4)用户态的检测程序(如TCPDUMP、SNIFFER)向内核发送系统调用;(5)系统调用服务程序将数据包拷贝到检测程序的用户态缓冲区中;(6)检测程序对数据进行分析处理。
图1 Libpcap报文捕获系统性能模型
通过对Libpcap性能模型工作过程的分析,我们得出Libpcap报文捕获系统性能瓶颈-数据拷贝开销和中断处理开销。
1.数据拷贝
数据拷贝操作的代价是昂贵的,主要有以下几点原因:(1)内存总线带宽有限,每次内存拷贝都要占用带宽;(2)每次拷贝操作都会消耗大量的CPU周期。通常,CPU都是逐字地将数据从源缓冲区移动到目的缓冲区。这意味着在拷贝操作过程中,CPU是不可利用的;(3)数据拷贝操作影响了系统cache性能。因为CPU通过cache访问主存,因此在拷贝操作之前cache中驻留的有用信息会被清空,然后被拷贝的数据所代替[3,5]。
2.中断处理开销
网络上每到达一个报文都会引起一次硬件中断(目前有的网卡也可以多个报文到达才产生一次中断),每次这样的中断会伴随一次上下文切换:从当前正在运行的进程切换到因为等待报文而阻塞的进程。上下文切换的开销往往很昂贵的,因为它需要保存和恢复相应的上下文,而且还会引发Cache失效带来性能损失[5]。
3.Libpcap性能优化
1.内核过滤机制
内核过滤就是在软中断处理程序中判断接受的数据是否是应用程序感兴趣的报文,如果是才将其复制到应用层的缓冲区内,否则就丢弃,这样可以大大降低系统处理的报文数量,从而提高捕包效率,但这种方式只对某些应用起作用,对于流量统计、常用协议分析等应用就不会起很大作用,因为这些应用往往要处理网络上绝大部分报文。
2.减少中断开销
采用NAPI技术[6]和设置网卡硬件中断阀值[7]来减少系统的中断开销。
NAPI是一种中断和轮询相结合的技术。中断在轻负载情况下能减少延迟,但在重负载情况下会引起活锁;轮询在重负载下效率很高,但在轻负载下却会增加延迟。NAPI结合了中断和轮询的优点,在轻负载下系统以中断方式工作,重负载下系统以轮询的方式工作。
在网卡硬件中设计中断阀值寄存器,控制网卡中断发送的时机,网卡硬件的DMA引擎接收(发送)了一定数量的报文后才置接收(发送)中断。这个固定的报文数量被称为接收(发送)中断阀值,通过设置网卡硬件的中断阀值,能够减少网卡中断次数。
3.采用零拷贝技术
从内核到应用的数据拷贝是捕包系统的主要性能瓶颈,采用零拷贝技术[4,5]能够解决该性能瓶颈。通过在内核添加处理模块来将用户缓冲区的虚拟地址转换为网卡可用的物理地址并锁定该地址,改进网卡驱动程序以获取用户缓冲区的物理地址并利用网卡异步DMA工作方式将数据包从网卡直接传送到用户空间,从而旁路操作系统内核协议栈,避免数据从内核空间到用户空间的拷贝。该方法能够大幅度的提高系统的捕包性能,甚至能够达到网卡的性能极限。
4、总结
报文捕获技术是网络性能监测、网络协议分析、网络入侵检测、防火墙等网络应用系统的基础。改进和提高报文捕获的效率是大流量网络环境下网络应用系统的重要研究内容。本文对现有报文捕获系统的捕包机制及其性能瓶颈进行了深入的分析,并在此基础上提出了优化和改进的措施,为下一步工作指明了方向:(1)采用零拷贝的报文捕获引擎;(2)采用NAPI技术降低网卡中断开销。
参考文献
[1]唐正军,李建华著,入侵检测技术,清华大学出版社,2004.
[2]W.Richard Stevens,TCP/IP Illustrated,Volume 1:The Protocols,2002.
[3]王佰玲,方滨兴.传统报文捕获平台性能影响因素分析[J].计算机工程与应用,2003,22:151-152
[4]杜英明.高速网络环境下基于零拷贝的报文捕获机制研究与实现[D].国防科技大学,2007
[5]唐勇,胡华平.高效报文捕获引擎FPC的研究与实现[J].计算机工程与科学,2006,28(5):27-29
[6]贾彩霞,吴秋峰.采用轮询机制提高Linux系统的网络性能[J].计算机工程与应用,2004,24:152-153
[7]戴斌.高速网络接口卡DMA机制的研究与实现[D].国防科技大学,2006