李欣,樊志杰,曹志威,胡正梁,陳國梁
(1.中國人民公安大學 信息技術與網絡安全學院,北京100038;2.安全防范技術與風險評估公安部重點實驗室,北京100038;3.公安部第三研究所 信息安全技術部,上海200031; 4.上海辰銳信息科技公司,上海200031)
隨著國家大力推動“平安城市”“雪亮工程”的建設,全國各地建設了大量的高清視頻監控設備。同時,伴隨著視頻傳輸網上視頻流量的不斷增長,對視頻網絡流量的傳輸能力要求也越來越高,并且視頻流的傳輸是進行視頻數據共享和視頻數據分析的關鍵步驟。
現有的視頻傳輸網流量傳輸模型主要有2種[1-2]:①基于硬件的方式,包括NetFlow和Net-Stream等,但該方式需要對網絡設備進行專業的定制,成本高,且需要采用采樣的方式抽取視頻流量,這樣會造成分析結果不準確。②基于網絡抓包嗅探的方式,包括Libpcap和Netmap等,但該方式往往只能夠承載百兆級別的網絡流量,對于大規模的視頻監控網絡流量無法進行有效的傳輸、采集和分析。現階段,PF_RING技術在數據包抓取方面有其獨特的優勢,并且已存在較多的研究。例如,劉峰[3]提出CPU零參與方式,提高了千兆網卡數據包的抓取效率。趙志強等[4]通過零拷貝技術,將PF_RING抓取數據包的方式集成到Snort中,使IDS具備了IPv6檢測的功能。同時,考慮到視頻傳輸網中的視頻流數據具有實時性高、數據吞吐量大、數據誤碼率低等特性,這就要求視頻傳輸系統具有高性能視頻流傳輸與分析的能力。
鑒于此,本文采用PF_RING多核視頻流高性能傳輸模型進行視頻監控系統前端視頻流數據包的處理,以便減少視頻流數據包的拷貝次數,進而提高對視頻傳輸網中視頻流量傳輸、轉發的速度和效率。
PF_RING的多核視頻流高性能傳輸技術可以提升視頻傳輸系統的傳輸性能[5-9]。以下將對本文涉及的PF_RING機理和視頻傳輸系統進行概述。
PF_RING是Deri[10]研究出來的運行在Linux內核層的高效數據報文傳輸模型,其有助于對網絡數據報文和網絡流量進行深層次的分析研究。同時,用戶級別的應用程序可以通過其提供的API來進行更為高效的網絡數據傳輸。
在Linux傳統的網絡協議棧數據報文處理過程中,CPU大量的處理能力使用在把網卡接收到的數據報文拷貝到kernel中的數據結構隊列中,再從kernel的數據結構隊列發送到用戶空間的應用程序數據接收區中,導致了CPU處理能力的嚴重耗損。網絡傳輸過程中,在網絡設備上需要對數據報文sk_buff結構進行多次拷貝,并且涉及內核態和用戶態的頻繁系統調用,限制了傳輸報文的效率,尤其對小報文的傳輸性能影響更大。本文引入的PF_RING技術,一方面減少了報文在網絡設備上的拷貝次數,極大地釋放出CPU的處理能力;另一方面與TNAPI技術的融合將網卡接收的數據報文分發到各個CPU核的RX隊列中以充分利用多核的特性。通過這2種方式顯著提高了網絡設備的數據報文處理能力。
視頻傳輸系統是一種應用于不同視頻傳輸網之間視頻資源共享的通道[11-12],其采用全新硬件設備和全新軟件架構,由視頻設備認證服務器、視頻用戶認證服務器和網絡安全隔離設備3部分組成,是運行在各視頻傳輸網之間的核心視頻數據傳輸部件。本文提出的視頻傳輸系統采用軟硬一體化設計,主要用于解決用戶在2個視頻傳輸網域之間相互訪問視頻資源時所面臨的視頻資源可信性、用戶合法性、數據安全性、訪問可控性等問題。視頻傳輸系統部署架構如圖1所示。

圖1 視頻傳輸系統部署架構Fig.1 Deployment framework of video transmission system
由于視頻傳輸網的使用用戶多,視頻數據量大,在不同的視頻傳輸網之間進行視頻數據共享,就需要視頻傳輸系統具有高性能的視頻流傳輸機制。因此,視頻傳輸系統要滿足誤碼率低、延時小、吞吐量高的特性。本文研究使用基于PF_RING多核模型的高效數據包傳輸技術,進而提升視頻傳輸系統接收視頻流的能力,降低視頻流的誤碼率,減少視頻流在視頻傳輸系統內部的延時,提高系統的網絡數據吞吐量。
本節詳細分析了基于PF_RING多核模型的共享視頻流傳輸過程。
PF_RING的工作機制比Linux傳統的網絡協議棧處理網絡數據報文更高效[13-15],圖2為兩者工作機制的比較。

