武 同
(作者單位:成都希格瑪光電科技有限公司)
在四川省科研院所科技成果轉(zhuǎn)化資金項目“面向虛擬現(xiàn)實應用的全景視頻處理系統(tǒng)”(計劃編號:2017YSZH0012)中,使用了萬兆以太網(wǎng)絡來傳輸圖像采集終端的高清視頻數(shù)據(jù)。在系統(tǒng)設計階段,預先估算了網(wǎng)絡的理論利用率:圖像采集系統(tǒng)單臺相機單元輸出圖像分辨率是2 560×2 048,輸出幀率是30幀每秒,輸出圖像格式是RGB888,這樣相機圖像視頻數(shù)據(jù)率則為2 560×2 048×30×3×8≈ 3.8 Gbps。由于萬兆以太網(wǎng)的帶寬為10G bps,理論上足夠傳輸單臺相機單元的視頻數(shù)據(jù)。
但是,在系統(tǒng)實際調(diào)試階段卻發(fā)現(xiàn)默認配置下萬兆以太網(wǎng)接口的吞吐率遠達不到10 Gbps,特別在數(shù)據(jù)包長度較短的極端情況下,吞吐率甚至只有500 Mbps,甚至還達不到千兆以太網(wǎng)的1G bps理論帶寬。如此低的吞吐率直接導致網(wǎng)絡接口上圖像數(shù)據(jù)包被大量丟棄,應用程序無法正常恢復相機圖像,影響了項目進展。經(jīng)過對網(wǎng)絡適配器驅(qū)動部分參數(shù)以及應用程序套接字參數(shù)進行多次調(diào)整嘗試,最終實現(xiàn)了圖像數(shù)據(jù)的完整傳輸?,F(xiàn)將調(diào)整優(yōu)化項目整理成文,以便各位同行參考。
RSS(Receive Side Scaling)是一種能夠在多處理器系統(tǒng)下使接收報文在多個處理器之間高效分發(fā)的網(wǎng)絡適配器驅(qū)動技術,如果計算機系統(tǒng)為多處理器或多核處理器,打開接收方調(diào)整可以使網(wǎng)絡適配器把接收數(shù)據(jù)的處理分配至多個處理器或多個內(nèi)核,提高了系統(tǒng)資源利用率的同時提高了網(wǎng)絡吞吐率。打開RSS后,需要調(diào)整RSS隊列的最大數(shù)目,使其不超過處理器數(shù)量或者處理器內(nèi)核數(shù)量。需要注意的是4個或更多隊列用于要求高傳輸速率的應用程序,如基于Web服務器的應用程序,此時處理器的資源占用可能較高。接收方調(diào)整設置,如圖1所示。
圖1 接收方調(diào)整設置圖示
此功能允許網(wǎng)絡適配器以硬件方式計算確認接收到的數(shù)據(jù)包上的校驗和,并計算被傳輸?shù)臄?shù)據(jù)包上的校驗和,這樣操作系統(tǒng)就不需要再用軟件方式檢驗和計算。校驗和分載傳輸可以分別在IP、TCP以及UDP三個層面開啟,啟用此功能可能會提高相應數(shù)據(jù)包的傳輸性能并降低處理器的占用率。校驗和分載傳輸設置,如圖2所示。
圖2 校驗和分載傳輸設置圖示
巨幀(Jumbo Frame),是指長度大于以太網(wǎng)標準最大長度1 514字節(jié)的數(shù)據(jù)包(幀),對于千兆及萬兆以太網(wǎng),采用巨型幀能夠使數(shù)據(jù)傳輸效率提高50%~100%。在視頻傳輸?shù)却髷?shù)據(jù)量高實時性的應用環(huán)境中,巨型幀更具有非同尋常的意義。在萬兆以太網(wǎng)網(wǎng)絡中,如采用幀長為標準1 514字節(jié)的數(shù)據(jù)包,那么每秒需要傳輸處理高達812 000個數(shù)據(jù)包,而如采用長度為9 014字節(jié)的巨幀數(shù)據(jù)包,每秒需要傳輸處理的數(shù)據(jù)包僅僅只有14 000個,由于網(wǎng)絡中數(shù)據(jù)包的個數(shù)減少,計算機需要處理的包頭額外開銷也大大減少,這樣在提高了網(wǎng)絡吞吐率的同時降低了處理器占用率,減少了網(wǎng)絡延遲。巨幀數(shù)據(jù)包設置,如圖3所示。
圖3 巨幀數(shù)據(jù)包設置圖示
一個數(shù)據(jù)包到達時,網(wǎng)絡適配器會生成一個中斷,允許驅(qū)動程序來處理信息包。鏈接速度越高,產(chǎn)生的中斷越多,處理器的使用量也將增大。這會導致系統(tǒng)性能降低。由于啟用中斷裁決會使網(wǎng)絡適配器能積累中斷,并發(fā)送單個(而不是一系列的)中斷,所以在某些網(wǎng)絡環(huán)境下,不適宜的中斷裁決率會導致網(wǎng)絡延遲,甚至導致數(shù)據(jù)包丟包。中斷裁決設置,如圖4所示。
圖4 中斷裁決設置圖示
網(wǎng)絡適配器在接收到數(shù)據(jù)包后,需要把數(shù)據(jù)直接寫入位于計算機內(nèi)存的緩沖區(qū)池,其由一定數(shù)量的固定長度的緩沖區(qū)塊組成,該選項即是設定為網(wǎng)絡適配器需要使用的傳輸緩沖區(qū)數(shù)量。萬兆以太網(wǎng)由于數(shù)據(jù)量大,如果緩沖區(qū)數(shù)量設置過小則會導致緩沖區(qū)溢出而丟包,增加此值能增強接收性能,但也消耗系統(tǒng)內(nèi)存,應該根據(jù)實際網(wǎng)絡環(huán)境設置此值,達到網(wǎng)絡性能和內(nèi)存消耗的平衡。接收緩沖區(qū)設置,如圖5所示。
圖5 接收緩沖區(qū)設置圖示
如果網(wǎng)絡接收端傳入數(shù)據(jù)包速率大于網(wǎng)絡適配器可以處理的數(shù)據(jù)率,則接收端可能會過載,這時適配器會丟棄數(shù)據(jù)包直到超載消失。IEEE802.3x協(xié)議提供了一種流量控制機制克服了這個問題——PAUSE幀,當接收方發(fā)生過載的時候,網(wǎng)絡適配器會生成PAUSE幀,強制發(fā)送端停止傳輸。在某些網(wǎng)絡環(huán)境下,比如傳輸發(fā)送端不支持PAUSE幀,啟用流量控制會帶來其他問題。流量控制設置,如圖6所示。
圖6 流量控制設置圖示
從一些技術資料來看,Windows系統(tǒng)是從VISTA開始,支持Socket收緩沖區(qū)大小的動態(tài)調(diào)整的,而從Windows7和Windows Server 2008開始,支持Socket發(fā)緩沖區(qū)大小的動態(tài)調(diào)整的。在一些特殊應用中,這種自動調(diào)整的緩沖區(qū)大小可能并不是最優(yōu)選擇,不能提供最大的網(wǎng)絡吞吐率。這時候需要禁用操作系統(tǒng)的緩沖區(qū)自動調(diào)整功能,改而在程序Socket參數(shù)中通過SO_SNDBUF和SO_RCVBUF手動調(diào)整緩沖區(qū)大小,進而優(yōu)化網(wǎng)絡性能。
下面針對本項目的計算機系統(tǒng)配置和網(wǎng)絡應用情況,詳細說明各參數(shù)的調(diào)整優(yōu)化。
本項目計算機系統(tǒng)配置如下:
操作系統(tǒng):Windows 10 專業(yè)版
處理器:Intel Xeon E5-2698 V4
內(nèi)存:256 GB
(1)由于Xeon處理器有20個內(nèi)核,所以開啟了接收方調(diào)整RSS,并將隊列設置為8個;
(2)本項目中傳輸視頻的數(shù)據(jù)包采用了UDP協(xié)議,所以開啟了網(wǎng)絡適配器的IP和UDP校驗和分載選項;
(3)為了減少數(shù)據(jù)包開銷處理次數(shù),減少處理延時,本項目視頻數(shù)據(jù)包設定為8 000字節(jié)固定長度,所以開啟了網(wǎng)絡適配器巨幀支持選項,同時設置巨幀長度最大為9 014字節(jié);
(4)由于計算機系統(tǒng)處理器性能強勁且數(shù)據(jù)包采用巨幀模式,所以關閉了網(wǎng)絡適配器的中斷裁決選項,以降低網(wǎng)絡延遲;
(5)由于計算機系統(tǒng)內(nèi)存容量較大,所以將網(wǎng)絡適配器的接收緩沖區(qū)設置為4 096個;
(6)考慮到實際網(wǎng)絡環(huán)境為點到點連接,發(fā)送發(fā)數(shù)據(jù)率小于接收方理論帶寬,且發(fā)送方不支持流量控制,關閉了網(wǎng)絡適配器的流量控制選項;
(7)將應用程序Socket的接收緩沖區(qū)大小設定為1 024×1 024×128=128 MB。
通過上面優(yōu)化設置,最后測試下來萬兆網(wǎng)口的數(shù)據(jù)吞吐率從默認設置的300 Mbps提高到了9 Gbps。雖然沒有達到理論的10 Gbps,但是已完全滿足了本項目中圖像數(shù)據(jù)實時傳輸?shù)囊?,保證了項目的順利完成。