[摘要]本文分析基于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