嵌入式裝置的網路效能該如何分析

2021-07-01 21:44:37 字數 3115 閱讀 9788

最近對公司的嵌入式裝置做了乙個網路效能測試,如何確定網路效能的瓶頸在**,以及網路效能影響因素有哪些,有些心得記錄在此。

裝置的網路效能如何,影響因素很多,受所在區域網網路狀況,對端裝置效能影響很大,而且不同的應用程式測試速度也會有所不同。

那麼該如何來分析裝置的效能瓶頸?

(以下分析都假設是在1000m頻寬網路環境中,使用1000m phy和1000m mac,mac是synopsys的gmac)

從資料由對端裝置發出,按照先後順序我們來分析,對於網路效能的影響因素:

(1)區域網網路狀況

如果想要乙個理想網路環境的效能測試,獲取乙個可以達到的最大效能,可以採用測試裝置與對端裝置直連的方式,排除區域網能其他裝置資料報的影響。

(2)phy晶元

phy作為osi網路模型的最底物理層,是乙個資料收發器。phy不存在效能問題,這一點我問過一些phy晶元技術支援,只要提供給phy正確的工作時鐘(gmii 125mhz,mii 25mhz,rmii 50mhz)

它就可以達到它所支援的最大頻寬,也就是說對於phy只有通或者不通,而沒有快慢問題。

(3)mac core模組

mac core部分功能在於提供與phy晶元相連的介面,在phy完成自動協商後,軟體上會根據phy的協商狀態來配置mac core,如配置其工作模式(gmii mii rmii),資料報過濾模式,流控,crc校驗,傳輸排程(rx/tx優先順序)等。

mac core在與phy配合正確配置後,與phy類似,就可以達到其所支援的最大頻寬,只有通或者不通,而沒有快慢。

所以mac core不會對網路效能造成影響。

這裡有一點需要記錄下,之前有同事說對於工作在gmii模式下的phy與mac core,就一定要供125mhz時鐘嘛,低一點,速率是不是低一點也可以工作。

這個是不行的。最簡單答案就是協議規定gmii的phy mac clk必須為125mhz。

其實仔細想想,原因也簡單,資料傳輸的clk很重要的作用是來保證其取樣正確性,如果兩端clk不一致,一端的資料取樣肯定就不對了。

(4)mtl模組

mtl是mac內部的傳輸層,mtl提供了2個fifo在mac core和dma之間,rx fifo和tx fifo。在mac core和dma之間起到緩衝區作用,因為mac core和dma是不同的時鐘域,也就是mac core和dma的工作時鐘肯定是不同。

fifo由外部的乙個two-ports ram提供,乙個port連線dma的clk和data,乙個port連線mac core的clk和data。所以fifo效能決定於dma和mac core的效能,它應該不會主動影響網路效能。

(5)dma模組

dma模組完成了mac跟系統記憶體之間的資料傳輸。其工作時鐘的高低會影響dma的搬運效能。

但是由於mac內部dma是只進行網路資料搬運,沒有其他資料通道,即使其clk比ddr cpu低,其也可能完全滿足對於最大頻寬的要求。

這個可以通過改變dma clk來看其對網路效能的影響來進行判斷。

如果測試發現網路效能受到dma影響,可以採用提高emac的dma clk方式來提高網路效能。

(6)ddr記憶體

ddr的頻寬對網路效能也是有影響的。

mac的dma跟記憶體進行資料搬運,

dma是裝置具有的一種仲裁能力,裝置具有這種仲裁能力,能夠搶占匯流排,獲取匯流排的控制權,直接完成對記憶體的讀寫操作。

如果有多個裝置對記憶體發起讀寫,如cpu mac dc等,

這些主裝置來搶占匯流排控制權,在同乙個時刻,只能有乙個裝置獲取匯流排控制權,對記憶體讀寫。

記憶體頻寬指的是記憶體的資料位寬x