圖2 傳統協議棧與PF_RING工作機制的比較Fig.2 Comparison of working mechanism between traditional protocol stack and PF_RING
Linux系統傳統的處理網絡數據報文過程為:網卡驅動將數據放入網卡的緩沖區中;驅動程序發送中斷請求給CPU,將網卡緩沖區中數據拷貝到Linux系統的內核網絡協議棧緩沖區中;內核網絡協議棧的Ethernet層、IP層、TCP/UDP層、Socket層依次對數據報文進行處理;通過Linux的系統調用將數據從內核拷貝到用戶空間。
PF_RING是一種與Linux系統Socket不同的新的網絡Socket,其可以極大地改進數據報文傳輸的速度,減少報文傳輸過程中在Linux系統內核態和用戶態之間的拷貝次數。PF_RING對數據傳輸方式優化的不同又分為PF_RING+TNAPI和PF_RING零拷貝2種實現機制。本文分別采用上述2種模式來提升視頻傳輸系統的傳輸效率,并進行了對比分析。
隨著多核CPU在網絡設備上的廣泛使用,Deri[10]在NAPI(New Application Program Interface)基礎上提出TNAPI(Threaded New Application Program Interface),將網卡接收的數據報文分發到各個CPU核的RX隊列中以充分利用多核的特性。PF_RING+TNAPI的實現機制如圖3所示,具體步驟如下:

圖3 PF_RING+TNAPI的實現機制Fig.3 Implementation mechanism of PF_RING+TNAPI
步驟1創建對應多核的環形緩沖區ring的新型套接字Virtual PF_RING。
步驟2TNAPI將網卡上收到的數據分發到各核對應的RX隊列中。
步驟3將RX隊列中的數據報文拷貝到環形緩沖區ring,若緩沖區ring已滿,則將該報文丟棄。
步驟4在各核上運行用戶空間應用程序,通過內存映射文件MMAP或PF_RING輪詢直接訪問各個環形緩沖區ring中的數據。
PF_RING直接映射網卡內核和寄存器到用戶空間的機制即PF_RING零拷貝模式,其實現機制如圖4所示,具體步驟如下:

圖4 PF_RING零拷貝的實現機制Fig.4 Implementation mechanism of PF_RING zero-copy
步驟1PF_RING設置映射網卡內存ring到用戶態的零拷貝方式。
步驟2僅有一次數據拷貝操作由網卡的網絡處理單元完成。
步驟3應用程序使用PF_RING 接口以DMA或應用輪詢方式獲取網卡環形緩沖區ring中的數據。
步驟4CPU的處理能力能更多地分配到數據報文處理中,處理網絡數據報文更高效。
PF_RING零拷貝模式的缺點在于一次只允許一個應用程序訪問DMA 緩沖,不利于利用CPU多核的特性。
視頻傳輸系統的安全隔離設備是由1個視頻控制信令雙向物理通道、2個正反向的視頻流單向物理通道組成的專用設備[16-18]。視頻設備認證服務器主要用于對相互進行數據共享的視頻傳輸網視頻服務器等設備的身份認證。視頻用戶認證服務器主要用于對相互進行數據共享的視頻傳輸網中的使用用戶進行身份認證。同時,視頻設備認證服務器、視頻用戶認證服務器需要對視頻傳輸網間的視頻流進行高效的傳輸。
視頻傳輸系統為了實現視頻傳輸網間的視頻流高效的傳輸,使用了PF_RING技術結合內存路由表、多通道多線程相關技術。
視頻傳輸系統的內存路由表包含視頻控制信令的內存路由表、由視頻控制信令動態分配的視頻流內存路由表。其中,視頻傳輸系統的控制信令的內存路由表各字段如下:
1)源地址、端口。指被調取視頻源所在視頻傳輸網服務器的IP和端口。
2)目標地址、端口。指視頻接收方所在視頻傳輸網服務器的IP和端口。
3)協議類型。UDP或TCP協議。
4)信令類型。指視頻信令所采用的協議,如SIP、RTSP等協議。
視頻流內存路由表是由上文中的視頻控制信令動態分配得到的內存路由表,且其是以視頻傳輸系統在設備上開辟的端口為Key,以DataNet-PortVsas結構體為Value的map內存表。視頻傳輸系統每個通道對應一個視頻流內存路由表,系統通道數不超過系統硬件CPU的總核數。Net-PortVsas為視頻設備認證服務器、視頻用戶認證服務器的端口。DataNetPortVsas的數據結構如表1所示。

表1 DataNetPortVsas的數據結構Tab le 1 Data structure of DataNetPortVsas
視頻傳輸系統的高效視頻流傳輸過程如圖5所示。
視頻傳輸系統需要對2個專網間的視頻資源進行數據共享。視頻用戶認證服務器和視頻設備認證服務器都具備視頻碼流的接收和轉發能力。如圖5所示,SnifferThread為視頻傳輸系統的視頻流接收服務。通過反復實驗發現,在現有的8核CPU硬件設備下,使用多通道能滿足視頻傳輸系統高效視頻流傳輸的要求。其中,瓶頸在視頻傳輸系統的SnifferThread接收視頻碼流能力。另外,SnifferThread線程接收視頻碼流的過程如圖6所示。

