武 同
(作者單位:成都希格瑪光電科技有限公司)
在四川省科研院所科技成果轉化資金項目“面向虛擬現實應用的全景視頻處理系統”(計劃編號:2017YSZH0012)中,使用了萬兆以太網絡來傳輸圖像采集終端的高清視頻數據。在系統設計階段,預先估算了網絡的理論利用率:圖像采集系統單臺相機單元輸出圖像分辨率是2 560×2 048,輸出幀率是30幀每秒,輸出圖像格式是RGB888,這樣相機圖像視頻數據率則為2 560×2 048×30×3×8≈ 3.8 Gbps。由于萬兆以太網的帶寬為10G bps,理論上足夠傳輸單臺相機單元的視頻數據。
但是,在系統實際調試階段卻發現默認配置下萬兆以太網接口的吞吐率遠達不到10 Gbps,特別在數據包長度較短的極端情況下,吞吐率甚至只有500 Mbps,甚至還達不到千兆以太網的1G bps理論帶寬。如此低的吞吐率直接導致網絡接口上圖像數據包被大量丟棄,應用程序無法正?;謴拖鄼C圖像,影響了項目進展。經過對網絡適配器驅動部分參數以及應用程序套接字參數進行多次調整嘗試,最終實現了圖像數據的完整傳輸?,F將調整優化項目整理成文,以便各位同行參考。
RSS(Receive Side Scaling)是一種能夠在多處理器系統下使接收報文在多個處理器之間高效分發的網絡適配器驅動技術,如果計算機系統為多處理器或多核處理器,打開接收方調整可以使網絡適配器把接收數據的處理分配至多個處理器或多個內核,提高了系統資源利用率的同時提高了網絡吞吐率。打開RSS后,需要調整RSS隊列的最大數目,使其不超過處理器數量或者處理器內核數量。需要注意的是4個或更多隊列用于要求高傳輸速率的應用程序,如基于Web服務器的應用程序,此時處理器的資源占用可能較高。接收方調整設置,如圖1所示。

圖1 接收方調整設置圖示
此功能允許網絡適配器以硬件方式計算確認接收到的數據包上的校驗和,并計算被傳輸的數據包上的校驗和,這樣操作系統就不需要再用軟件方式檢驗和計算。校驗和分載傳輸可以分別在IP、TCP以及UDP三個層面開啟,啟用此功能可能會提高相應數據包的傳輸性能并降低處理器的占用率。校驗和分載傳輸設置,如圖2所示。

圖2 校驗和分載傳輸設置圖示
巨幀(Jumbo Frame),是指長度大于以太網標準最大長度1 514字節的數據包(幀),對于千兆及萬兆以太網,采用巨型幀能夠使數據傳輸效率提高50%~100%。在視頻傳輸等大數據量高實時性的應用環境中,巨型幀更具有非同尋常的意義。在萬兆以太網網絡中,如采用幀長為標準1 514字節的數據包,那么每秒需要傳輸處理高達812 000個數據包,而如采用長度為9 014字節的巨幀數據包,每秒需要傳輸處理的數據包僅僅只有14 000個,由于網絡中數據包的個數減少,計算機需要處理的包頭額外開銷也大大減少,這樣在提高了網絡吞吐率的同時降低了處理器占用率,減少了網絡延遲。巨幀數據包設置,如圖3所示。

圖3 巨幀數據包設置圖示
一個數據包到達時,網絡適配器會生成一個中斷,允許驅動程序來處理信息包。鏈接速度越高,產生的中斷越多,處理器的使用量也將增大。這會導致系統性能降低。由于啟用中斷裁決會使網絡適配器能積累中斷,并發送單個(而不是一系列的)中斷,所以在某些網絡環境下,不適宜的中斷裁決率會導致網絡延遲,甚至導致數據包丟包。中斷裁決設置,如圖4所示。

圖4 中斷裁決設置圖示
網絡適配器在接收到數據包后,需要把數據直接寫入位于計算機內存的緩沖區池,其由一定數量的固定長度的緩沖區塊組成,該選項即是設定為網絡適配器需要使用的傳輸緩沖區數量。萬兆以太網由于數據量大,如果緩沖區數量設置過小則會導致緩沖區溢出而丟包,增加此值能增強接收性能,但也消耗系統內存,應該根據實際網絡環境設置此值,達到網絡性能和內存消耗的平衡。接收緩沖區設置,如圖5所示。

圖5 接收緩沖區設置圖示
如果網絡接收端傳入數據包速率大于網絡適配器可以處理的數據率,則接收端可能會過載,這時適配器會丟棄數據包直到超載消失。IEEE802.3x協議提供了一種流量控制機制克服了這個問題——PAUSE幀,當接收方發生過載的時候,網絡適配器會生成PAUSE幀,強制發送端停止傳輸。在某些網絡環境下,比如傳輸發送端不支持PAUSE幀,啟用流量控制會帶來其他問題。流量控制設置,如圖6所示。

圖6 流量控制設置圖示
從一些技術資料來看,Windows系統是從VISTA開始,支持Socket收緩沖區大小的動態調整的,而從Windows7和Windows Server 2008開始,支持Socket發緩沖區大小的動態調整的。在一些特殊應用中,這種自動調整的緩沖區大小可能并不是最優選擇,不能提供最大的網絡吞吐率。這時候需要禁用操作系統的緩沖區自動調整功能,改而在程序Socket參數中通過SO_SNDBUF和SO_RCVBUF手動調整緩沖區大小,進而優化網絡性能。
下面針對本項目的計算機系統配置和網絡應用情況,詳細說明各參數的調整優化。
本項目計算機系統配置如下:
操作系統:Windows 10 專業版
處理器:Intel Xeon E5-2698 V4
內存:256 GB
(1)由于Xeon處理器有20個內核,所以開啟了接收方調整RSS,并將隊列設置為8個;
(2)本項目中傳輸視頻的數據包采用了UDP協議,所以開啟了網絡適配器的IP和UDP校驗和分載選項;
(3)為了減少數據包開銷處理次數,減少處理延時,本項目視頻數據包設定為8 000字節固定長度,所以開啟了網絡適配器巨幀支持選項,同時設置巨幀長度最大為9 014字節;
(4)由于計算機系統處理器性能強勁且數據包采用巨幀模式,所以關閉了網絡適配器的中斷裁決選項,以降低網絡延遲;
(5)由于計算機系統內存容量較大,所以將網絡適配器的接收緩沖區設置為4 096個;
(6)考慮到實際網絡環境為點到點連接,發送發數據率小于接收方理論帶寬,且發送方不支持流量控制,關閉了網絡適配器的流量控制選項;
(7)將應用程序Socket的接收緩沖區大小設定為1 024×1 024×128=128 MB。
通過上面優化設置,最后測試下來萬兆網口的數據吞吐率從默認設置的300 Mbps提高到了9 Gbps。雖然沒有達到理論的10 Gbps,但是已完全滿足了本項目中圖像數據實時傳輸的要求,保證了項目的順利完成。