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