圖5 視頻傳輸系統的視頻流傳輸Fig.5 Video stream transmission of video transmission system

圖6 SnifferThread服務框架Fig.6 Service framework of SnifferThread
鑒于此,本文分別使用PF_RING零拷貝機制和PF_RING+TNAPI機制對SnifferThread服務進行優化。PF_RING零拷貝機制基本沒有任何額外的數據包復制工作,進而將CPU的處理能力更多地運用在視頻流數據報文的處理和傳輸功能上。PF_RING+TNAPI機制,視頻傳輸系統SnifferThread服務使用多線程多隊列方式從網卡獲取數據報文,效率較高,可以更好地發揮硬件多核的特性,顯著降低了CPU的使用率。
為了將傳統協議棧、PF_RING+TNAPI、PF_RING零拷貝技術對視頻傳輸系統的傳輸性能進行對比分析,搭建了如圖7所示的測試環境。

圖7 測試環境拓撲Fig.7 Topology of test environment
測試環境中,硬件設備采用Intel的E5-2623 v3@3.00 GHz型號CPU,32 GB內存,英特爾?82599雙口光口10 GB網卡;操作系統采用CentOS 6.5。
本節實驗的主要目的是驗證PF_RING技術對視頻傳輸性能的提高程度。鑒于此,實驗中的每條測試用例將在Linux網絡協議棧、PF_RING+TNAPI和PF_RING零拷貝3種模式下進行對比分析,著重比較在相同軟硬件環境下系統的有效吞吐量、CPU 使用率和平均誤碼率。
使用iperf工具發送10 Mbit/s的模擬視頻流數據,測試用例如下:①第1條。400路,每路10Mbit/s的視頻流。②第2條。500路,每路10Mbit/s的視頻流。③第3條。600路,每路10Mbit/s的視頻流。④第4條。700路,每路10Mbit/s的視頻流。⑤第5條。800路,每路10Mbit/s的視頻流。
實驗從視頻傳輸系統的有效吞吐量、CPU使用率、平均誤碼率3個方面觀察基于Linux網絡協議棧、PF_RING+TNAPI和PF_RING零拷貝3種模式下的視頻傳輸能力,對比結果如圖8~圖10所示,其中每項結果均為5次測試實驗的平均值。

圖8 有效吞吐量對比Fig.8 Comparision of effective throughput

圖10 平均誤碼率對比Fig.10 Comparision of average bit error rate
在上述3種模式下,當模擬發送400×10Mbit/s、500×10Mbit/s數據時,系統的有效吞吐量幾乎相同;當模擬發送700×10Mbit/s、800×10Mbit/s時,PF_RING+TNAPI、PF_RING零拷貝模式具有很大的優勢。其中,PF_RING+TNAPI、PF_RING零拷貝模式下有效吞吐量數據相近。
在接收視頻流設備的CPU使用率對比中(見圖9),不管模擬發送的數據包有多大,PF_RING+TNAPI、PF_RING零拷貝模式通常具有更低的CPU使用率。其中,PF_RING+TNAPI能更好地發揮硬件多核的特性,在CPU使用率方面具備優勢。

圖9 CPU使用率對比Fig.9 Comparision of CPU utilization
圖10顯示了平均誤碼率對比分析,在基于Linux網絡協議棧模式下,當模擬數據達到600×10Mbit/s時,平均誤碼率超過1%,將導致視頻流失真較大。然而,PF_RING+TNAPI、PF_RING零拷貝模式通常具有更低的平均誤碼率,優勢更大。其中,PF_RING+TNAPI、PF_RING零拷貝模式下平均誤碼率數據相近。
考慮到視頻流量傳輸的特點,本文提出一種基于PF_RING的視頻流高性能傳輸模型,其通過使用PF_RING+TNAPI機制結合視頻傳輸系統多通道技術,進而減少視頻流數據包在網絡設備上的拷貝次數,更好發揮硬件多核的特性,極大地釋放出CPU的處理能力。本文得出如下結論:
1)通過合理地調整CPU的調度能力,本文模型有效解決了由于視頻流波動導致的不同進程間相互影響造成的丟包率升高的問題。
2)為了保證不同網域間視頻流數據的安全傳輸,本文提出了視頻控制信令雙向傳輸、視頻流單向傳輸的設計模式。
3)通過大量的對比實驗,本文驗證了基于PF_RING+TNAPI的模型相比于傳統的基于協議棧的模型在視頻流傳輸方面的網絡有效吞吐量、CPU使用率、平均誤碼率指標上均有很強的優勢,在CPU使用率上也優于PF_RING零拷貝模式。