李欣,樊志杰,曹志威,胡正梁,陳國(guó)梁
(1.中國(guó)人民公安大學(xué) 信息技術(shù)與網(wǎng)絡(luò)安全學(xué)院,北京100038;2.安全防范技術(shù)與風(fēng)險(xiǎn)評(píng)估公安部重點(diǎn)實(shí)驗(yàn)室,北京100038;3.公安部第三研究所 信息安全技術(shù)部,上海200031; 4.上海辰銳信息科技公司,上海200031)
隨著國(guó)家大力推動(dòng)“平安城市”“雪亮工程”的建設(shè),全國(guó)各地建設(shè)了大量的高清視頻監(jiān)控設(shè)備。同時(shí),伴隨著視頻傳輸網(wǎng)上視頻流量的不斷增長(zhǎng),對(duì)視頻網(wǎng)絡(luò)流量的傳輸能力要求也越來(lái)越高,并且視頻流的傳輸是進(jìn)行視頻數(shù)據(jù)共享和視頻數(shù)據(jù)分析的關(guān)鍵步驟。
現(xiàn)有的視頻傳輸網(wǎng)流量傳輸模型主要有2種[1-2]:①基于硬件的方式,包括NetFlow和Net-Stream等,但該方式需要對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行專業(yè)的定制,成本高,且需要采用采樣的方式抽取視頻流量,這樣會(huì)造成分析結(jié)果不準(zhǔn)確。②基于網(wǎng)絡(luò)抓包嗅探的方式,包括Libpcap和Netmap等,但該方式往往只能夠承載百兆級(jí)別的網(wǎng)絡(luò)流量,對(duì)于大規(guī)模的視頻監(jiān)控網(wǎng)絡(luò)流量無(wú)法進(jìn)行有效的傳輸、采集和分析?,F(xiàn)階段,PF_RING技術(shù)在數(shù)據(jù)包抓取方面有其獨(dú)特的優(yōu)勢(shì),并且已存在較多的研究。例如,劉峰[3]提出CPU零參與方式,提高了千兆網(wǎng)卡數(shù)據(jù)包的抓取效率。趙志強(qiáng)等[4]通過(guò)零拷貝技術(shù),將PF_RING抓取數(shù)據(jù)包的方式集成到Snort中,使IDS具備了IPv6檢測(cè)的功能。同時(shí),考慮到視頻傳輸網(wǎng)中的視頻流數(shù)據(jù)具有實(shí)時(shí)性高、數(shù)據(jù)吞吐量大、數(shù)據(jù)誤碼率低等特性,這就要求視頻傳輸系統(tǒng)具有高性能視頻流傳輸與分析的能力。
鑒于此,本文采用PF_RING多核視頻流高性能傳輸模型進(jìn)行視頻監(jiān)控系統(tǒng)前端視頻流數(shù)據(jù)包的處理,以便減少視頻流數(shù)據(jù)包的拷貝次數(shù),進(jìn)而提高對(duì)視頻傳輸網(wǎng)中視頻流量傳輸、轉(zhuǎn)發(fā)的速度和效率。
PF_RING的多核視頻流高性能傳輸技術(shù)可以提升視頻傳輸系統(tǒng)的傳輸性能[5-9]。以下將對(duì)本文涉及的PF_RING機(jī)理和視頻傳輸系統(tǒng)進(jìn)行概述。
PF_RING是Deri[10]研究出來(lái)的運(yùn)行在Linux內(nèi)核層的高效數(shù)據(jù)報(bào)文傳輸模型,其有助于對(duì)網(wǎng)絡(luò)數(shù)據(jù)報(bào)文和網(wǎng)絡(luò)流量進(jìn)行深層次的分析研究。同時(shí),用戶級(jí)別的應(yīng)用程序可以通過(guò)其提供的API來(lái)進(jìn)行更為高效的網(wǎng)絡(luò)數(shù)據(jù)傳輸。
在Linux傳統(tǒng)的網(wǎng)絡(luò)協(xié)議棧數(shù)據(jù)報(bào)文處理過(guò)程中,CPU大量的處理能力使用在把網(wǎng)卡接收到的數(shù)據(jù)報(bào)文拷貝到kernel中的數(shù)據(jù)結(jié)構(gòu)隊(duì)列中,再?gòu)膋ernel的數(shù)據(jù)結(jié)構(gòu)隊(duì)列發(fā)送到用戶空間的應(yīng)用程序數(shù)據(jù)接收區(qū)中,導(dǎo)致了CPU處理能力的嚴(yán)重耗損。網(wǎng)絡(luò)傳輸過(guò)程中,在網(wǎng)絡(luò)設(shè)備上需要對(duì)數(shù)據(jù)報(bào)文sk_buff結(jié)構(gòu)進(jìn)行多次拷貝,并且涉及內(nèi)核態(tài)和用戶態(tài)的頻繁系統(tǒng)調(diào)用,限制了傳輸報(bào)文的效率,尤其對(duì)小報(bào)文的傳輸性能影響更大。本文引入的PF_RING技術(shù),一方面減少了報(bào)文在網(wǎng)絡(luò)設(shè)備上的拷貝次數(shù),極大地釋放出CPU的處理能力;另一方面與TNAPI技術(shù)的融合將網(wǎng)卡接收的數(shù)據(jù)報(bào)文分發(fā)到各個(gè)CPU核的RX隊(duì)列中以充分利用多核的特性。通過(guò)這2種方式顯著提高了網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)報(bào)文處理能力。
視頻傳輸系統(tǒng)是一種應(yīng)用于不同視頻傳輸網(wǎng)之間視頻資源共享的通道[11-12],其采用全新硬件設(shè)備和全新軟件架構(gòu),由視頻設(shè)備認(rèn)證服務(wù)器、視頻用戶認(rèn)證服務(wù)器和網(wǎng)絡(luò)安全隔離設(shè)備3部分組成,是運(yùn)行在各視頻傳輸網(wǎng)之間的核心視頻數(shù)據(jù)傳輸部件。本文提出的視頻傳輸系統(tǒng)采用軟硬一體化設(shè)計(jì),主要用于解決用戶在2個(gè)視頻傳輸網(wǎng)域之間相互訪問(wèn)視頻資源時(shí)所面臨的視頻資源可信性、用戶合法性、數(shù)據(jù)安全性、訪問(wèn)可控性等問(wèn)題。視頻傳輸系統(tǒng)部署架構(gòu)如圖1所示。
圖1 視頻傳輸系統(tǒng)部署架構(gòu)Fig.1 Deployment framework of video transmission system
由于視頻傳輸網(wǎng)的使用用戶多,視頻數(shù)據(jù)量大,在不同的視頻傳輸網(wǎng)之間進(jìn)行視頻數(shù)據(jù)共享,就需要視頻傳輸系統(tǒng)具有高性能的視頻流傳輸機(jī)制。因此,視頻傳輸系統(tǒng)要滿足誤碼率低、延時(shí)小、吞吐量高的特性。本文研究使用基于PF_RING多核模型的高效數(shù)據(jù)包傳輸技術(shù),進(jìn)而提升視頻傳輸系統(tǒng)接收視頻流的能力,降低視頻流的誤碼率,減少視頻流在視頻傳輸系統(tǒng)內(nèi)部的延時(shí),提高系統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)吞吐量。
本節(jié)詳細(xì)分析了基于PF_RING多核模型的共享視頻流傳輸過(guò)程。
PF_RING的工作機(jī)制比Linux傳統(tǒng)的網(wǎng)絡(luò)協(xié)議棧處理網(wǎng)絡(luò)數(shù)據(jù)報(bào)文更高效[13-15],圖2為兩者工作機(jī)制的比較。
圖2 傳統(tǒng)協(xié)議棧與PF_RING工作機(jī)制的比較Fig.2 Comparison of working mechanism between traditional protocol stack and PF_RING
Linux系統(tǒng)傳統(tǒng)的處理網(wǎng)絡(luò)數(shù)據(jù)報(bào)文過(guò)程為:網(wǎng)卡驅(qū)動(dòng)將數(shù)據(jù)放入網(wǎng)卡的緩沖區(qū)中;驅(qū)動(dòng)程序發(fā)送中斷請(qǐng)求給CPU,將網(wǎng)卡緩沖區(qū)中數(shù)據(jù)拷貝到Linux系統(tǒng)的內(nèi)核網(wǎng)絡(luò)協(xié)議棧緩沖區(qū)中;內(nèi)核網(wǎng)絡(luò)協(xié)議棧的Ethernet層、IP層、TCP/UDP層、Socket層依次對(duì)數(shù)據(jù)報(bào)文進(jìn)行處理;通過(guò)Linux的系統(tǒng)調(diào)用將數(shù)據(jù)從內(nèi)核拷貝到用戶空間。
PF_RING是一種與Linux系統(tǒng)Socket不同的新的網(wǎng)絡(luò)Socket,其可以極大地改進(jìn)數(shù)據(jù)報(bào)文傳輸?shù)乃俣?,減少報(bào)文傳輸過(guò)程中在Linux系統(tǒng)內(nèi)核態(tài)和用戶態(tài)之間的拷貝次數(shù)。PF_RING對(duì)數(shù)據(jù)傳輸方式優(yōu)化的不同又分為PF_RING+TNAPI和PF_RING零拷貝2種實(shí)現(xiàn)機(jī)制。本文分別采用上述2種模式來(lái)提升視頻傳輸系統(tǒng)的傳輸效率,并進(jìn)行了對(duì)比分析。
隨著多核CPU在網(wǎng)絡(luò)設(shè)備上的廣泛使用,Deri[10]在NAPI(New Application Program Interface)基礎(chǔ)上提出TNAPI(Threaded New Application Program Interface),將網(wǎng)卡接收的數(shù)據(jù)報(bào)文分發(fā)到各個(gè)CPU核的RX隊(duì)列中以充分利用多核的特性。PF_RING+TNAPI的實(shí)現(xiàn)機(jī)制如圖3所示,具體步驟如下:
圖3 PF_RING+TNAPI的實(shí)現(xiàn)機(jī)制Fig.3 Implementation mechanism of PF_RING+TNAPI
步驟1創(chuàng)建對(duì)應(yīng)多核的環(huán)形緩沖區(qū)ring的新型套接字Virtual PF_RING。
步驟2TNAPI將網(wǎng)卡上收到的數(shù)據(jù)分發(fā)到各核對(duì)應(yīng)的RX隊(duì)列中。
步驟3將RX隊(duì)列中的數(shù)據(jù)報(bào)文拷貝到環(huán)形緩沖區(qū)ring,若緩沖區(qū)ring已滿,則將該報(bào)文丟棄。
步驟4在各核上運(yùn)行用戶空間應(yīng)用程序,通過(guò)內(nèi)存映射文件MMAP或PF_RING輪詢直接訪問(wèn)各個(gè)環(huán)形緩沖區(qū)ring中的數(shù)據(jù)。
PF_RING直接映射網(wǎng)卡內(nèi)核和寄存器到用戶空間的機(jī)制即PF_RING零拷貝模式,其實(shí)現(xiàn)機(jī)制如圖4所示,具體步驟如下:
圖4 PF_RING零拷貝的實(shí)現(xiàn)機(jī)制Fig.4 Implementation mechanism of PF_RING zero-copy
步驟1PF_RING設(shè)置映射網(wǎng)卡內(nèi)存ring到用戶態(tài)的零拷貝方式。
步驟2僅有一次數(shù)據(jù)拷貝操作由網(wǎng)卡的網(wǎng)絡(luò)處理單元完成。
步驟3應(yīng)用程序使用PF_RING 接口以DMA或應(yīng)用輪詢方式獲取網(wǎng)卡環(huán)形緩沖區(qū)ring中的數(shù)據(jù)。
步驟4CPU的處理能力能更多地分配到數(shù)據(jù)報(bào)文處理中,處理網(wǎng)絡(luò)數(shù)據(jù)報(bào)文更高效。
PF_RING零拷貝模式的缺點(diǎn)在于一次只允許一個(gè)應(yīng)用程序訪問(wèn)DMA 緩沖,不利于利用CPU多核的特性。
視頻傳輸系統(tǒng)的安全隔離設(shè)備是由1個(gè)視頻控制信令雙向物理通道、2個(gè)正反向的視頻流單向物理通道組成的專用設(shè)備[16-18]。視頻設(shè)備認(rèn)證服務(wù)器主要用于對(duì)相互進(jìn)行數(shù)據(jù)共享的視頻傳輸網(wǎng)視頻服務(wù)器等設(shè)備的身份認(rèn)證。視頻用戶認(rèn)證服務(wù)器主要用于對(duì)相互進(jìn)行數(shù)據(jù)共享的視頻傳輸網(wǎng)中的使用用戶進(jìn)行身份認(rèn)證。同時(shí),視頻設(shè)備認(rèn)證服務(wù)器、視頻用戶認(rèn)證服務(wù)器需要對(duì)視頻傳輸網(wǎng)間的視頻流進(jìn)行高效的傳輸。
視頻傳輸系統(tǒng)為了實(shí)現(xiàn)視頻傳輸網(wǎng)間的視頻流高效的傳輸,使用了PF_RING技術(shù)結(jié)合內(nèi)存路由表、多通道多線程相關(guān)技術(shù)。
視頻傳輸系統(tǒng)的內(nèi)存路由表包含視頻控制信令的內(nèi)存路由表、由視頻控制信令動(dòng)態(tài)分配的視頻流內(nèi)存路由表。其中,視頻傳輸系統(tǒng)的控制信令的內(nèi)存路由表各字段如下:
1)源地址、端口。指被調(diào)取視頻源所在視頻傳輸網(wǎng)服務(wù)器的IP和端口。
2)目標(biāo)地址、端口。指視頻接收方所在視頻傳輸網(wǎng)服務(wù)器的IP和端口。
3)協(xié)議類型。UDP或TCP協(xié)議。
4)信令類型。指視頻信令所采用的協(xié)議,如SIP、RTSP等協(xié)議。
視頻流內(nèi)存路由表是由上文中的視頻控制信令動(dòng)態(tài)分配得到的內(nèi)存路由表,且其是以視頻傳輸系統(tǒng)在設(shè)備上開辟的端口為Key,以DataNet-PortVsas結(jié)構(gòu)體為Value的map內(nèi)存表。視頻傳輸系統(tǒng)每個(gè)通道對(duì)應(yīng)一個(gè)視頻流內(nèi)存路由表,系統(tǒng)通道數(shù)不超過(guò)系統(tǒng)硬件CPU的總核數(shù)。Net-PortVsas為視頻設(shè)備認(rèn)證服務(wù)器、視頻用戶認(rèn)證服務(wù)器的端口。DataNetPortVsas的數(shù)據(jù)結(jié)構(gòu)如表1所示。
表1 DataNetPortVsas的數(shù)據(jù)結(jié)構(gòu)Tab le 1 Data structure of DataNetPortVsas
視頻傳輸系統(tǒng)的高效視頻流傳輸過(guò)程如圖5所示。
視頻傳輸系統(tǒng)需要對(duì)2個(gè)專網(wǎng)間的視頻資源進(jìn)行數(shù)據(jù)共享。視頻用戶認(rèn)證服務(wù)器和視頻設(shè)備認(rèn)證服務(wù)器都具備視頻碼流的接收和轉(zhuǎn)發(fā)能力。如圖5所示,SnifferThread為視頻傳輸系統(tǒng)的視頻流接收服務(wù)。通過(guò)反復(fù)實(shí)驗(yàn)發(fā)現(xiàn),在現(xiàn)有的8核CPU硬件設(shè)備下,使用多通道能滿足視頻傳輸系統(tǒng)高效視頻流傳輸?shù)囊?。其中,瓶頸在視頻傳輸系統(tǒng)的SnifferThread接收視頻碼流能力。另外,SnifferThread線程接收視頻碼流的過(guò)程如圖6所示。
圖5 視頻傳輸系統(tǒng)的視頻流傳輸Fig.5 Video stream transmission of video transmission system
圖6 SnifferThread服務(wù)框架Fig.6 Service framework of SnifferThread
鑒于此,本文分別使用PF_RING零拷貝機(jī)制和PF_RING+TNAPI機(jī)制對(duì)SnifferThread服務(wù)進(jìn)行優(yōu)化。PF_RING零拷貝機(jī)制基本沒有任何額外的數(shù)據(jù)包復(fù)制工作,進(jìn)而將CPU的處理能力更多地運(yùn)用在視頻流數(shù)據(jù)報(bào)文的處理和傳輸功能上。PF_RING+TNAPI機(jī)制,視頻傳輸系統(tǒng)SnifferThread服務(wù)使用多線程多隊(duì)列方式從網(wǎng)卡獲取數(shù)據(jù)報(bào)文,效率較高,可以更好地發(fā)揮硬件多核的特性,顯著降低了CPU的使用率。
為了將傳統(tǒng)協(xié)議棧、PF_RING+TNAPI、PF_RING零拷貝技術(shù)對(duì)視頻傳輸系統(tǒng)的傳輸性能進(jìn)行對(duì)比分析,搭建了如圖7所示的測(cè)試環(huán)境。
圖7 測(cè)試環(huán)境拓?fù)銯ig.7 Topology of test environment
測(cè)試環(huán)境中,硬件設(shè)備采用Intel的E5-2623 v3@3.00 GHz型號(hào)CPU,32 GB內(nèi)存,英特爾?82599雙口光口10 GB網(wǎng)卡;操作系統(tǒng)采用CentOS 6.5。
本節(jié)實(shí)驗(yàn)的主要目的是驗(yàn)證PF_RING技術(shù)對(duì)視頻傳輸性能的提高程度。鑒于此,實(shí)驗(yàn)中的每條測(cè)試用例將在Linux網(wǎng)絡(luò)協(xié)議棧、PF_RING+TNAPI和PF_RING零拷貝3種模式下進(jìn)行對(duì)比分析,著重比較在相同軟硬件環(huán)境下系統(tǒng)的有效吞吐量、CPU 使用率和平均誤碼率。
使用iperf工具發(fā)送10 Mbit/s的模擬視頻流數(shù)據(jù),測(cè)試用例如下:①第1條。400路,每路10Mbit/s的視頻流。②第2條。500路,每路10Mbit/s的視頻流。③第3條。600路,每路10Mbit/s的視頻流。④第4條。700路,每路10Mbit/s的視頻流。⑤第5條。800路,每路10Mbit/s的視頻流。
實(shí)驗(yàn)從視頻傳輸系統(tǒng)的有效吞吐量、CPU使用率、平均誤碼率3個(gè)方面觀察基于Linux網(wǎng)絡(luò)協(xié)議棧、PF_RING+TNAPI和PF_RING零拷貝3種模式下的視頻傳輸能力,對(duì)比結(jié)果如圖8~圖10所示,其中每項(xiàng)結(jié)果均為5次測(cè)試實(shí)驗(yàn)的平均值。
圖8 有效吞吐量對(duì)比Fig.8 Comparision of effective throughput
圖10 平均誤碼率對(duì)比Fig.10 Comparision of average bit error rate
在上述3種模式下,當(dāng)模擬發(fā)送400×10Mbit/s、500×10Mbit/s數(shù)據(jù)時(shí),系統(tǒng)的有效吞吐量幾乎相同;當(dāng)模擬發(fā)送700×10Mbit/s、800×10Mbit/s時(shí),PF_RING+TNAPI、PF_RING零拷貝模式具有很大的優(yōu)勢(shì)。其中,PF_RING+TNAPI、PF_RING零拷貝模式下有效吞吐量數(shù)據(jù)相近。
在接收視頻流設(shè)備的CPU使用率對(duì)比中(見圖9),不管模擬發(fā)送的數(shù)據(jù)包有多大,PF_RING+TNAPI、PF_RING零拷貝模式通常具有更低的CPU使用率。其中,PF_RING+TNAPI能更好地發(fā)揮硬件多核的特性,在CPU使用率方面具備優(yōu)勢(shì)。
圖9 CPU使用率對(duì)比Fig.9 Comparision of CPU utilization
圖10顯示了平均誤碼率對(duì)比分析,在基于Linux網(wǎng)絡(luò)協(xié)議棧模式下,當(dāng)模擬數(shù)據(jù)達(dá)到600×10Mbit/s時(shí),平均誤碼率超過(guò)1%,將導(dǎo)致視頻流失真較大。然而,PF_RING+TNAPI、PF_RING零拷貝模式通常具有更低的平均誤碼率,優(yōu)勢(shì)更大。其中,PF_RING+TNAPI、PF_RING零拷貝模式下平均誤碼率數(shù)據(jù)相近。
考慮到視頻流量傳輸?shù)奶攸c(diǎn),本文提出一種基于PF_RING的視頻流高性能傳輸模型,其通過(guò)使用PF_RING+TNAPI機(jī)制結(jié)合視頻傳輸系統(tǒng)多通道技術(shù),進(jìn)而減少視頻流數(shù)據(jù)包在網(wǎng)絡(luò)設(shè)備上的拷貝次數(shù),更好發(fā)揮硬件多核的特性,極大地釋放出CPU的處理能力。本文得出如下結(jié)論:
1)通過(guò)合理地調(diào)整CPU的調(diào)度能力,本文模型有效解決了由于視頻流波動(dòng)導(dǎo)致的不同進(jìn)程間相互影響造成的丟包率升高的問(wèn)題。
2)為了保證不同網(wǎng)域間視頻流數(shù)據(jù)的安全傳輸,本文提出了視頻控制信令雙向傳輸、視頻流單向傳輸?shù)脑O(shè)計(jì)模式。
3)通過(guò)大量的對(duì)比實(shí)驗(yàn),本文驗(yàn)證了基于PF_RING+TNAPI的模型相比于傳統(tǒng)的基于協(xié)議棧的模型在視頻流傳輸方面的網(wǎng)絡(luò)有效吞吐量、CPU使用率、平均誤碼率指標(biāo)上均有很強(qiáng)的優(yōu)勢(shì),在CPU使用率上也優(yōu)于PF_RING零拷貝模式。