[摘要]本文分析基于Libpcap報文捕獲系統(tǒng)的性能瓶頸-數(shù)據(jù)拷貝、中斷處理,針對性能瓶頸提出了優(yōu)化和改進捕包性能的方法。
[關(guān)鍵詞]中斷處理;數(shù)據(jù)拷貝
1.引言
在網(wǎng)絡(luò)規(guī)模日益龐大的今天,報文捕獲和分析技術(shù)作為網(wǎng)絡(luò)管理和網(wǎng)絡(luò)安全使用的關(guān)鍵技術(shù)正得到廣泛的應(yīng)用[1]。通過對捕獲的報文進行分析,可以實時了解網(wǎng)絡(luò)的使用狀況,發(fā)現(xiàn)網(wǎng)絡(luò)運行的瓶頸以及分析網(wǎng)絡(luò)數(shù)據(jù)中攜帶的非法內(nèi)容。在Linux系統(tǒng)中,廣泛使用Libpcap(Packets Capture Library )[2]作為網(wǎng)絡(luò)監(jiān)測程序的基礎(chǔ)庫。
Libpcap是Packet Capture Library的縮寫,由Berkeley大學(xué)Lawrence Berkeley National Laboratory研究院的Van Jacobson、CraigLeres和Steven McCanne編寫,是Unix/Linux平臺下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲的函數(shù)庫。它是一個獨立于系統(tǒng)的用戶層包捕獲API接口,為底層網(wǎng)絡(luò)監(jiān)聽提供了一個可移植的框架。
本文分析了傳統(tǒng)基于Libpcap報文捕獲系統(tǒng)的性能瓶頸--數(shù)據(jù)拷貝、中斷處理[3,4,5],提出了優(yōu)化和改進報文捕獲系統(tǒng)性能的方法。
2.Libpcap性能分析
為了研究基于Libpcap報文捕獲系統(tǒng)的性能瓶頸,我們抽象出報文捕獲系統(tǒng)的性能模型如圖1所示,包括用戶態(tài)的Libpcap庫和內(nèi)核態(tài)的報文捕獲引擎。
報文捕獲系統(tǒng)的工作過程:(1)網(wǎng)卡接收數(shù)據(jù)包,通過DMA傳送到主機并向主機發(fā)送硬件中斷;(2)硬件中斷程序?qū)?shù)據(jù)包轉(zhuǎn)入鏈路層的接收核心隊列并設(shè)置軟中斷標志;(3)軟中斷處理程序?qū)?shù)據(jù)包按協(xié)議分發(fā),報文進入PF_Package隊列;(4)用戶態(tài)的檢測程序(如TCPDUMP、SNIFFER)向內(nèi)核發(fā)送系統(tǒng)調(diào)用;(5)系統(tǒng)調(diào)用服務(wù)程序?qū)?shù)據(jù)包拷貝到檢測程序的用戶態(tài)緩沖區(qū)中;(6)檢測程序?qū)?shù)據(jù)進行分析處理。
圖1 Libpcap報文捕獲系統(tǒng)性能模型
通過對Libpcap性能模型工作過程的分析,我們得出Libpcap報文捕獲系統(tǒng)性能瓶頸-數(shù)據(jù)拷貝開銷和中斷處理開銷。
1.數(shù)據(jù)拷貝
數(shù)據(jù)拷貝操作的代價是昂貴的,主要有以下幾點原因:(1)內(nèi)存總線帶寬有限,每次內(nèi)存拷貝都要占用帶寬;(2)每次拷貝操作都會消耗大量的CPU周期。通常,CPU都是逐字地將數(shù)據(jù)從源緩沖區(qū)移動到目的緩沖區(qū)。這意味著在拷貝操作過程中,CPU是不可利用的;(3)數(shù)據(jù)拷貝操作影響了系統(tǒng)cache性能。因為CPU通過cache訪問主存,因此在拷貝操作之前cache中駐留的有用信息會被清空,然后被拷貝的數(shù)據(jù)所代替[3,5]。
2.中斷處理開銷
網(wǎng)絡(luò)上每到達一個報文都會引起一次硬件中斷(目前有的網(wǎng)卡也可以多個報文到達才產(chǎn)生一次中斷),每次這樣的中斷會伴隨一次上下文切換:從當前正在運行的進程切換到因為等待報文而阻塞的進程。上下文切換的開銷往往很昂貴的,因為它需要保存和恢復(fù)相應(yīng)的上下文,而且還會引發(fā)Cache失效帶來性能損失[5]。
3.Libpcap性能優(yōu)化
1.內(nèi)核過濾機制
內(nèi)核過濾就是在軟中斷處理程序中判斷接受的數(shù)據(jù)是否是應(yīng)用程序感興趣的報文,如果是才將其復(fù)制到應(yīng)用層的緩沖區(qū)內(nèi),否則就丟棄,這樣可以大大降低系統(tǒng)處理的報文數(shù)量,從而提高捕包效率,但這種方式只對某些應(yīng)用起作用,對于流量統(tǒng)計、常用協(xié)議分析等應(yīng)用就不會起很大作用,因為這些應(yīng)用往往要處理網(wǎng)絡(luò)上絕大部分報文。
2.減少中斷開銷
采用NAPI技術(shù)[6]和設(shè)置網(wǎng)卡硬件中斷閥值[7]來減少系統(tǒng)的中斷開銷。
NAPI是一種中斷和輪詢相結(jié)合的技術(shù)。中斷在輕負載情況下能減少延遲,但在重負載情況下會引起活鎖;輪詢在重負載下效率很高,但在輕負載下卻會增加延遲。NAPI結(jié)合了中斷和輪詢的優(yōu)點,在輕負載下系統(tǒng)以中斷方式工作,重負載下系統(tǒng)以輪詢的方式工作。
在網(wǎng)卡硬件中設(shè)計中斷閥值寄存器,控制網(wǎng)卡中斷發(fā)送的時機,網(wǎng)卡硬件的DMA引擎接收(發(fā)送)了一定數(shù)量的報文后才置接收(發(fā)送)中斷。這個固定的報文數(shù)量被稱為接收(發(fā)送)中斷閥值,通過設(shè)置網(wǎng)卡硬件的中斷閥值,能夠減少網(wǎng)卡中斷次數(shù)。
3.采用零拷貝技術(shù)
從內(nèi)核到應(yīng)用的數(shù)據(jù)拷貝是捕包系統(tǒng)的主要性能瓶頸,采用零拷貝技術(shù)[4,5]能夠解決該性能瓶頸。通過在內(nèi)核添加處理模塊來將用戶緩沖區(qū)的虛擬地址轉(zhuǎn)換為網(wǎng)卡可用的物理地址并鎖定該地址,改進網(wǎng)卡驅(qū)動程序以獲取用戶緩沖區(qū)的物理地址并利用網(wǎng)卡異步DMA工作方式將數(shù)據(jù)包從網(wǎng)卡直接傳送到用戶空間,從而旁路操作系統(tǒng)內(nèi)核協(xié)議棧,避免數(shù)據(jù)從內(nèi)核空間到用戶空間的拷貝。該方法能夠大幅度的提高系統(tǒng)的捕包性能,甚至能夠達到網(wǎng)卡的性能極限。
4、總結(jié)
報文捕獲技術(shù)是網(wǎng)絡(luò)性能監(jiān)測、網(wǎng)絡(luò)協(xié)議分析、網(wǎng)絡(luò)入侵檢測、防火墻等網(wǎng)絡(luò)應(yīng)用系統(tǒng)的基礎(chǔ)。改進和提高報文捕獲的效率是大流量網(wǎng)絡(luò)環(huán)境下網(wǎng)絡(luò)應(yīng)用系統(tǒng)的重要研究內(nèi)容。本文對現(xiàn)有報文捕獲系統(tǒng)的捕包機制及其性能瓶頸進行了深入的分析,并在此基礎(chǔ)上提出了優(yōu)化和改進的措施,為下一步工作指明了方向:(1)采用零拷貝的報文捕獲引擎;(2)采用NAPI技術(shù)降低網(wǎng)卡中斷開銷。
參考文獻
[1]唐正軍,李建華著,入侵檢測技術(shù),清華大學(xué)出版社,2004.
[2]W.Richard Stevens,TCP/IP Illustrated,Volume 1:The Protocols,2002.
[3]王佰玲,方濱興.傳統(tǒng)報文捕獲平臺性能影響因素分析[J].計算機工程與應(yīng)用,2003,22:151-152
[4]杜英明.高速網(wǎng)絡(luò)環(huán)境下基于零拷貝的報文捕獲機制研究與實現(xiàn)[D].國防科技大學(xué),2007
[5]唐勇,胡華平.高效報文捕獲引擎FPC的研究與實現(xiàn)[J].計算機工程與科學(xué),2006,28(5):27-29
[6]賈彩霞,吳秋峰.采用輪詢機制提高Linux系統(tǒng)的網(wǎng)絡(luò)性能[J].計算機工程與應(yīng)用,2004,24:152-153
[7]戴斌.高速網(wǎng)絡(luò)接口卡DMA機制的研究與實現(xiàn)[D].國防科技大學(xué),2006