記憶體頻率,就是

1s的資料傳輸量。

對於軟體來說資料位寬是硬體做死,可以通過提高記憶體頻率,也就是讓

3個主裝置在

1s內有可以獲取到更多的次數的匯流排控制權,來提高網路效能。

也可以分析哪些裝置在進行記憶體讀寫,將一些暫時不用的裝置disable。

如何來確定記憶體是否對當前網路效能有影響,還是採用資料通路上其他模組不變,修改ddr clk,看對網路效能是否有影響來判斷。

(7)cpu

根據我之前的效能測試記錄,cpu效能對嵌入式裝置網路效能影響最大。

可以想象,cpu因為要進行多工切換,還要處理大量非同步中斷。在我的測試環境下cpu 800mhz + ddr 800mhz +dma 4000mhz,效能影響最大就是cpu。

我們可以進行乙個計算。在1000m環境下,假設外部網路速度 ddr效能 dma效能都達到峰值,給到ddr中的資料速率是125mb/s。

mac的dma intr模組是按照一資料報一中斷進行設計,按照網路最大mtu計算,乙個資料報在1500 bytes左右。

那麼125mb/s就應該產生: 125x1024x1024/1500 = 89478 intr/s

一秒鐘產生8.9萬個intr,這還只是接收資料intr,還不包括傳送請求intr和一些控制資料intr。

那麼這些intr對於cpu來說處理的過來嗎,根據我的實際測試,arm a8處理器800mhz,實際處理的網路intr只有1.9萬左右每秒。

因為mac driver中採用的是遍歷整個dma的描述符鍊錶,將所有資料報收下,所以這保證了在丟中斷的情況並不會發生丟資料的現象。

但這還是說明了cpu過載。

這裡cpu過載的原因,cpu頻率是乙個原因,提高cpu的clk肯定是有作用的。其次,其他外設intr,這個是不可避免的。最後,很重要的一點就是複雜的網路協議棧處理,在收到資料後,cpu還需要對資料報進行拆封,層層剝離。

這裡我也就可以理解現在一些硬體協議棧處理模組以及網上大牛對於網路協議棧優化的初衷了,都是因為嵌入式裝置cpu效能不夠啊!

上面已經將整個資料流程中硬體模組分析完了,但是在實際應用中我卻發現,對於同樣的網路環境,裝置。使用不同的工具,所測試出來的速度是不同的。這是什麼原因,我想到了下面這一點。

以上純屬個人實驗總結分析,才疏學淺,不足之處敬請大家指正,共同學習進步。

什麼是嵌入式裝置? 嵌入式裝置的定義

區別於通用計算機的其他裝置都可以稱之為嵌入式裝置 個人電腦,伺服器 一段時期內,必備的硬體配置。底層驅動開發 關鍵字 bsp 嵌入式linux wince vxworks 上層應用開發 關鍵字 posix jd以嵌入式linux系統開發為例 熟悉常見外設,匯流排的linux驅動開發 微控制器,m3,...

如何控制嵌入式裝置上的通訊?

即使在物聯網時代的今天,你仍然需要通過本地連線來訪問和控制你的嵌入式裝置。出於安全考慮,你不一定想要通過網路來做一些關鍵的配置或者資料傳輸。亦或,你的裝置需要乙個特殊的維護介面。在這篇文章中,我將會分享通過usb 和你的嵌入式裝置通訊的方法。在我們開始之前,讓我來解釋一些術語 在本文中,我將會討論u...

如何控制嵌入式裝置上的通訊?

和你的嵌入式裝置通訊的方法。在我們開始之前,讓我來解釋一些術語 在本文中,我將會討論usb 主機 和 客戶端 主機 是指用於連線你嵌入式裝置的電腦,客戶端 則是你的嵌入式裝置。並且,我會討論只在 windows ce 中的一些方法。linux 也提供類似的方法。韜睿預先編譯好的 windows ce...