本文介紹如何使能 Linux 網(wǎng)絡(luò)協(xié)議棧中的 RFS(receive flow steering)功能以優(yōu)化 MPSoC APU 的并行處理能力,解決丟包問題。
問題描述:
在測試 ZCU102 PL 10G Ethernet with MCDMA 設(shè)計的性能時,遇到 UDP 接收丟包率很高的情況,測試使用的工具是 iperf3。
測試過程:
Board side:在 core1~3 上各開一個 iperf3 服務(wù)端用于收包,命令如下:
Server side:使用與 zcu102 用光纖相連的服務(wù)器發(fā)送 UDP 幀,命令如下:
雙方的網(wǎng)卡都工作在 MTU1500 模式下,故數(shù)據(jù)段長度設(shè)為 1472B,總帶寬暫設(shè)為 2400M。
測試結(jié)果如上圖所示,丟包率超過了百分之十,故實際傳輸速度也達(dá)不到設(shè)定的帶寬,使用 mpstat 命令觀察 CPU 使用狀況,發(fā)現(xiàn)接收工程中 CPU0 的軟中斷占用達(dá)到93.3%。
解決方案:
使用 RFS 接收流導(dǎo)向,RFS 是 Linux 網(wǎng)絡(luò)協(xié)議棧提供的一項輔助性功能,RFS 的目標(biāo)是通過將數(shù)據(jù)包在內(nèi)核中的處理引導(dǎo)到使用該數(shù)據(jù)包的應(yīng)用程序線程對應(yīng)的 CPU 來提高數(shù)據(jù)緩存的命中率,詳情可參考 Linux 內(nèi)核文檔https://www.kernel.org/doc/html/latest/networking/scaling.html
在本文的測試中 Board side 上運(yùn)行了三個 iperf 服務(wù)端在三個 CPU 上,RFS 可以將發(fā)給某個服務(wù)端的數(shù)據(jù)包的部分處理工作交給這個服務(wù)端對應(yīng)的 CPU 執(zhí)行,以此平衡工作負(fù)載。
按照文檔中的說明,rps_sock_flow_entries 設(shè)置為32768,本文使用的設(shè)計中 MCDMA 共有16個接收通道,所以 rps_flow_cnt 為32768/16=2048,另外共開啟了三個 iperf 服務(wù)端,所以暫時只設(shè)置 rx-0~rx-2,綜上,執(zhí)行命令如下:
重新測試后結(jié)果如上圖所示,丟包率大大降低,實際傳輸速度也達(dá)到了設(shè)定值,使用 mpstat 命令監(jiān)控傳輸期間的 CPU 狀況,發(fā)現(xiàn) CPU0 的軟中斷占用時間降低,而 CPU1~3 的軟中斷占用升高,可以看出實現(xiàn)了負(fù)載的分配,但是從總體來看,四個 CPU 的總負(fù)載升高,說明 RFS 還是有一定的額外工作開銷。
總結(jié):
使用 RFS 可以一定程度上解決 MPSoC 10G 以太網(wǎng)應(yīng)用(使用 MCDMA 時)中的 UDP 接收丟包問題,但是會產(chǎn)生額外的 CPU 開銷,如果丟包率在接受范圍內(nèi)可以選擇不開啟。
責(zé)任編輯:彭菁
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7139瀏覽量
89578 -
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210394 -
APU
+關(guān)注
關(guān)注
0文章
142瀏覽量
23777
原文標(biāo)題:如何解決 MPSoC 萬兆以太網(wǎng)應(yīng)用中 UDP 接收丟包問題
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
結(jié)合pppoe協(xié)議分析Linux網(wǎng)絡(luò)棧的實現(xiàn)方式
![結(jié)合pppoe<b class='flag-5'>協(xié)議</b>分析<b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>棧</b>的實現(xiàn)方式](https://file.elecfans.com/web1/M00/CC/39/pIYBAF-WdyOAdKAWAAAdmtj6w7c565.png)
通信網(wǎng)絡(luò)協(xié)議棧之UDP協(xié)議技術(shù)解析
![通信<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>之UDP<b class='flag-5'>協(xié)議</b>技術(shù)解析](https://file1.elecfans.com/web2/M00/BF/2B/wKgZomW7CUiASumnAAIVU2ts6hg471.png)
網(wǎng)絡(luò)協(xié)議棧-lwip2.1.2移植
使能Linux內(nèi)核中的SCSI協(xié)議
介紹RL-TCPnet網(wǎng)絡(luò)協(xié)議棧
CH582如何優(yōu)化BLE協(xié)議棧的RAM占用?
基于網(wǎng)絡(luò)處理器的VxWorks高層協(xié)議棧開發(fā)
LINUX網(wǎng)絡(luò)協(xié)議棧實現(xiàn)分析-SKBUFF的實現(xiàn)
Linux平臺雙協(xié)議棧主機(jī)網(wǎng)絡(luò)管控系統(tǒng)設(shè)計與實現(xiàn)
Linux網(wǎng)絡(luò)技術(shù)中最核心的部分--TCP/IP協(xié)議棧
tcpip協(xié)議棧是什么?tcpip協(xié)議棧有哪些協(xié)議?tcpip協(xié)議棧中報文封裝和解封裝過程
![tcpip<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>是什么?tcpip<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>有哪些<b class='flag-5'>協(xié)議</b>?tcpip<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>中報文封裝和解封裝過程](https://file1.elecfans.com/web2/M00/8E/A8/wKgZomTI5FyAeuFcAACN0lbnAcA535.jpg)
Linux網(wǎng)絡(luò)技術(shù)棧的相關(guān)知識
![<b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b>技術(shù)<b class='flag-5'>棧</b>的相關(guān)知識](https://file1.elecfans.com/web2/M00/95/22/wKgZomTmwfKAMWT2AAAzpRD3428798.png)
Linux網(wǎng)絡(luò)協(xié)議棧的實現(xiàn)
![<b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>的實現(xiàn)](https://file1.elecfans.com/web2/M00/06/C6/wKgaombfpT-AeVQcAACjr17dpiQ190.png)
評論